From 974358442df221c5039cb878c0c5aa3e69282938 Mon Sep 17 00:00:00 2001 From: Andrey Lushnikov Date: Wed, 30 Sep 2020 08:02:22 -0700 Subject: [PATCH] browser(firefox): move user agent emulation to browser side (#4016) References #3995 --- browser_patches/firefox/BUILD_NUMBER | 4 ++-- browser_patches/firefox/juggler/TargetRegistry.js | 12 ++++++++++++ browser_patches/firefox/juggler/content/main.js | 4 ---- .../firefox/juggler/protocol/BrowserHandler.js | 2 +- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/browser_patches/firefox/BUILD_NUMBER b/browser_patches/firefox/BUILD_NUMBER index 5ce36b6d81..1630fd5c04 100644 --- a/browser_patches/firefox/BUILD_NUMBER +++ b/browser_patches/firefox/BUILD_NUMBER @@ -1,2 +1,2 @@ -1176 -Changed: lushnikov@chromium.org Wed Sep 30 03:06:09 MDT 2020 +1177 +Changed: lushnikov@chromium.org Wed Sep 30 03:11:29 MDT 2020 diff --git a/browser_patches/firefox/juggler/TargetRegistry.js b/browser_patches/firefox/juggler/TargetRegistry.js index 120db8331a..2f6a80aca0 100644 --- a/browser_patches/firefox/juggler/TargetRegistry.js +++ b/browser_patches/firefox/juggler/TargetRegistry.js @@ -175,6 +175,7 @@ class TargetRegistry { if (!browserContext) throw new Error(`Internal error: cannot find context for userContextId=${userContextId}`); const target = new PageTarget(this, window, tab, browserContext, openerTarget); + target.updateUserAgent(); if (!hasExplicitSize) target.updateViewportSize(); }; @@ -393,6 +394,10 @@ class PageTarget { return this._browserContext; } + updateUserAgent() { + this._linkedBrowser.browsingContext.customUserAgent = this._browserContext.defaultUserAgent; + } + async updateViewportSize() { // Viewport size is defined by three arguments: // 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.downloadOptions = undefined; this.defaultViewportSize = undefined; + this.defaultUserAgent = null; this.screencastOptions = undefined; this.scriptsToEvaluateOnNewDocument = []; 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) { this.defaultViewportSize = viewport ? viewport.viewportSize : undefined; const promises = Array.from(this.pages).map(page => page.updateViewportSize()); diff --git a/browser_patches/firefox/juggler/content/main.js b/browser_patches/firefox/juggler/content/main.js index 54437bfa7a..b1f1231403 100644 --- a/browser_patches/firefox/juggler/content/main.js +++ b/browser_patches/firefox/juggler/content/main.js @@ -59,10 +59,6 @@ const applySetting = { Ci.nsIDocShell.ONLINE_OVERRIDE_ONLINE : Ci.nsIDocShell.ONLINE_OVERRIDE_OFFLINE; }, - userAgent: (userAgent) => { - docShell.browsingContext.customUserAgent = userAgent; - }, - bypassCSP: (bypassCSP) => { docShell.bypassCSPEnabled = bypassCSP; }, diff --git a/browser_patches/firefox/juggler/protocol/BrowserHandler.js b/browser_patches/firefox/juggler/protocol/BrowserHandler.js index 9bed75397d..3b8f96514d 100644 --- a/browser_patches/firefox/juggler/protocol/BrowserHandler.js +++ b/browser_patches/firefox/juggler/protocol/BrowserHandler.js @@ -197,7 +197,7 @@ class BrowserHandler { } async setUserAgentOverride({browserContextId, userAgent}) { - await this._targetRegistry.browserContextForId(browserContextId).applySetting('userAgent', nullToUndefined(userAgent)); + await this._targetRegistry.browserContextForId(browserContextId).setDefaultUserAgent(userAgent); } async setBypassCSP({browserContextId, bypassCSP}) {