Index: lib/matcher.js |
=================================================================== |
--- a/lib/matcher.js |
+++ b/lib/matcher.js |
@@ -165,13 +165,13 @@ |
/** |
* Checks whether the entries for a particular keyword match a URL |
*/ |
- _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty) |
+ _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdParty, docLocation, siteKey) |
{ |
let list = this.filterByKeyword[keyword]; |
for (let i = 0; i < list.length; i++) |
{ |
let filter = list[i]; |
- if (filter.matches(location, contentType, docDomain, thirdParty)) |
+ if (filter.matches(location, contentType, docDomain, thirdParty, docLocation, siteKey)) |
return filter; |
} |
return null; |
@@ -183,9 +183,11 @@ |
* @param {String} contentType content type identifier of the URL |
* @param {String} docDomain domain name of the document that loads the URL |
* @param {Boolean} thirdParty should be true if the URL is a third-party request |
+ * @param {String} docLocation location the document that loads the URL |
+ * @param {String} siteKey public key provided by the document |
* @return {RegExpFilter} matching filter or null |
*/ |
- matchesAny: function(location, contentType, docDomain, thirdParty) |
+ matchesAny: function(location, contentType, docDomain, thirdParty, docLocation, siteKey) |
{ |
let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); |
if (candidates === null) |
@@ -196,7 +198,7 @@ |
let substr = candidates[i]; |
if (substr in this.filterByKeyword) |
{ |
- let result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty); |
+ let result = this._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, docLocation, siteKey); |
if (result) |
return result; |
} |
@@ -215,7 +217,6 @@ |
{ |
this.blacklist = new Matcher(); |
this.whitelist = new Matcher(); |
- this.keys = Object.create(null); |
this.resultCache = Object.create(null); |
} |
exports.CombinedMatcher = CombinedMatcher; |
@@ -241,12 +242,6 @@ |
whitelist: null, |
/** |
- * Exception rules that are limited by public keys, mapped by the corresponding keys. |
- * @type Object |
- */ |
- keys: null, |
- |
- /** |
* Lookup table of previous matchesAny results |
* @type Object |
*/ |
@@ -265,7 +260,6 @@ |
{ |
this.blacklist.clear(); |
this.whitelist.clear(); |
- this.keys = Object.create(null); |
this.resultCache = Object.create(null); |
this.cacheEntries = 0; |
}, |
@@ -276,15 +270,7 @@ |
add: function(filter) |
{ |
if (filter instanceof WhitelistFilter) |
- { |
- if (filter.siteKeys) |
- { |
- for (let i = 0; i < filter.siteKeys.length; i++) |
- this.keys[filter.siteKeys[i]] = filter.text; |
- } |
- else |
- this.whitelist.add(filter); |
- } |
+ this.whitelist.add(filter); |
else |
this.blacklist.add(filter); |
@@ -301,15 +287,7 @@ |
remove: function(filter) |
{ |
if (filter instanceof WhitelistFilter) |
- { |
- if (filter.siteKeys) |
- { |
- for (let i = 0; i < filter.siteKeys.length; i++) |
- delete this.keys[filter.siteKeys[i]]; |
- } |
- else |
- this.whitelist.remove(filter); |
- } |
+ this.whitelist.remove(filter); |
else |
this.blacklist.remove(filter); |
@@ -370,7 +348,7 @@ |
* simultaneously. For parameters see Matcher.matchesAny(). |
* @see Matcher#matchesAny |
*/ |
- matchesAnyInternal: function(location, contentType, docDomain, thirdParty) |
+ matchesAnyInternal: function(location, contentType, docDomain, thirdParty, docLocation, siteKey) |
{ |
let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); |
if (candidates === null) |
@@ -383,12 +361,12 @@ |
let substr = candidates[i]; |
if (substr in this.whitelist.filterByKeyword) |
{ |
- let result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty); |
+ let result = this.whitelist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, docLocation, siteKey); |
if (result) |
return result; |
} |
if (substr in this.blacklist.filterByKeyword && blacklistHit === null) |
- blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty); |
+ blacklistHit = this.blacklist._checkEntryMatch(substr, location, contentType, docDomain, thirdParty, docLocation, siteKey); |
} |
return blacklistHit; |
}, |
@@ -396,13 +374,13 @@ |
/** |
* @see Matcher#matchesAny |
*/ |
- matchesAny: function(location, contentType, docDomain, thirdParty) |
+ matchesAny: function(location, contentType, docDomain, thirdParty, docLocation, siteKey) |
{ |
- let key = location + " " + contentType + " " + docDomain + " " + thirdParty; |
+ let key = location + " " + contentType + " " + docDomain + " " + thirdParty + " " + docLocation + " " + siteKey; |
if (key in this.resultCache) |
return this.resultCache[key]; |
- let result = this.matchesAnyInternal(location, contentType, docDomain, thirdParty); |
+ let result = this.matchesAnyInternal(location, contentType, docDomain, thirdParty, docLocation, siteKey); |
if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) |
{ |
@@ -414,24 +392,6 @@ |
this.cacheEntries++; |
return result; |
- }, |
- |
- /** |
- * Looks up whether any filters match the given website key. |
- */ |
- matchesByKey: function(/**String*/ location, /**String*/ key, /**String*/ docDomain) |
- { |
- key = key.toUpperCase(); |
- if (key in this.keys) |
- { |
- let filter = Filter.knownFilters[this.keys[key]]; |
- if (filter && filter.matches(location, "DOCUMENT", docDomain, false)) |
- return filter; |
- else |
- return null; |
- } |
- else |
- return null; |
} |
} |