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",
|
"main": "index.js",
|
||||||
"playwright": {
|
"playwright": {
|
||||||
"chromium_revision": "737027",
|
"chromium_revision": "737027",
|
||||||
"firefox_revision": "1021",
|
"firefox_revision": "1025",
|
||||||
"webkit_revision": "1134"
|
"webkit_revision": "1134"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"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.targetCreated', this._onTargetCreated.bind(this)),
|
||||||
helper.addEventListener(this._connection, 'Target.targetDestroyed', this._onTargetDestroyed.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.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> {
|
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.
|
// TODO: move ignoreHTTPSErrors to browser context level.
|
||||||
if (options.ignoreHTTPSErrors)
|
if (options.ignoreHTTPSErrors)
|
||||||
await this._connection.send('Browser.setIgnoreHTTPSErrors', { enabled: true });
|
await this._connection.send('Browser.setIgnoreHTTPSErrors', { enabled: true });
|
||||||
@ -143,6 +146,13 @@ export class FFBrowser extends platform.EventEmitter implements Browser {
|
|||||||
target._url = url;
|
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() {
|
async close() {
|
||||||
await Promise.all(this.browserContexts().map(context => context.close()));
|
await Promise.all(this.browserContexts().map(context => context.close()));
|
||||||
helper.removeEventListeners(this._eventListeners);
|
helper.removeEventListeners(this._eventListeners);
|
||||||
|
@ -99,7 +99,7 @@ export class FFConnection extends platform.EventEmitter {
|
|||||||
const sessionId = object.params.sessionId;
|
const sessionId = object.params.sessionId;
|
||||||
const session = new FFSession(this, object.params.targetInfo.type, sessionId, message => this._rawSend({...message, sessionId}));
|
const session = new FFSession(this, object.params.targetInfo.type, sessionId, message => this._rawSend({...message, sessionId}));
|
||||||
this._sessions.set(sessionId, session);
|
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);
|
const session = this._sessions.get(object.params.sessionId);
|
||||||
if (session) {
|
if (session) {
|
||||||
session._onClosed();
|
session._onClosed();
|
||||||
|
@ -89,8 +89,6 @@ export class FFPage implements PageDelegate {
|
|||||||
promises.push(this._session.send('Page.setBypassCSP', { enabled: true }));
|
promises.push(this._session.send('Page.setBypassCSP', { enabled: true }));
|
||||||
if (options.javaScriptEnabled === false)
|
if (options.javaScriptEnabled === false)
|
||||||
promises.push(this._session.send('Page.setJavascriptEnabled', { enabled: 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);
|
await Promise.all(promises);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,19 @@ module.exports.describe = function({testRunner, expect, playwright, CHROMIUM, WE
|
|||||||
await context.close();
|
await context.close();
|
||||||
expect(browser.browserContexts().length).toBe(0);
|
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}) {
|
it('window.open should use parent tab context', async function({newContext, server}) {
|
||||||
const context = await newContext();
|
const context = await newContext();
|
||||||
const page = await context.newPage();
|
const page = await context.newPage();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user