diff options
Diffstat (limited to 'js/net-filtering.js')
-rw-r--r-- | js/net-filtering.js | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/js/net-filtering.js b/js/net-filtering.js index 68680ee..342bf4e 100644 --- a/js/net-filtering.js +++ b/js/net-filtering.js @@ -140,6 +140,15 @@ var atoi = function(s) { return cachedParseInt(s, 10); }; +var isFirstParty = function(firstPartyDomain, hostname) { + if ( hostname.slice(0 - firstPartyDomain.length) !== firstPartyDomain ) { + return false; + } + // Be sure to not confuse 'example.com' with 'anotherexample.com' + var c = hostname.charAt(hostname.length - firstPartyDomain.length - 1); + return c === '.' || c === ''; +}; + /******************************************************************************* Filters family tree: @@ -1945,19 +1954,21 @@ FilterContainer.prototype.match3rdPartyHostname = function(requestHostname) { FilterContainer.prototype.matchStringExactType = function(pageDetails, requestURL, requestType) { var url = requestURL.toLowerCase(); - var pageDomain = pageDetails.pageDomain || ''; var requestHostname = µb.URI.hostnameFromURI(requestURL); - var party = requestHostname.slice(-pageDomain.length) === pageDomain ? - FirstParty : - ThirdParty; // Evaluate dynamic filters first. "Block" dynamic filters are always // "important", they override everything else. - var bf = this.matchDynamicFilters(pageDetails.rootHostname, requestType, party === FirstParty); + var bf = this.matchDynamicFilters( + pageDetails.rootHostname, + requestType, + isFirstParty(pageDetails.rootDomain, requestHostname) + ); if ( bf !== '' && bf.slice(0, 2) !== '@@' ) { return bf; } + var party = isFirstParty(pageDetails.pageDomain, requestHostname) ? FirstParty : ThirdParty; + // This will be used by hostname-based filters pageHostname = pageDetails.pageHostname || ''; @@ -2030,26 +2041,21 @@ FilterContainer.prototype.matchString = function(pageDetails, requestURL, reques // filters are tested *only* if there is a (unlikely) hit on a block // filter. - var pageDomain = pageDetails.pageDomain || ''; var requestHostname = µb.URI.hostnameFromURI(requestURL); - // Find out the relation between the page and request - var party = ThirdParty; - if ( requestHostname.slice(0 - pageDomain.length) === pageDomain ) { - // Be sure to not confuse 'example.com' with 'anotherexample.com' - var c = requestHostname.charAt(requestHostname.length - pageDomain.length - 1); - if ( c === '' || c === '.' ) { - party = FirstParty; - } - } - // Evaluate dynamic filters first. "Block" dynamic filters are always // "important", they override everything else. - var bf = this.matchDynamicFilters(pageDetails.rootHostname, requestType, party === FirstParty); + var bf = this.matchDynamicFilters( + pageDetails.rootHostname, + requestType, + isFirstParty(pageDetails.rootDomain, requestHostname) + ); if ( bf !== '' && bf.slice(0, 2) !== '@@' ) { return bf; } + var party = isFirstParty(pageDetails.pageDomain, requestHostname) ? FirstParty : ThirdParty ; + // This will be used by hostname-based filters pageHostname = pageDetails.pageHostname || ''; |