Bug 963592 - Perform replacements for updated UA overrides. r=fabrice

This commit is contained in:
Jim Chen 2014-01-28 09:04:39 -05:00
parent 6fe4682268
commit 3491e5208c
2 changed files with 33 additions and 11 deletions

View File

@ -32,6 +32,7 @@ var gInitialized = false;
var gOverrideFunctions = [
function (aHttpChannel) UserAgentOverrides.getOverrideForURI(aHttpChannel.URI)
];
var gBuiltUAs = new Map;
this.UserAgentOverrides = {
init: function uao_init() {
@ -53,6 +54,9 @@ this.UserAgentOverrides = {
UserAgentUpdates.init(function(overrides) {
gOverrideForHostCache.clear();
if (overrides) {
for (let domain in overrides) {
overrides[domain] = getUserAgentFromOverride(overrides[domain]);
}
overrides.get = function(key) this[key];
}
gUpdatedOverrides = overrides;
@ -129,6 +133,22 @@ this.UserAgentOverrides = {
}
};
function getUserAgentFromOverride(override)
{
let userAgent = gBuiltUAs.get(override);
if (userAgent !== undefined) {
return userAgent;
}
let [search, replace] = override.split("#", 2);
if (search && replace) {
userAgent = DEFAULT_UA.replace(new RegExp(search, "g"), replace);
} else {
userAgent = override;
}
gBuiltUAs.set(override, userAgent);
return userAgent;
}
function buildOverrides() {
gOverrides.clear();
gOverrideForHostCache.clear();
@ -141,17 +161,7 @@ function buildOverrides() {
for (let domain of domains) {
let override = gPrefBranch.getCharPref(domain);
let userAgent = builtUAs.get(override);
if (userAgent === undefined) {
let [search, replace] = override.split("#", 2);
if (search && replace) {
userAgent = DEFAULT_UA.replace(new RegExp(search, "g"), replace);
} else {
userAgent = override;
}
builtUAs.set(override, userAgent);
}
let userAgent = getUserAgentFromOverride(override);
if (userAgent != DEFAULT_UA) {
gOverrides.set(domain, userAgent);

View File

@ -30,6 +30,12 @@ const DEFAULT_UA = navigator.userAgent;
const UA_OVERRIDE = "DummyUserAgent";
const UA_ALT_OVERRIDE = "AltUserAgent";
const UA_PARTIAL_FROM = "\\wozilla"; // /\wozilla
const UA_PARTIAL_SEP = "#";
const UA_PARTIAL_TO = UA_OVERRIDE;
const UA_PARTIAL_OVERRIDE = UA_PARTIAL_FROM + UA_PARTIAL_SEP + UA_PARTIAL_TO;
const UA_PARTIAL_EXPECTED = DEFAULT_UA.replace(new RegExp(UA_PARTIAL_FROM, 'g'), UA_PARTIAL_TO);
function getUA(host) {
var url = location.pathname;
url = host + url.slice(0, url.lastIndexOf('/')) + '/user_agent.sjs';
@ -78,6 +84,12 @@ const OVERRIDES = [
expected: SpecialPowers.Services.appinfo.OS,
host: 'http://sub1.test2.example.org'
},
{
domain: 'sub2.test2.example.org',
override: UA_PARTIAL_OVERRIDE,
expected: UA_PARTIAL_EXPECTED,
host: 'http://sub2.test2.example.org'
},
];
function getServerURL() {