Skip to content
This repository has been archived by the owner on Jan 30, 2025. It is now read-only.

Commit

Permalink
Remove goja from browserContext.AddInitScript
Browse files Browse the repository at this point in the history
  • Loading branch information
ankur22 committed Feb 29, 2024
1 parent bf9e949 commit e2a0ed0
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 39 deletions.
30 changes: 28 additions & 2 deletions browser/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package browser
import (
"context"
"fmt"
"reflect"
"time"

"github.com/dop251/goja"
Expand Down Expand Up @@ -811,8 +812,33 @@ func mapWorker(vu moduleVU, w *common.Worker) mapping {
func mapBrowserContext(vu moduleVU, bc *common.BrowserContext) mapping { //nolint:funlen
rt := vu.Runtime()
return mapping{
"addCookies": bc.AddCookies,
"addInitScript": bc.AddInitScript,
"addCookies": bc.AddCookies,
"addInitScript": func(script goja.Value) error {
source := ""
if gojaValueExists(script) {
switch script.ExportType() {
case reflect.TypeOf(string("")):
source = script.String()
case reflect.TypeOf(goja.Object{}):
opts := script.ToObject(rt)
for _, k := range opts.Keys() {
switch k {
case "content":
source = opts.Get(k).String()
}
}
default:
_, isCallable := goja.AssertFunction(script)
if !isCallable {
source = fmt.Sprintf("(%s);", script.ToString().String())
} else {
source = fmt.Sprintf("(%s)(...args);", script.ToString().String())
}
}
}

return bc.AddInitScript(source) //nolint:wrapcheck
},
"browser": bc.Browser,
"clearCookies": bc.ClearCookies,
"clearPermissions": bc.ClearPermissions,
Expand Down
43 changes: 6 additions & 37 deletions common/browser_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"fmt"
"net/url"
"reflect"
"strings"
"time"

Expand Down Expand Up @@ -109,57 +108,27 @@ func NewBrowserContext(
}
}

rt := b.vu.Runtime()
k6Obj := rt.ToValue(js.K6ObjectScript)
wv := rt.ToValue(js.WebVitalIIFEScript)
wvi := rt.ToValue(js.WebVitalInitScript)

if err := b.AddInitScript(k6Obj); err != nil {
if err := b.AddInitScript(js.K6ObjectScript); err != nil {
return nil, fmt.Errorf("adding k6 object to new browser context: %w", err)
}
if err := b.AddInitScript(wv); err != nil {
if err := b.AddInitScript(js.WebVitalIIFEScript); err != nil {
return nil, fmt.Errorf("adding web vital script to new browser context: %w", err)
}
if err := b.AddInitScript(wvi); err != nil {
if err := b.AddInitScript(js.WebVitalInitScript); err != nil {
return nil, fmt.Errorf("adding web vital init script to new browser context: %w", err)
}

return &b, nil
}

// AddInitScript adds a script that will be initialized on all new pages.
func (b *BrowserContext) AddInitScript(script goja.Value) error {
func (b *BrowserContext) AddInitScript(script string) error {
b.logger.Debugf("BrowserContext:AddInitScript", "bctxid:%v", b.id)

rt := b.vu.Runtime()

source := ""
if gojaValueExists(script) {
switch script.ExportType() {
case reflect.TypeOf(string("")):
source = script.String()
case reflect.TypeOf(goja.Object{}):
opts := script.ToObject(rt)
for _, k := range opts.Keys() {
switch k {
case "content":
source = opts.Get(k).String()
}
}
default:
_, isCallable := goja.AssertFunction(script)
if !isCallable {
source = fmt.Sprintf("(%s);", script.ToString().String())
} else {
source = fmt.Sprintf("(%s)(...args);", script.ToString().String())
}
}
}

b.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, source)
b.evaluateOnNewDocumentSources = append(b.evaluateOnNewDocumentSources, script)

for _, p := range b.browser.getPages() {
if err := p.evaluateOnNewDocument(source); err != nil {
if err := p.evaluateOnNewDocument(script); err != nil {
return fmt.Errorf("adding init script to browser context: %w", err)
}
}
Expand Down

0 comments on commit e2a0ed0

Please sign in to comment.