Bug 896382 - Cache the override (or that there's no override) for each host to avoid doing the same iterative string matching for every HTTP request. r=hurley

This commit is contained in:
Dão Gottwald 2013-07-24 09:38:45 +02:00
Родитель 945db097f4
Коммит ad54b2d53b
1 изменённых файлов: 18 добавлений и 2 удалений

Просмотреть файл

@ -15,9 +15,11 @@ const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides";
const DEFAULT_UA = Cc["@mozilla.org/network/protocol;1?name=http"]
.getService(Ci.nsIHttpProtocolHandler)
.userAgent;
const MAX_OVERRIDE_FOR_HOST_CACHE_SIZE = 250;
var gPrefBranch;
var gOverrides;
var gOverrideForHostCache = new Map;
var gInitialized = false;
var gOverrideFunctions = [
function (aHttpChannel) UserAgentOverrides.getOverrideForURI(aHttpChannel.URI)
@ -54,14 +56,27 @@ this.UserAgentOverrides = {
return null;
let host = aURI.asciiHost;
let override = gOverrideForHostCache.get(host);
if (override !== undefined)
return override;
override = null;
for (let domain in gOverrides) {
if (host == domain ||
host.endsWith("." + domain)) {
return gOverrides[domain];
override = gOverrides[domain];
break;
}
}
return null;
if (gOverrideForHostCache.size >= MAX_OVERRIDE_FOR_HOST_CACHE_SIZE) {
gOverrideForHostCache.clear();
}
gOverrideForHostCache.set(host, override);
return override;
},
uninit: function uao_uninit() {
@ -79,6 +94,7 @@ this.UserAgentOverrides = {
function buildOverrides() {
gOverrides = {};
gOverrideForHostCache.clear();
if (!Services.prefs.getBoolPref(PREF_OVERRIDES_ENABLED))
return;