fix(webkit): properly set user agent in persistent context (#22283)
Fixes https://github.com/microsoft/playwright/issues/22274
This commit is contained in:
parent
635a2dac16
commit
5cd9f83c7b
|
|
@ -590,6 +590,10 @@ scheme.BrowserCloseParams = tOptional(tObject({}));
|
|||
scheme.BrowserCloseResult = tOptional(tObject({}));
|
||||
scheme.BrowserKillForTestsParams = tOptional(tObject({}));
|
||||
scheme.BrowserKillForTestsResult = tOptional(tObject({}));
|
||||
scheme.BrowserDefaultUserAgentForTestParams = tOptional(tObject({}));
|
||||
scheme.BrowserDefaultUserAgentForTestResult = tObject({
|
||||
userAgent: tString,
|
||||
});
|
||||
scheme.BrowserNewContextParams = tObject({
|
||||
noDefaultViewport: tOptional(tBoolean),
|
||||
viewport: tOptional(tObject({
|
||||
|
|
|
|||
|
|
@ -59,6 +59,10 @@ export class BrowserDispatcher extends Dispatcher<Browser, channels.BrowserChann
|
|||
await this._object.killForTests();
|
||||
}
|
||||
|
||||
async defaultUserAgentForTest(): Promise<channels.BrowserDefaultUserAgentForTestResult> {
|
||||
return { userAgent: this._object.userAgent() };
|
||||
}
|
||||
|
||||
async newBrowserCDPSession(): Promise<channels.BrowserNewBrowserCDPSessionResult> {
|
||||
if (!this._object.options.isChromium)
|
||||
throw new Error(`CDP session is only available in Chromium`);
|
||||
|
|
@ -116,6 +120,10 @@ export class ConnectedBrowserDispatcher extends Dispatcher<Browser, channels.Bro
|
|||
// Client should not send us Browser.killForTests.
|
||||
}
|
||||
|
||||
async defaultUserAgentForTest(): Promise<channels.BrowserDefaultUserAgentForTestResult> {
|
||||
throw new Error('Client should not send us Browser.defaultUserAgentForTest');
|
||||
}
|
||||
|
||||
async newBrowserCDPSession(): Promise<channels.BrowserNewBrowserCDPSessionResult> {
|
||||
if (!this._object.options.isChromium)
|
||||
throw new Error(`CDP session is only available in Chromium`);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ export class WKBrowser extends Browser {
|
|||
browser._browserSession.send('Playwright.enable'),
|
||||
];
|
||||
if (options.persistent) {
|
||||
options.persistent.userAgent ||= DEFAULT_USER_AGENT;
|
||||
browser._defaultContext = new WKBrowserContext(browser, undefined, options.persistent);
|
||||
promises.push((browser._defaultContext as WKBrowserContext)._initialize());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1083,6 +1083,7 @@ export interface BrowserChannel extends BrowserEventTarget, Channel {
|
|||
_type_Browser: boolean;
|
||||
close(params?: BrowserCloseParams, metadata?: CallMetadata): Promise<BrowserCloseResult>;
|
||||
killForTests(params?: BrowserKillForTestsParams, metadata?: CallMetadata): Promise<BrowserKillForTestsResult>;
|
||||
defaultUserAgentForTest(params?: BrowserDefaultUserAgentForTestParams, metadata?: CallMetadata): Promise<BrowserDefaultUserAgentForTestResult>;
|
||||
newContext(params: BrowserNewContextParams, metadata?: CallMetadata): Promise<BrowserNewContextResult>;
|
||||
newContextForReuse(params: BrowserNewContextForReuseParams, metadata?: CallMetadata): Promise<BrowserNewContextForReuseResult>;
|
||||
newBrowserCDPSession(params?: BrowserNewBrowserCDPSessionParams, metadata?: CallMetadata): Promise<BrowserNewBrowserCDPSessionResult>;
|
||||
|
|
@ -1096,6 +1097,11 @@ export type BrowserCloseResult = void;
|
|||
export type BrowserKillForTestsParams = {};
|
||||
export type BrowserKillForTestsOptions = {};
|
||||
export type BrowserKillForTestsResult = void;
|
||||
export type BrowserDefaultUserAgentForTestParams = {};
|
||||
export type BrowserDefaultUserAgentForTestOptions = {};
|
||||
export type BrowserDefaultUserAgentForTestResult = {
|
||||
userAgent: string,
|
||||
};
|
||||
export type BrowserNewContextParams = {
|
||||
noDefaultViewport?: boolean,
|
||||
viewport?: {
|
||||
|
|
|
|||
|
|
@ -897,6 +897,10 @@ Browser:
|
|||
|
||||
killForTests:
|
||||
|
||||
defaultUserAgentForTest:
|
||||
returns:
|
||||
userAgent: string
|
||||
|
||||
newContext:
|
||||
parameters:
|
||||
$mixin: ContextOptions
|
||||
|
|
|
|||
|
|
@ -288,3 +288,8 @@ it('should emulate media in cross-process iframe', async ({ browser, server }) =
|
|||
expect(await frame.evaluate(() => matchMedia('(prefers-color-scheme: dark)').matches)).toBe(true);
|
||||
await page.close();
|
||||
});
|
||||
|
||||
it('default user agent', async ({ launchPersistent, browser, page }) => {
|
||||
const { userAgent } = await (browser as any)._channel.defaultUserAgentForTest();
|
||||
expect(await page.evaluate(() => navigator.userAgent)).toBe(userAgent);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -233,3 +233,9 @@ it('should support har option', async ({ launchPersistent, asset }) => {
|
|||
await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(255, 0, 0)');
|
||||
});
|
||||
|
||||
it('user agent is up to date', async ({ launchPersistent, browser }) => {
|
||||
const { userAgent } = await (browser as any)._channel.defaultUserAgentForTest();
|
||||
const { context, page } = await launchPersistent();
|
||||
expect(await page.evaluate(() => navigator.userAgent)).toBe(userAgent);
|
||||
await context.close();
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue