diff --git a/mobile/android/app/mobile.js b/mobile/android/app/mobile.js index 1b05ce8563a9..0f394da7dc2a 100644 --- a/mobile/android/app/mobile.js +++ b/mobile/android/app/mobile.js @@ -771,3 +771,5 @@ pref("security.csp.speccompliant", true); // Enable hardware-accelerated Skia canvas pref("gfx.canvas.azure.backends", "skia"); pref("gfx.canvas.azure.accelerated", true); + +pref("general.useragent.override.youtube.com", "Android; Tablet;#Android; Mobile;"); diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js index 957c6c3a3709..6a7881d5d12a 100644 --- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -334,7 +334,8 @@ var BrowserApp = { WebappsUI.init(); RemoteDebugger.init(); Reader.init(); - UserAgent.init(); + UserAgentOverrides.init(); + DesktopUserAgent.init(); ExternalApps.init(); Distribution.init(); Tabs.init(); @@ -656,7 +657,8 @@ var BrowserApp = { WebappsUI.uninit(); RemoteDebugger.uninit(); Reader.uninit(); - UserAgent.uninit(); + UserAgentOverrides.uninit(); + DesktopUserAgent.uninit(); ExternalApps.uninit(); Distribution.uninit(); Tabs.uninit(); @@ -2354,13 +2356,11 @@ var LightWeightThemeWebInstaller = { } }; -var UserAgent = { +var DesktopUserAgent = { DESKTOP_UA: null, - YOUTUBE_DOMAIN: /(^|\.)youtube\.com$/, init: function ua_init() { Services.obs.addObserver(this, "DesktopMode:Change", false); - UserAgentOverrides.init(); UserAgentOverrides.addComplexOverride(this.onRequest.bind(this)); // See https://developer.mozilla.org/en/Gecko_user_agent_string_reference @@ -2372,42 +2372,31 @@ var UserAgent = { uninit: function ua_uninit() { Services.obs.removeObserver(this, "DesktopMode:Change"); - UserAgentOverrides.uninit(); }, onRequest: function(channel, defaultUA) { let channelWindow = this._getWindowForRequest(channel); let tab = BrowserApp.getTabForWindow(channelWindow); if (tab == null) - return; + return null; - let ua = this.getUserAgentForUriAndTab(channel.URI, tab, defaultUA); - if (ua) - channel.setRequestHeader("User-Agent", ua, false); + return this.getUserAgentForTab(tab); }, - getUserAgentForWindow: function ua_getUserAgentForWindow(aWindow, defaultUA) { + getUserAgentForWindow: function ua_getUserAgentForWindow(aWindow) { let tab = BrowserApp.getTabForWindow(aWindow.top); if (tab) - return this.getUserAgentForUriAndTab(tab.browser.currentURI, tab, defaultUA); - return defaultUA; + return this.getUserAgentForTab(tab); + + return null; }, - getUserAgentForUriAndTab: function ua_getUserAgentForUriAndTab(aUri, aTab, defaultUA) { + getUserAgentForTab: function ua_getUserAgentForTab(aTab) { // Send desktop UA if "Request Desktop Site" is enabled. if (aTab.desktopMode) return this.DESKTOP_UA; - // Not all schemes have a host member. - if (aUri.schemeIs("http") || aUri.schemeIs("https")) { - if (this.YOUTUBE_DOMAIN.test(aUri.host)) { - // Send the phone UA to Youtube if this is a tablet. - if (!defaultUA.contains("Android; Mobile;")) - return defaultUA.replace("Android;", "Android; Mobile;"); - } - } - - return defaultUA; + return null; }, _getRequestLoadContext: function ua_getRequestLoadContext(aRequest) { diff --git a/mobile/android/components/SiteSpecificUserAgent.js b/mobile/android/components/SiteSpecificUserAgent.js index a6ed70881351..f95d7ab163fe 100644 --- a/mobile/android/components/SiteSpecificUserAgent.js +++ b/mobile/android/components/SiteSpecificUserAgent.js @@ -18,11 +18,12 @@ function SiteSpecificUserAgent() {} SiteSpecificUserAgent.prototype = { getUserAgentForURIAndWindow: function ssua_getUserAgentForURIAndWindow(aURI, aWindow) { - let win = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator).getMostRecentWindow("navigator:browser"); - if (win && win.UserAgent) { - return win.UserAgent.getUserAgentForWindow(aWindow, DEFAULT_UA); + let UA; + let win = Services.wm.getMostRecentWindow("navigator:browser"); + if (win && win.DesktopUserAgent) { + UA = win.DesktopUserAgent.getUserAgentForWindow(aWindow); } - return DEFAULT_UA; + return UA || UserAgentOverrides.getOverrideForURI(aURI) || DEFAULT_UA; }, classID: Components.ID("{d5234c9d-0ee2-4b3c-9da3-18be9e5cf7e6}"), diff --git a/netwerk/protocol/http/UserAgentOverrides.jsm b/netwerk/protocol/http/UserAgentOverrides.jsm index 3ce9a2f5733a..11f8655f2aad 100644 --- a/netwerk/protocol/http/UserAgentOverrides.jsm +++ b/netwerk/protocol/http/UserAgentOverrides.jsm @@ -116,7 +116,9 @@ function buildOverrides() { builtUAs.set(override, userAgent); } - gOverrides.set(domain, userAgent); + if (userAgent != DEFAULT_UA) { + gOverrides.set(domain, userAgent); + } } }