Bug 858828 - Avoid missing URI host member when special-casing user agent string for Youtube domains. r=mfinkle a=akeybl
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -2087,17 +2087,17 @@ var LightWeightThemeWebInstaller = {
_getThemeFromNode: function (node) {
return this._manager.parseTheme(node.getAttribute("data-browsertheme"), node.baseURI);
}
};
var UserAgent = {
DESKTOP_UA: null,
- YOUTUBE_DOMAIN: /\.?youtube\.com$/,
+ 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
this.DESKTOP_UA = Cc["@mozilla.org/network/protocol;1?name=http"]
@@ -2125,20 +2125,23 @@ var UserAgent = {
getUserAgentForWindow: function ua_getUserAgentForWindow(aWindow, defaultUA) {
let tab = BrowserApp.getTabForWindow(aWindow.top);
if (tab)
return this.getUserAgentForUriAndTab(tab.browser.currentURI, tab, defaultUA);
return defaultUA;
},
getUserAgentForUriAndTab: function ua_getUserAgentForUriAndTab(aUri, aTab, defaultUA) {
- if (this.YOUTUBE_DOMAIN.test(aUri.host)) {
- // Send the phone UA to youtube if this is a tablet
- if (defaultUA.indexOf("Android; Mobile;") === -1)
- return defaultUA.replace("Android;", "Android; Mobile;");
+ // 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.indexOf("Android; Mobile;") === -1)
+ return defaultUA.replace("Android;", "Android; Mobile;");
+ }
}
// Send desktop UA if "Request Desktop Site" is enabled
if (aTab.desktopMode)
return this.DESKTOP_UA;
return defaultUA;
},