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

Commit cb80906

Browse files
committed
Refactor BrowserContextOptions.Parse
1 parent bd42b72 commit cb80906

File tree

1 file changed

+80
-77
lines changed

1 file changed

+80
-77
lines changed

common/browser_context_options.go

Lines changed: 80 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -100,88 +100,91 @@ func NewBrowserContextOptions() *BrowserContextOptions {
100100
}
101101
}
102102

103-
func (b *BrowserContextOptions) Parse(ctx context.Context, opts sobek.Value) error {
103+
// Parse parses the browser context options.
104+
func (b *BrowserContextOptions) Parse(ctx context.Context, opts sobek.Value) error { //nolint:cyclop,funlen,gocognit
104105
rt := k6ext.Runtime(ctx)
105-
if opts != nil && !sobek.IsUndefined(opts) && !sobek.IsNull(opts) {
106-
opts := opts.ToObject(rt)
107-
for _, k := range opts.Keys() {
108-
switch k {
109-
case "acceptDownloads":
110-
b.AcceptDownloads = opts.Get(k).ToBoolean()
111-
case "bypassCSP":
112-
b.BypassCSP = opts.Get(k).ToBoolean()
113-
case "colorScheme":
114-
switch ColorScheme(opts.Get(k).String()) {
115-
case "light":
116-
b.ColorScheme = ColorSchemeLight
117-
case "dark":
118-
b.ColorScheme = ColorSchemeDark
119-
default:
120-
b.ColorScheme = ColorSchemeNoPreference
121-
}
122-
case "deviceScaleFactor":
123-
b.DeviceScaleFactor = opts.Get(k).ToFloat()
124-
case "extraHTTPHeaders":
125-
headers := opts.Get(k).ToObject(rt)
126-
for _, k := range headers.Keys() {
127-
b.ExtraHTTPHeaders[k] = headers.Get(k).String()
128-
}
129-
case "geolocation":
130-
geolocation := NewGeolocation()
131-
if err := geolocation.Parse(ctx, opts.Get(k).ToObject(rt)); err != nil {
132-
return err
133-
}
134-
b.Geolocation = geolocation
135-
case "hasTouch":
136-
b.HasTouch = opts.Get(k).ToBoolean()
137-
case "httpCredentials":
138-
credentials := NewCredentials()
139-
if err := credentials.Parse(ctx, opts.Get(k).ToObject(rt)); err != nil {
140-
return err
141-
}
142-
b.HttpCredentials = credentials
143-
case "ignoreHTTPSErrors":
144-
b.IgnoreHTTPSErrors = opts.Get(k).ToBoolean()
145-
case "isMobile":
146-
b.IsMobile = opts.Get(k).ToBoolean()
147-
case "javaScriptEnabled":
148-
b.JavaScriptEnabled = opts.Get(k).ToBoolean()
149-
case "locale":
150-
b.Locale = opts.Get(k).String()
151-
case "offline":
152-
b.Offline = opts.Get(k).ToBoolean()
153-
case "permissions":
154-
if ps, ok := opts.Get(k).Export().([]any); ok {
155-
for _, p := range ps {
156-
b.Permissions = append(b.Permissions, fmt.Sprintf("%v", p))
157-
}
158-
}
159-
case "reducedMotion":
160-
switch ReducedMotion(opts.Get(k).String()) {
161-
case "reduce":
162-
b.ReducedMotion = ReducedMotionReduce
163-
default:
164-
b.ReducedMotion = ReducedMotionNoPreference
165-
}
166-
case "screen":
167-
screen := &Screen{}
168-
if err := screen.Parse(ctx, opts.Get(k).ToObject(rt)); err != nil {
169-
return err
170-
}
171-
b.Screen = screen
172-
case "timezoneID":
173-
b.TimezoneID = opts.Get(k).String()
174-
case "userAgent":
175-
b.UserAgent = opts.Get(k).String()
176-
case "viewport":
177-
viewport := &Viewport{}
178-
if err := viewport.Parse(ctx, opts.Get(k).ToObject(rt)); err != nil {
179-
return err
106+
if !sobekValueExists(opts) {
107+
return nil
108+
}
109+
o := opts.ToObject(rt)
110+
for _, k := range o.Keys() {
111+
switch k {
112+
case "acceptDownloads":
113+
b.AcceptDownloads = o.Get(k).ToBoolean()
114+
case "bypassCSP":
115+
b.BypassCSP = o.Get(k).ToBoolean()
116+
case "colorScheme":
117+
switch ColorScheme(o.Get(k).String()) { //nolint:exhaustive
118+
case "light":
119+
b.ColorScheme = ColorSchemeLight
120+
case "dark":
121+
b.ColorScheme = ColorSchemeDark
122+
default:
123+
b.ColorScheme = ColorSchemeNoPreference
124+
}
125+
case "deviceScaleFactor":
126+
b.DeviceScaleFactor = o.Get(k).ToFloat()
127+
case "extraHTTPHeaders":
128+
headers := o.Get(k).ToObject(rt)
129+
for _, k := range headers.Keys() {
130+
b.ExtraHTTPHeaders[k] = headers.Get(k).String()
131+
}
132+
case "geolocation":
133+
geolocation := NewGeolocation()
134+
if err := geolocation.Parse(ctx, o.Get(k).ToObject(rt)); err != nil {
135+
return err
136+
}
137+
b.Geolocation = geolocation
138+
case "hasTouch":
139+
b.HasTouch = o.Get(k).ToBoolean()
140+
case "httpCredentials":
141+
credentials := NewCredentials()
142+
if err := credentials.Parse(ctx, o.Get(k).ToObject(rt)); err != nil {
143+
return err
144+
}
145+
b.HttpCredentials = credentials
146+
case "ignoreHTTPSErrors":
147+
b.IgnoreHTTPSErrors = o.Get(k).ToBoolean()
148+
case "isMobile":
149+
b.IsMobile = o.Get(k).ToBoolean()
150+
case "javaScriptEnabled":
151+
b.JavaScriptEnabled = o.Get(k).ToBoolean()
152+
case "locale":
153+
b.Locale = o.Get(k).String()
154+
case "offline":
155+
b.Offline = o.Get(k).ToBoolean()
156+
case "permissions":
157+
if ps, ok := o.Get(k).Export().([]any); ok {
158+
for _, p := range ps {
159+
b.Permissions = append(b.Permissions, fmt.Sprintf("%v", p))
180160
}
181-
b.Viewport = viewport
182161
}
162+
case "reducedMotion":
163+
switch ReducedMotion(o.Get(k).String()) { //nolint:exhaustive
164+
case "reduce":
165+
b.ReducedMotion = ReducedMotionReduce
166+
default:
167+
b.ReducedMotion = ReducedMotionNoPreference
168+
}
169+
case "screen":
170+
screen := &Screen{}
171+
if err := screen.Parse(ctx, o.Get(k).ToObject(rt)); err != nil {
172+
return err
173+
}
174+
b.Screen = screen
175+
case "timezoneID":
176+
b.TimezoneID = o.Get(k).String()
177+
case "userAgent":
178+
b.UserAgent = o.Get(k).String()
179+
case "viewport":
180+
viewport := &Viewport{}
181+
if err := viewport.Parse(ctx, o.Get(k).ToObject(rt)); err != nil {
182+
return err
183+
}
184+
b.Viewport = viewport
183185
}
184186
}
187+
185188
return nil
186189
}
187190

0 commit comments

Comments
 (0)