mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-19 16:25:38 +00:00
Bug 1511281 - Update GeckoView user agent override to use docShell.customUserAgent r=snorp
Differential Revision: https://phabricator.services.mozilla.com/D13593 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
acfba8e927
commit
5d8ff39a09
@ -10,9 +10,31 @@ XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
GeckoViewUtils: "resource://gre/modules/GeckoViewUtils.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(
|
||||
this, "MOBILE_USER_AGENT",
|
||||
function() {
|
||||
return Cc["@mozilla.org/network/protocol;1?name=http"]
|
||||
.getService(Ci.nsIHttpProtocolHandler).userAgent;
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(
|
||||
this, "DESKTOP_USER_AGENT",
|
||||
function() {
|
||||
return MOBILE_USER_AGENT
|
||||
.replace(/Android \d.+?; [a-zA-Z]+/, "X11; Linux x86_64")
|
||||
.replace(/Gecko\/[0-9\.]+/, "Gecko/20100101");
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(
|
||||
this, "VR_USER_AGENT",
|
||||
function() {
|
||||
return MOBILE_USER_AGENT.replace(/Mobile/, "Mobile VR");
|
||||
});
|
||||
|
||||
// This needs to match GeckoSessionSettings.java
|
||||
const USER_AGENT_MODE_MOBILE = 0;
|
||||
const USER_AGENT_MODE_DESKTOP = 1;
|
||||
const USER_AGENT_MODE_VR = 2;
|
||||
|
||||
// Handles GeckoView content settings including:
|
||||
// * tracking protection
|
||||
@ -42,6 +64,19 @@ class GeckoViewSettingsChild extends GeckoViewChildModule {
|
||||
docShell.useTrackingProtection = aUse;
|
||||
}
|
||||
|
||||
get userAgent() {
|
||||
if (this.userAgentOverride !== null) {
|
||||
return this.userAgentOverride;
|
||||
}
|
||||
if (this.userAgentMode === USER_AGENT_MODE_DESKTOP) {
|
||||
return DESKTOP_USER_AGENT;
|
||||
}
|
||||
if (this.userAgentMode === USER_AGENT_MODE_VR) {
|
||||
return VR_USER_AGENT;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
get userAgentMode() {
|
||||
return this._userAgentMode;
|
||||
}
|
||||
@ -51,6 +86,12 @@ class GeckoViewSettingsChild extends GeckoViewChildModule {
|
||||
return;
|
||||
}
|
||||
this._userAgentMode = aMode;
|
||||
const docShell = content && GeckoViewUtils.getRootDocShell(content);
|
||||
if (docShell) {
|
||||
docShell.customUserAgent = this.userAgent;
|
||||
} else {
|
||||
warn `Failed to set custom user agent. Doc shell not found`;
|
||||
}
|
||||
if (this._userAgentOverride !== null) {
|
||||
return;
|
||||
}
|
||||
@ -67,6 +108,12 @@ class GeckoViewSettingsChild extends GeckoViewChildModule {
|
||||
return;
|
||||
}
|
||||
this._userAgentOverride = aUserAgent;
|
||||
const docShell = content && GeckoViewUtils.getRootDocShell(content);
|
||||
if (docShell) {
|
||||
docShell.customUserAgent = this.userAgent;
|
||||
} else {
|
||||
warn `Failed to set custom user agent. Doc shell not found`;
|
||||
}
|
||||
const utils = content.windowUtils;
|
||||
if (aUserAgent === null) {
|
||||
utils.setDesktopModeViewport(this._userAgentMode === USER_AGENT_MODE_DESKTOP);
|
||||
|
@ -11,7 +11,6 @@ ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetters(this, {
|
||||
SafeBrowsing: "resource://gre/modules/SafeBrowsing.jsm",
|
||||
Services: "resource://gre/modules/Services.jsm",
|
||||
});
|
||||
|
||||
XPCOMUtils.defineLazyGetter(
|
||||
@ -80,22 +79,6 @@ class GeckoViewSettings extends GeckoViewModule {
|
||||
return this.browser.isRemoteBrowser;
|
||||
}
|
||||
|
||||
observe(aSubject, aTopic, aData) {
|
||||
debug `observer`;
|
||||
|
||||
let channel = aSubject.QueryInterface(Ci.nsIHttpChannel);
|
||||
|
||||
if (this.browser.outerWindowID !== channel.topLevelOuterContentWindowId) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.userAgentOverride !== null ||
|
||||
this.userAgentMode === USER_AGENT_MODE_DESKTOP ||
|
||||
this.userAgentMode === USER_AGENT_MODE_VR) {
|
||||
channel.setRequestHeader("User-Agent", this.userAgent, false);
|
||||
}
|
||||
}
|
||||
|
||||
get userAgent() {
|
||||
if (this.userAgentOverride !== null) {
|
||||
return this.userAgentOverride;
|
||||
@ -117,7 +100,6 @@ class GeckoViewSettings extends GeckoViewModule {
|
||||
if (this.userAgentMode === aMode) {
|
||||
return;
|
||||
}
|
||||
this.updateUserAgentObserver(this._userAgentOverride, aMode);
|
||||
this._userAgentMode = aMode;
|
||||
}
|
||||
|
||||
@ -126,25 +108,9 @@ class GeckoViewSettings extends GeckoViewModule {
|
||||
}
|
||||
|
||||
set userAgentOverride(aUserAgent) {
|
||||
this.updateUserAgentObserver(aUserAgent, this._userAgentMode);
|
||||
this._userAgentOverride = aUserAgent;
|
||||
}
|
||||
|
||||
updateUserAgentObserver(aUserAgent, aMode) {
|
||||
const wasAdded = this.userAgentOverride !== null || this.userAgentMode !== USER_AGENT_MODE_MOBILE;
|
||||
const shouldAdd = aUserAgent !== null || aMode !== USER_AGENT_MODE_MOBILE;
|
||||
|
||||
try {
|
||||
if (wasAdded && !shouldAdd) {
|
||||
Services.obs.removeObserver(this, "http-on-useragent-request");
|
||||
} else if (!wasAdded && shouldAdd) {
|
||||
Services.obs.addObserver(this, "http-on-useragent-request");
|
||||
}
|
||||
} catch (e) {
|
||||
warn `Caught exception while adding/removing "http-on-useragent-request" observer: ${e.message}`;
|
||||
}
|
||||
}
|
||||
|
||||
get displayMode() {
|
||||
return this.window.docShell.displayMode;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user