diff --git a/browser/browser_context_mapping.go b/browser/browser_context_mapping.go index 5ba69b95a..87474c2c0 100644 --- a/browser/browser_context_mapping.go +++ b/browser/browser_context_mapping.go @@ -74,13 +74,14 @@ func mapBrowserContext(vu moduleVU, bc *common.BrowserContext) mapping { //nolin return bc.Cookies(urls...) //nolint:wrapcheck }) }, - "grantPermissions": func(permissions []string, opts sobek.Value) *sobek.Promise { + "grantPermissions": func(permissions []string, opts sobek.Value) (*sobek.Promise, error) { + popts, err := exportTo[common.GrantPermissionsOptions](vu.Runtime(), opts) + if err != nil { + return nil, fmt.Errorf("parsing grant permission options: %w", err) + } return k6ext.Promise(vu.Context(), func() (any, error) { - popts := common.NewGrantPermissionsOptions() - popts.Parse(vu.Context(), opts) - - return nil, bc.GrantPermissions(permissions, popts) //nolint:wrapcheck - }) + return nil, bc.GrantPermissions(permissions, popts) + }), nil }, "setDefaultNavigationTimeout": bc.SetDefaultNavigationTimeout, "setDefaultTimeout": bc.SetDefaultTimeout, diff --git a/browser/sync_browser_context_mapping.go b/browser/sync_browser_context_mapping.go index b304a64a0..e7f750d74 100644 --- a/browser/sync_browser_context_mapping.go +++ b/browser/sync_browser_context_mapping.go @@ -49,10 +49,11 @@ func syncMapBrowserContext(vu moduleVU, bc *common.BrowserContext) mapping { //n "close": bc.Close, "cookies": bc.Cookies, "grantPermissions": func(permissions []string, opts sobek.Value) error { - pOpts := common.NewGrantPermissionsOptions() - pOpts.Parse(vu.Context(), opts) - - return bc.GrantPermissions(permissions, pOpts) //nolint:wrapcheck + popts, err := exportTo[common.GrantPermissionsOptions](vu.Runtime(), opts) + if err != nil { + return fmt.Errorf("parsing grant permission options: %w", err) + } + return bc.GrantPermissions(permissions, popts) }, "setDefaultNavigationTimeout": bc.SetDefaultNavigationTimeout, "setDefaultTimeout": bc.SetDefaultTimeout, diff --git a/common/browser_context.go b/common/browser_context.go index 65d6bda52..3e2257dce 100644 --- a/common/browser_context.go +++ b/common/browser_context.go @@ -131,7 +131,7 @@ func NewBrowserContext( } if len(opts.Permissions) > 0 { - err := b.GrantPermissions(opts.Permissions, NewGrantPermissionsOptions()) + err := b.GrantPermissions(opts.Permissions, GrantPermissionsOptions{}) if err != nil { return nil, err } @@ -206,7 +206,7 @@ func (b *BrowserContext) Close() error { } // GrantPermissions enables the specified permissions, all others will be disabled. -func (b *BrowserContext) GrantPermissions(permissions []string, opts *GrantPermissionsOptions) error { +func (b *BrowserContext) GrantPermissions(permissions []string, opts GrantPermissionsOptions) error { b.logger.Debugf("BrowserContext:GrantPermissions", "bctxid:%v", b.id) permsToProtocol := map[string]cdpbrowser.PermissionType{ diff --git a/common/browser_context_options.go b/common/browser_context_options.go index 26ba16429..32a86764c 100644 --- a/common/browser_context_options.go +++ b/common/browser_context_options.go @@ -150,23 +150,3 @@ func (w *WaitForEventOptions) Parse(ctx context.Context, optsOrPredicate sobek.V type GrantPermissionsOptions struct { Origin string } - -// NewGrantPermissionsOptions returns a new GrantPermissionsOptions. -func NewGrantPermissionsOptions() *GrantPermissionsOptions { - return &GrantPermissionsOptions{} -} - -// Parse parses the options from opts if opts exists in the sobek runtime. -func (g *GrantPermissionsOptions) Parse(ctx context.Context, opts sobek.Value) { - rt := k6ext.Runtime(ctx) - - if sobekValueExists(opts) { - opts := opts.ToObject(rt) - for _, k := range opts.Keys() { - if k == "origin" { - g.Origin = opts.Get(k).String() - break - } - } - } -} diff --git a/examples/geo.js b/examples/geo.js deleted file mode 100644 index 5cc251f6f..000000000 --- a/examples/geo.js +++ /dev/null @@ -1,23 +0,0 @@ -import { browser } from 'k6/x/browser/async'; -import { check } from 'https://jslib.k6.io/k6-utils/1.5.0/index.js'; - -export const options = { - scenarios: { - ui: { - executor: 'shared-iterations', - options: { - browser: { - type: 'chromium', - }, - }, - }, - }, - thresholds: { - checks: ["rate==1.0"] - } -} - -export default async function() { - const context = await browser.newContext(); - await context.setGeolocation({ latitude: 37.7749, slongitude: -122.4194, accuracy: 1 }); -} diff --git a/tests/browser_context_test.go b/tests/browser_context_test.go index 13cd437f3..c4589fbcc 100644 --- a/tests/browser_context_test.go +++ b/tests/browser_context_test.go @@ -912,7 +912,10 @@ func TestBrowserContextGrantPermissions(t *testing.T) { bCtx, err := tb.NewContext(nil) require.NoError(t, err) - err = bCtx.GrantPermissions([]string{tc.permission}, common.NewGrantPermissionsOptions()) + err = bCtx.GrantPermissions( + []string{tc.permission}, + common.GrantPermissionsOptions{}, + ) if tc.wantErr == "" { assert.NoError(t, err) @@ -968,7 +971,10 @@ func TestBrowserContextClearPermissions(t *testing.T) { require.False(t, hasPermission(tb, p, "geolocation")) - err = bCtx.GrantPermissions([]string{"geolocation"}, common.NewGrantPermissionsOptions()) + err = bCtx.GrantPermissions( + []string{"geolocation"}, + common.GrantPermissionsOptions{}, + ) require.NoError(t, err) require.True(t, hasPermission(tb, p, "geolocation"))