mirror of
https://github.com/microsoft/playwright.git
synced 2025-06-26 21:40:17 +00:00
feat(firefox): ensure that new pages get browser context userAgent option (#872)
This commit is contained in:
parent
bc912596b8
commit
c33a12d8f0
@ -9,7 +9,7 @@
|
||||
"main": "index.js",
|
||||
"playwright": {
|
||||
"chromium_revision": "737027",
|
||||
"firefox_revision": "1021",
|
||||
"firefox_revision": "1025",
|
||||
"webkit_revision": "1134"
|
||||
},
|
||||
"scripts": {
|
||||
|
@ -56,6 +56,7 @@ export class FFBrowser extends platform.EventEmitter implements Browser {
|
||||
helper.addEventListener(this._connection, 'Target.targetCreated', this._onTargetCreated.bind(this)),
|
||||
helper.addEventListener(this._connection, 'Target.targetDestroyed', this._onTargetDestroyed.bind(this)),
|
||||
helper.addEventListener(this._connection, 'Target.targetInfoChanged', this._onTargetInfoChanged.bind(this)),
|
||||
helper.addEventListener(this._connection, 'Target.attachedToTarget', this._onAttachedToTarget.bind(this)),
|
||||
];
|
||||
}
|
||||
|
||||
@ -64,7 +65,9 @@ export class FFBrowser extends platform.EventEmitter implements Browser {
|
||||
}
|
||||
|
||||
async newContext(options: BrowserContextOptions = {}): Promise<BrowserContext> {
|
||||
const {browserContextId} = await this._connection.send('Target.createBrowserContext');
|
||||
const {browserContextId} = await this._connection.send('Target.createBrowserContext', {
|
||||
userAgent: options.userAgent
|
||||
});
|
||||
// TODO: move ignoreHTTPSErrors to browser context level.
|
||||
if (options.ignoreHTTPSErrors)
|
||||
await this._connection.send('Browser.setIgnoreHTTPSErrors', { enabled: true });
|
||||
@ -143,6 +146,13 @@ export class FFBrowser extends platform.EventEmitter implements Browser {
|
||||
target._url = url;
|
||||
}
|
||||
|
||||
_onAttachedToTarget(payload: Protocol.Target.attachedToTargetPayload) {
|
||||
const {targetId, type} = payload.targetInfo;
|
||||
const target = this._targets.get(targetId)!;
|
||||
if (type === 'page')
|
||||
target.page();
|
||||
}
|
||||
|
||||
async close() {
|
||||
await Promise.all(this.browserContexts().map(context => context.close()));
|
||||
helper.removeEventListeners(this._eventListeners);
|
||||
|
@ -99,7 +99,7 @@ export class FFConnection extends platform.EventEmitter {
|
||||
const sessionId = object.params.sessionId;
|
||||
const session = new FFSession(this, object.params.targetInfo.type, sessionId, message => this._rawSend({...message, sessionId}));
|
||||
this._sessions.set(sessionId, session);
|
||||
} else if (object.method === 'Browser.detachedFromTarget') {
|
||||
} else if (object.method === 'Target.detachedFromTarget') {
|
||||
const session = this._sessions.get(object.params.sessionId);
|
||||
if (session) {
|
||||
session._onClosed();
|
||||
|
@ -89,8 +89,6 @@ export class FFPage implements PageDelegate {
|
||||
promises.push(this._session.send('Page.setBypassCSP', { enabled: true }));
|
||||
if (options.javaScriptEnabled === false)
|
||||
promises.push(this._session.send('Page.setJavascriptEnabled', { enabled: false }));
|
||||
if (options.userAgent)
|
||||
promises.push(this._session.send('Page.setUserAgent', { userAgent: options.userAgent }));
|
||||
await Promise.all(promises);
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,19 @@ module.exports.describe = function({testRunner, expect, playwright, CHROMIUM, WE
|
||||
await context.close();
|
||||
expect(browser.browserContexts().length).toBe(0);
|
||||
});
|
||||
it.skip(CHROMIUM)('popup should inherit user agent', async function({newContext, server}) {
|
||||
const context = await newContext({
|
||||
userAgent: 'hey'
|
||||
});
|
||||
const page = await context.newPage();
|
||||
await page.goto(server.EMPTY_PAGE);
|
||||
const evaluatePromise = page.evaluate(url => window.open(url), server.PREFIX + '/dummy.html');
|
||||
const popupPromise = page.waitForEvent('popup');
|
||||
const request = await server.waitForRequest('/dummy.html');
|
||||
await evaluatePromise;
|
||||
await popupPromise;
|
||||
expect(request.headers['user-agent']).toBe('hey');
|
||||
});
|
||||
it('window.open should use parent tab context', async function({newContext, server}) {
|
||||
const context = await newContext();
|
||||
const page = await context.newPage();
|
||||
|
Loading…
x
Reference in New Issue
Block a user