browser(firefox): move user agent emulation to browser side (#4016)

References #3995
This commit is contained in:
Andrey Lushnikov 2020-09-30 08:02:22 -07:00 committed by GitHub
parent ab2714ed29
commit 974358442d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 15 additions and 7 deletions

View file

@ -1,2 +1,2 @@
1176 1177
Changed: lushnikov@chromium.org Wed Sep 30 03:06:09 MDT 2020 Changed: lushnikov@chromium.org Wed Sep 30 03:11:29 MDT 2020

View file

@ -175,6 +175,7 @@ class TargetRegistry {
if (!browserContext) if (!browserContext)
throw new Error(`Internal error: cannot find context for userContextId=${userContextId}`); throw new Error(`Internal error: cannot find context for userContextId=${userContextId}`);
const target = new PageTarget(this, window, tab, browserContext, openerTarget); const target = new PageTarget(this, window, tab, browserContext, openerTarget);
target.updateUserAgent();
if (!hasExplicitSize) if (!hasExplicitSize)
target.updateViewportSize(); target.updateViewportSize();
}; };
@ -393,6 +394,10 @@ class PageTarget {
return this._browserContext; return this._browserContext;
} }
updateUserAgent() {
this._linkedBrowser.browsingContext.customUserAgent = this._browserContext.defaultUserAgent;
}
async updateViewportSize() { async updateViewportSize() {
// Viewport size is defined by three arguments: // Viewport size is defined by three arguments:
// 1. default size. Could be explicit if set as part of `window.open` call, e.g. // 1. default size. Could be explicit if set as part of `window.open` call, e.g.
@ -513,6 +518,7 @@ class BrowserContext {
this.ignoreHTTPSErrors = undefined; this.ignoreHTTPSErrors = undefined;
this.downloadOptions = undefined; this.downloadOptions = undefined;
this.defaultViewportSize = undefined; this.defaultViewportSize = undefined;
this.defaultUserAgent = null;
this.screencastOptions = undefined; this.screencastOptions = undefined;
this.scriptsToEvaluateOnNewDocument = []; this.scriptsToEvaluateOnNewDocument = [];
this.bindings = []; this.bindings = [];
@ -559,6 +565,12 @@ class BrowserContext {
} }
} }
async setDefaultUserAgent(userAgent) {
this.defaultUserAgent = userAgent;
for (const page of this.pages)
page.updateUserAgent();
}
async setDefaultViewport(viewport) { async setDefaultViewport(viewport) {
this.defaultViewportSize = viewport ? viewport.viewportSize : undefined; this.defaultViewportSize = viewport ? viewport.viewportSize : undefined;
const promises = Array.from(this.pages).map(page => page.updateViewportSize()); const promises = Array.from(this.pages).map(page => page.updateViewportSize());

View file

@ -59,10 +59,6 @@ const applySetting = {
Ci.nsIDocShell.ONLINE_OVERRIDE_ONLINE : Ci.nsIDocShell.ONLINE_OVERRIDE_OFFLINE; Ci.nsIDocShell.ONLINE_OVERRIDE_ONLINE : Ci.nsIDocShell.ONLINE_OVERRIDE_OFFLINE;
}, },
userAgent: (userAgent) => {
docShell.browsingContext.customUserAgent = userAgent;
},
bypassCSP: (bypassCSP) => { bypassCSP: (bypassCSP) => {
docShell.bypassCSPEnabled = bypassCSP; docShell.bypassCSPEnabled = bypassCSP;
}, },

View file

@ -197,7 +197,7 @@ class BrowserHandler {
} }
async setUserAgentOverride({browserContextId, userAgent}) { async setUserAgentOverride({browserContextId, userAgent}) {
await this._targetRegistry.browserContextForId(browserContextId).applySetting('userAgent', nullToUndefined(userAgent)); await this._targetRegistry.browserContextForId(browserContextId).setDefaultUserAgent(userAgent);
} }
async setBypassCSP({browserContextId, bypassCSP}) { async setBypassCSP({browserContextId, bypassCSP}) {