зеркало из 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;
|
||||
|
||||
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 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 gOverrides = new Map;
|
||||
var gUpdatedOverrides;
|
||||
var gOverrideForHostCache = new Map;
|
||||
var gInitialized = false;
|
||||
var gOverrideFunctions = [
|
||||
|
@ -41,6 +43,14 @@ this.UserAgentOverrides = {
|
|||
// 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();
|
||||
gInitialized = true;
|
||||
},
|
||||
|
@ -51,7 +61,7 @@ this.UserAgentOverrides = {
|
|||
|
||||
getOverrideForURI: function uao_getOverrideForURI(aURI) {
|
||||
if (!gInitialized ||
|
||||
!gOverrides.size ||
|
||||
(!gOverrides.size && !gUpdatedOverrides) ||
|
||||
!(aURI instanceof Ci.nsIStandardURL))
|
||||
return null;
|
||||
|
||||
|
@ -61,16 +71,24 @@ this.UserAgentOverrides = {
|
|||
if (override !== undefined)
|
||||
return override;
|
||||
|
||||
override = null;
|
||||
function findOverride(overrides) {
|
||||
let searchHost = host;
|
||||
let userAgent = overrides.get(searchHost);
|
||||
|
||||
for (let [domain, userAgent] of gOverrides) {
|
||||
if (host == domain ||
|
||||
host.endsWith("." + domain)) {
|
||||
override = userAgent;
|
||||
break;
|
||||
while (!userAgent) {
|
||||
let dot = searchHost.indexOf('.');
|
||||
if (dot === -1) {
|
||||
return null;
|
||||
}
|
||||
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) {
|
||||
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) {
|
||||
SpecialPowers.pushPrefEnv({
|
||||
set: [[PREF_OVERRIDES_ENABLED, true]]
|
||||
|
@ -195,7 +234,9 @@ SpecialPowers.wrap(UserAgentOverrides).init();
|
|||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
testOverrides(function ()
|
||||
testInactive(SimpleTest.finish)
|
||||
testInactive(function ()
|
||||
testPriority(SimpleTest.finish)
|
||||
)
|
||||
);
|
||||
|
||||
</script>
|
||||
|
|
Загрузка…
Ссылка в новой задаче