|
|
@ -289,8 +289,8 @@ URI.hostnameFromURI = function(uri) {
|
|
|
|
|
|
|
|
|
|
|
|
URI.domainFromHostname = function(hostname) {
|
|
|
|
URI.domainFromHostname = function(hostname) {
|
|
|
|
// Try to skip looking up the PSL database
|
|
|
|
// Try to skip looking up the PSL database
|
|
|
|
if ( domainCache.hasOwnProperty(hostname) ) {
|
|
|
|
|
|
|
|
var entry = domainCache[hostname];
|
|
|
|
var entry = domainCache[hostname];
|
|
|
|
|
|
|
|
if ( entry !== undefined ) {
|
|
|
|
entry.tstamp = Date.now();
|
|
|
|
entry.tstamp = Date.now();
|
|
|
|
return entry.domain;
|
|
|
|
return entry.domain;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -316,6 +316,13 @@ var psl = publicSuffixList;
|
|
|
|
// specific set of hostnames within a narrow time span -- in other words, I
|
|
|
|
// specific set of hostnames within a narrow time span -- in other words, I
|
|
|
|
// believe probability of cache hit are high in uBlock.
|
|
|
|
// believe probability of cache hit are high in uBlock.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var domainCache = Object.create(null);
|
|
|
|
|
|
|
|
var domainCacheCount = 0;
|
|
|
|
|
|
|
|
var domainCacheCountLowWaterMark = 75;
|
|
|
|
|
|
|
|
var domainCacheCountHighWaterMark = 100;
|
|
|
|
|
|
|
|
var domainCacheEntryJunkyard = [];
|
|
|
|
|
|
|
|
var domainCacheEntryJunkyardMax = domainCacheCountHighWaterMark - domainCacheCountLowWaterMark;
|
|
|
|
|
|
|
|
|
|
|
|
var DomainCacheEntry = function(domain) {
|
|
|
|
var DomainCacheEntry = function(domain) {
|
|
|
|
this.init(domain);
|
|
|
|
this.init(domain);
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -328,7 +335,7 @@ DomainCacheEntry.prototype.init = function(domain) {
|
|
|
|
|
|
|
|
|
|
|
|
DomainCacheEntry.prototype.dispose = function() {
|
|
|
|
DomainCacheEntry.prototype.dispose = function() {
|
|
|
|
this.domain = '';
|
|
|
|
this.domain = '';
|
|
|
|
if ( domainCacheEntryJunkyard.length < 25 ) {
|
|
|
|
if ( domainCacheEntryJunkyard.length < domainCacheEntryJunkyardMax ) {
|
|
|
|
domainCacheEntryJunkyard.push(this);
|
|
|
|
domainCacheEntryJunkyard.push(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -341,11 +348,10 @@ var domainCacheEntryFactory = function(domain) {
|
|
|
|
return new DomainCacheEntry(domain);
|
|
|
|
return new DomainCacheEntry(domain);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var domainCacheEntryJunkyard = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var domainCacheAdd = function(hostname, domain) {
|
|
|
|
var domainCacheAdd = function(hostname, domain) {
|
|
|
|
if ( domainCache.hasOwnProperty(hostname) ) {
|
|
|
|
var entry = domainCache[hostname];
|
|
|
|
domainCache[hostname].tstamp = Date.now();
|
|
|
|
if ( entry !== undefined ) {
|
|
|
|
|
|
|
|
entry.tstamp = Date.now();
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
domainCache[hostname] = domainCacheEntryFactory(domain);
|
|
|
|
domainCache[hostname] = domainCacheEntryFactory(domain);
|
|
|
|
domainCacheCount += 1;
|
|
|
|
domainCacheCount += 1;
|
|
|
@ -357,7 +363,7 @@ var domainCacheAdd = function(hostname, domain) {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var domainCacheEntrySort = function(a, b) {
|
|
|
|
var domainCacheEntrySort = function(a, b) {
|
|
|
|
return b.tstamp - a.tstamp;
|
|
|
|
return domainCache[b].tstamp - domainCache[a].tstamp;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var domainCachePrune = function() {
|
|
|
|
var domainCachePrune = function() {
|
|
|
@ -375,15 +381,10 @@ var domainCachePrune = function() {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var domainCacheReset = function() {
|
|
|
|
var domainCacheReset = function() {
|
|
|
|
domainCache = {};
|
|
|
|
domainCache = Object.create(null);
|
|
|
|
domainCacheCount = 0;
|
|
|
|
domainCacheCount = 0;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
var domainCache = {};
|
|
|
|
|
|
|
|
var domainCacheCount = 0;
|
|
|
|
|
|
|
|
var domainCacheCountLowWaterMark = 75;
|
|
|
|
|
|
|
|
var domainCacheCountHighWaterMark = 100;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
psl.onChanged.addListener(domainCacheReset);
|
|
|
|
psl.onChanged.addListener(domainCacheReset);
|
|
|
|
|
|
|
|
|
|
|
|
/******************************************************************************/
|
|
|
|
/******************************************************************************/
|
|
|
|