feat: support firefoxUserPrefs in launchPersistentContext (#27840)
Fixes #27773.
This commit is contained in:
parent
d395a38a63
commit
88f30d1ce2
|
|
@ -337,6 +337,12 @@ use a temporary directory instead.
|
||||||
### option: BrowserType.launchPersistentContext.-inline- = %%-shared-context-params-list-v1.8-%%
|
### option: BrowserType.launchPersistentContext.-inline- = %%-shared-context-params-list-v1.8-%%
|
||||||
* since: v1.8
|
* since: v1.8
|
||||||
|
|
||||||
|
### option: BrowserType.launchPersistentContext.firefoxUserPrefs = %%-js-python-browser-option-firefoxuserprefs-%%
|
||||||
|
* since: v1.40
|
||||||
|
|
||||||
|
### option: BrowserType.launchPersistentContext.firefoxUserPrefs2 = %%-csharp-java-browser-option-firefoxuserprefs-%%
|
||||||
|
* since: v1.40
|
||||||
|
|
||||||
## async method: BrowserType.launchServer
|
## async method: BrowserType.launchServer
|
||||||
* since: v1.8
|
* since: v1.8
|
||||||
* langs: js
|
* langs: js
|
||||||
|
|
|
||||||
|
|
@ -76,14 +76,11 @@ type LaunchOverrides = {
|
||||||
ignoreDefaultArgs?: boolean | string[];
|
ignoreDefaultArgs?: boolean | string[];
|
||||||
env?: Env;
|
env?: Env;
|
||||||
logger?: Logger;
|
logger?: Logger;
|
||||||
|
firefoxUserPrefs?: { [key: string]: string | number | boolean };
|
||||||
};
|
};
|
||||||
|
|
||||||
type FirefoxUserPrefs = {
|
export type LaunchOptions = Omit<channels.BrowserTypeLaunchOptions, 'ignoreAllDefaultArgs' | 'ignoreDefaultArgs' | 'env' | 'firefoxUserPrefs'> & LaunchOverrides;
|
||||||
firefoxUserPrefs?: { [key: string]: string | number | boolean },
|
export type LaunchPersistentContextOptions = Omit<LaunchOptions & BrowserContextOptions, 'storageState'>;
|
||||||
};
|
|
||||||
type LaunchOptionsBase = Omit<channels.BrowserTypeLaunchOptions, 'ignoreAllDefaultArgs' | 'ignoreDefaultArgs' | 'env' | 'firefoxUserPrefs'> & LaunchOverrides;
|
|
||||||
export type LaunchOptions = LaunchOptionsBase & FirefoxUserPrefs;
|
|
||||||
export type LaunchPersistentContextOptions = Omit<LaunchOptionsBase & BrowserContextOptions, 'storageState'>;
|
|
||||||
|
|
||||||
export type ConnectOptions = {
|
export type ConnectOptions = {
|
||||||
wsEndpoint: string,
|
wsEndpoint: string,
|
||||||
|
|
@ -117,7 +114,8 @@ export type LaunchServerOptions = {
|
||||||
port?: number,
|
port?: number,
|
||||||
wsPath?: string,
|
wsPath?: string,
|
||||||
logger?: Logger,
|
logger?: Logger,
|
||||||
} & FirefoxUserPrefs;
|
firefoxUserPrefs?: { [key: string]: string | number | boolean };
|
||||||
|
};
|
||||||
|
|
||||||
export type LaunchAndroidServerOptions = {
|
export type LaunchAndroidServerOptions = {
|
||||||
deviceSerialNumber?: string,
|
deviceSerialNumber?: string,
|
||||||
|
|
|
||||||
|
|
@ -521,6 +521,7 @@ scheme.BrowserTypeLaunchPersistentContextParams = tObject({
|
||||||
downloadsPath: tOptional(tString),
|
downloadsPath: tOptional(tString),
|
||||||
tracesDir: tOptional(tString),
|
tracesDir: tOptional(tString),
|
||||||
chromiumSandbox: tOptional(tBoolean),
|
chromiumSandbox: tOptional(tBoolean),
|
||||||
|
firefoxUserPrefs: tOptional(tAny),
|
||||||
noDefaultViewport: tOptional(tBoolean),
|
noDefaultViewport: tOptional(tBoolean),
|
||||||
viewport: tOptional(tObject({
|
viewport: tOptional(tObject({
|
||||||
width: tNumber,
|
width: tNumber,
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ export class FFBrowser extends Browser {
|
||||||
const browser = new FFBrowser(parent, connection, options);
|
const browser = new FFBrowser(parent, connection, options);
|
||||||
if ((options as any).__testHookOnConnectToBrowser)
|
if ((options as any).__testHookOnConnectToBrowser)
|
||||||
await (options as any).__testHookOnConnectToBrowser();
|
await (options as any).__testHookOnConnectToBrowser();
|
||||||
let firefoxUserPrefs = options.persistent ? {} : options.originalLaunchOptions.firefoxUserPrefs ?? {};
|
let firefoxUserPrefs = options.originalLaunchOptions.firefoxUserPrefs ?? {};
|
||||||
if (Object.keys(kBandaidFirefoxUserPrefs).length)
|
if (Object.keys(kBandaidFirefoxUserPrefs).length)
|
||||||
firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };
|
firefoxUserPrefs = { ...kBandaidFirefoxUserPrefs, ...firefoxUserPrefs };
|
||||||
const promises: Promise<any>[] = [
|
const promises: Promise<any>[] = [
|
||||||
|
|
|
||||||
6
packages/playwright-core/types/types.d.ts
vendored
6
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -12841,6 +12841,12 @@ export interface BrowserType<Unused = {}> {
|
||||||
*/
|
*/
|
||||||
extraHTTPHeaders?: { [key: string]: string; };
|
extraHTTPHeaders?: { [key: string]: string; };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Firefox user preferences. Learn more about the Firefox user preferences at
|
||||||
|
* [`about:config`](https://support.mozilla.org/en-US/kb/about-config-editor-firefox).
|
||||||
|
*/
|
||||||
|
firefoxUserPrefs?: { [key: string]: string|number|boolean; };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
* Emulates `'forced-colors'` media feature, supported values are `'active'`, `'none'`. See
|
||||||
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details.
|
* [page.emulateMedia([options])](https://playwright.dev/docs/api/class-page#page-emulate-media) for more details.
|
||||||
|
|
|
||||||
|
|
@ -929,6 +929,7 @@ export type BrowserTypeLaunchPersistentContextParams = {
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
tracesDir?: string,
|
tracesDir?: string,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
|
firefoxUserPrefs?: any,
|
||||||
noDefaultViewport?: boolean,
|
noDefaultViewport?: boolean,
|
||||||
viewport?: {
|
viewport?: {
|
||||||
width: number,
|
width: number,
|
||||||
|
|
@ -1000,6 +1001,7 @@ export type BrowserTypeLaunchPersistentContextOptions = {
|
||||||
downloadsPath?: string,
|
downloadsPath?: string,
|
||||||
tracesDir?: string,
|
tracesDir?: string,
|
||||||
chromiumSandbox?: boolean,
|
chromiumSandbox?: boolean,
|
||||||
|
firefoxUserPrefs?: any,
|
||||||
noDefaultViewport?: boolean,
|
noDefaultViewport?: boolean,
|
||||||
viewport?: {
|
viewport?: {
|
||||||
width: number,
|
width: number,
|
||||||
|
|
|
||||||
|
|
@ -411,6 +411,7 @@ LaunchOptions:
|
||||||
downloadsPath: string?
|
downloadsPath: string?
|
||||||
tracesDir: string?
|
tracesDir: string?
|
||||||
chromiumSandbox: boolean?
|
chromiumSandbox: boolean?
|
||||||
|
firefoxUserPrefs: json?
|
||||||
|
|
||||||
|
|
||||||
ContextOptions:
|
ContextOptions:
|
||||||
|
|
@ -868,7 +869,6 @@ BrowserType:
|
||||||
launch:
|
launch:
|
||||||
parameters:
|
parameters:
|
||||||
$mixin: LaunchOptions
|
$mixin: LaunchOptions
|
||||||
firefoxUserPrefs: json?
|
|
||||||
slowMo: number?
|
slowMo: number?
|
||||||
returns:
|
returns:
|
||||||
browser: Browser
|
browser: Browser
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ export const LogTab: React.FunctionComponent<{
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return entries;
|
return entries;
|
||||||
}, [action]);
|
}, [action, isLive]);
|
||||||
if (!entries.length)
|
if (!entries.length)
|
||||||
return <PlaceholderPanel text='No log entries' />;
|
return <PlaceholderPanel text='No log entries' />;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -30,3 +30,16 @@ it('should pass firefox user preferences', async ({ browserType, mode }) => {
|
||||||
expect(error.message).toContain('NS_ERROR_PROXY_CONNECTION_REFUSED');
|
expect(error.message).toContain('NS_ERROR_PROXY_CONNECTION_REFUSED');
|
||||||
await browser.close();
|
await browser.close();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should pass firefox user preferences in persistent', async ({ mode, launchPersistent }) => {
|
||||||
|
it.skip(mode.startsWith('service'));
|
||||||
|
const { page } = await launchPersistent({
|
||||||
|
firefoxUserPrefs: {
|
||||||
|
'network.proxy.type': 1,
|
||||||
|
'network.proxy.http': '127.0.0.1',
|
||||||
|
'network.proxy.http_port': 3333,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const error = await page.goto('http://example.com').catch(e => e);
|
||||||
|
expect(error.message).toContain('NS_ERROR_PROXY_CONNECTION_REFUSED');
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue