зеркало из https://github.com/mozilla/gecko-dev.git
Bug 897221 - Initialize UserAgentUpdates.jsm inside UserAgentOverrides; r=fabrice
This commit is contained in:
Родитель
ed37b483db
Коммит
80665addf5
|
@ -10,6 +10,7 @@ const Ci = Components.interfaces;
|
||||||
const Cc = Components.classes;
|
const Cc = Components.classes;
|
||||||
|
|
||||||
Components.utils.import("resource://gre/modules/Services.jsm");
|
Components.utils.import("resource://gre/modules/Services.jsm");
|
||||||
|
Components.utils.import("resource://gre/modules/UserAgentUpdates.jsm");
|
||||||
|
|
||||||
const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides";
|
const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides";
|
||||||
const DEFAULT_UA = Cc["@mozilla.org/network/protocol;1?name=http"]
|
const DEFAULT_UA = Cc["@mozilla.org/network/protocol;1?name=http"]
|
||||||
|
@ -19,6 +20,7 @@ const MAX_OVERRIDE_FOR_HOST_CACHE_SIZE = 250;
|
||||||
|
|
||||||
var gPrefBranch;
|
var gPrefBranch;
|
||||||
var gOverrides = new Map;
|
var gOverrides = new Map;
|
||||||
|
var gUpdatedOverrides;
|
||||||
var gOverrideForHostCache = new Map;
|
var gOverrideForHostCache = new Map;
|
||||||
var gInitialized = false;
|
var gInitialized = false;
|
||||||
var gOverrideFunctions = [
|
var gOverrideFunctions = [
|
||||||
|
@ -41,6 +43,14 @@ this.UserAgentOverrides = {
|
||||||
// The http-on-modify-request notification is disallowed in content processes.
|
// The http-on-modify-request notification is disallowed in content processes.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UserAgentUpdates.init(function(overrides) {
|
||||||
|
gOverrideForHostCache.clear();
|
||||||
|
if (overrides) {
|
||||||
|
overrides.get = function(key) this[key];
|
||||||
|
}
|
||||||
|
gUpdatedOverrides = overrides;
|
||||||
|
});
|
||||||
|
|
||||||
buildOverrides();
|
buildOverrides();
|
||||||
gInitialized = true;
|
gInitialized = true;
|
||||||
},
|
},
|
||||||
|
@ -51,7 +61,7 @@ this.UserAgentOverrides = {
|
||||||
|
|
||||||
getOverrideForURI: function uao_getOverrideForURI(aURI) {
|
getOverrideForURI: function uao_getOverrideForURI(aURI) {
|
||||||
if (!gInitialized ||
|
if (!gInitialized ||
|
||||||
!gOverrides.size ||
|
(!gOverrides.size && !gUpdatedOverrides) ||
|
||||||
!(aURI instanceof Ci.nsIStandardURL))
|
!(aURI instanceof Ci.nsIStandardURL))
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
|
@ -61,16 +71,24 @@ this.UserAgentOverrides = {
|
||||||
if (override !== undefined)
|
if (override !== undefined)
|
||||||
return override;
|
return override;
|
||||||
|
|
||||||
override = null;
|
function findOverride(overrides) {
|
||||||
|
let searchHost = host;
|
||||||
|
let userAgent = overrides.get(searchHost);
|
||||||
|
|
||||||
for (let [domain, userAgent] of gOverrides) {
|
while (!userAgent) {
|
||||||
if (host == domain ||
|
let dot = searchHost.indexOf('.');
|
||||||
host.endsWith("." + domain)) {
|
if (dot === -1) {
|
||||||
override = userAgent;
|
return null;
|
||||||
break;
|
}
|
||||||
|
searchHost = searchHost.slice(dot + 1);
|
||||||
|
userAgent = overrides.get(searchHost);
|
||||||
}
|
}
|
||||||
|
return userAgent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override = (gOverrides.size && findOverride(gOverrides))
|
||||||
|
|| (gUpdatedOverrides && findOverride(gUpdatedOverrides));
|
||||||
|
|
||||||
if (gOverrideForHostCache.size >= MAX_OVERRIDE_FOR_HOST_CACHE_SIZE) {
|
if (gOverrideForHostCache.size >= MAX_OVERRIDE_FOR_HOST_CACHE_SIZE) {
|
||||||
gOverrideForHostCache.clear();
|
gOverrideForHostCache.clear();
|
||||||
}
|
}
|
||||||
|
|
|
@ -181,6 +181,45 @@ function testInactive(callback) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testPriority(callback) {
|
||||||
|
// foo.bar.com override should have priority over bar.com override
|
||||||
|
var tests = [
|
||||||
|
['example.org', 'test1.example.org', 'sub1.test1.example.org'],
|
||||||
|
['example.org', 'test1.example.org', 'sub2.test1.example.org'],
|
||||||
|
['example.org', 'test2.example.org', 'sub1.test2.example.org'],
|
||||||
|
['example.org', 'test2.example.org', 'sub2.test2.example.org'],
|
||||||
|
];
|
||||||
|
(function nextTest() {
|
||||||
|
var [level0, level1, level2] = tests.shift();
|
||||||
|
var host = 'http://' + level2;
|
||||||
|
SpecialPowers.pushPrefEnv({
|
||||||
|
set: [
|
||||||
|
[PREF_OVERRIDES_ENABLED, true],
|
||||||
|
[PREF_OVERRIDES_BRANCH + level1, UA_WHOLE_OVERRIDE]
|
||||||
|
]
|
||||||
|
}, function () {
|
||||||
|
// should use first override at this point
|
||||||
|
is(getUA(host),
|
||||||
|
UA_WHOLE_EXPECTED, 'UA not overridden');
|
||||||
|
// add a second override that should be used
|
||||||
|
testUA({
|
||||||
|
domain: level2,
|
||||||
|
override: UA_PARTIAL_OVERRIDE,
|
||||||
|
test_hosts: [host],
|
||||||
|
expected: UA_PARTIAL_EXPECTED
|
||||||
|
}, function () {
|
||||||
|
// add a third override that should not be used
|
||||||
|
testUA({
|
||||||
|
domain: level0,
|
||||||
|
override: UA_PARTIAL_OVERRIDE,
|
||||||
|
test_hosts: [host],
|
||||||
|
expected: UA_WHOLE_EXPECTED
|
||||||
|
}, tests.length ? nextTest : callback);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})();
|
||||||
|
}
|
||||||
|
|
||||||
function testOverrides(callback) {
|
function testOverrides(callback) {
|
||||||
SpecialPowers.pushPrefEnv({
|
SpecialPowers.pushPrefEnv({
|
||||||
set: [[PREF_OVERRIDES_ENABLED, true]]
|
set: [[PREF_OVERRIDES_ENABLED, true]]
|
||||||
|
@ -195,7 +234,9 @@ SpecialPowers.wrap(UserAgentOverrides).init();
|
||||||
SimpleTest.waitForExplicitFinish();
|
SimpleTest.waitForExplicitFinish();
|
||||||
|
|
||||||
testOverrides(function ()
|
testOverrides(function ()
|
||||||
testInactive(SimpleTest.finish)
|
testInactive(function ()
|
||||||
|
testPriority(SimpleTest.finish)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
Загрузка…
Ссылка в новой задаче