Skip to content

Commit 1592353

Browse files
authored
chore(bidi): pass proxy to createUserContext (microsoft#36676)
1 parent cb752b7 commit 1592353

File tree

1 file changed

+35
-30
lines changed

1 file changed

+35
-30
lines changed

packages/playwright-core/src/server/bidi/bidiBrowser.ts

Lines changed: 35 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -47,40 +47,11 @@ export class BidiBrowser extends Browser {
4747
if ((options as any).__testHookOnConnectToBrowser)
4848
await (options as any).__testHookOnConnectToBrowser();
4949

50-
let proxy: bidi.Session.ManualProxyConfiguration | undefined;
51-
if (options.proxy) {
52-
proxy = {
53-
proxyType: 'manual',
54-
};
55-
const url = new URL(options.proxy.server); // Validate proxy server.
56-
switch (url.protocol) {
57-
case 'http:':
58-
proxy.httpProxy = url.host;
59-
break;
60-
case 'https:':
61-
proxy.httpsProxy = url.host;
62-
break;
63-
case 'socks4:':
64-
proxy.socksProxy = url.host;
65-
proxy.socksVersion = 4;
66-
break;
67-
case 'socks5:':
68-
proxy.socksProxy = url.host;
69-
proxy.socksVersion = 5;
70-
break;
71-
default:
72-
throw new Error('Invalid proxy server protocol: ' + options.proxy.server);
73-
}
74-
if (options.proxy.bypass)
75-
proxy.noProxy = options.proxy.bypass.split(',');
76-
// TODO: support authentication.
77-
}
78-
7950
browser._bidiSessionInfo = await browser._browserSession.send('session.new', {
8051
capabilities: {
8152
alwaysMatch: {
8253
acceptInsecureCerts: false,
83-
proxy,
54+
proxy: getProxyConfiguration(options.proxy),
8455
unhandledPromptBehavior: {
8556
default: bidi.Session.UserPromptHandlerType.Ignore,
8657
},
@@ -126,6 +97,7 @@ export class BidiBrowser extends Browser {
12697
async doCreateNewContext(options: types.BrowserContextOptions): Promise<BrowserContext> {
12798
const { userContext } = await this._browserSession.send('browser.createUserContext', {
12899
acceptInsecureCerts: options.ignoreHTTPSErrors,
100+
proxy: getProxyConfiguration(options.proxy),
129101
});
130102
const context = new BidiBrowserContext(this, userContext, options);
131103
await context._initialize();
@@ -473,6 +445,39 @@ function toBidiSameSite(sameSite: channels.SetNetworkCookie['sameSite']): bidi.N
473445
return bidi.Network.SameSite.None;
474446
}
475447

448+
function getProxyConfiguration(proxySettings?: types.ProxySettings): bidi.Session.ManualProxyConfiguration | undefined {
449+
if (!proxySettings)
450+
return undefined;
451+
452+
const proxy: bidi.Session.ManualProxyConfiguration = {
453+
proxyType: 'manual',
454+
};
455+
const url = new URL(proxySettings.server); // Validate proxy server.
456+
switch (url.protocol) {
457+
case 'http:':
458+
proxy.httpProxy = url.host;
459+
break;
460+
case 'https:':
461+
proxy.sslProxy = url.host;
462+
break;
463+
case 'socks4:':
464+
proxy.socksProxy = url.host;
465+
proxy.socksVersion = 4;
466+
break;
467+
case 'socks5:':
468+
proxy.socksProxy = url.host;
469+
proxy.socksVersion = 5;
470+
break;
471+
default:
472+
throw new Error('Invalid proxy server protocol: ' + proxySettings.server);
473+
}
474+
if (proxySettings.bypass)
475+
proxy.noProxy = proxySettings.bypass.split(',');
476+
// TODO: support authentication.
477+
478+
return proxy;
479+
}
480+
476481
export namespace Network {
477482
export const enum SameSite {
478483
Strict = 'strict',

0 commit comments

Comments
 (0)