| OLD | NEW | 
|    1 /* |    1 /* | 
|    2  * This file is part of Adblock Plus <https://adblockplus.org/>, |    2  * This file is part of Adblock Plus <https://adblockplus.org/>, | 
|    3  * Copyright (C) 2006-2015 Eyeo GmbH |    3  * Copyright (C) 2006-2015 Eyeo GmbH | 
|    4  * |    4  * | 
|    5  * Adblock Plus is free software: you can redistribute it and/or modify |    5  * Adblock Plus is free software: you can redistribute it and/or modify | 
|    6  * it under the terms of the GNU General Public License version 3 as |    6  * it under the terms of the GNU General Public License version 3 as | 
|    7  * published by the Free Software Foundation. |    7  * published by the Free Software Foundation. | 
|    8  * |    8  * | 
|    9  * Adblock Plus is distributed in the hope that it will be useful, |    9  * Adblock Plus is distributed in the hope that it will be useful, | 
|   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of |   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  158   { |  158   { | 
|  159     if (filter.text in this.keywordByFilter) |  159     if (filter.text in this.keywordByFilter) | 
|  160       return this.keywordByFilter[filter.text]; |  160       return this.keywordByFilter[filter.text]; | 
|  161     else |  161     else | 
|  162       return null; |  162       return null; | 
|  163   }, |  163   }, | 
|  164  |  164  | 
|  165   /** |  165   /** | 
|  166    * Checks whether the entries for a particular keyword match a URL |  166    * Checks whether the entries for a particular keyword match a URL | 
|  167    */ |  167    */ | 
|  168   _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdPar
     ty, sitekey) |  168   _checkEntryMatch: function(keyword, location, contentType, docDomain, thirdPar
     ty, sitekey, specificOnly) | 
|  169   { |  169   { | 
|  170     let list = this.filterByKeyword[keyword]; |  170     let list = this.filterByKeyword[keyword]; | 
|  171     for (let i = 0; i < list.length; i++) |  171     for (let i = 0; i < list.length; i++) | 
|  172     { |  172     { | 
|  173       let filter = list[i]; |  173       let filter = list[i]; | 
 |  174  | 
 |  175       if (specificOnly && (!filter.domains || filter.domains[""]) && | 
 |  176           !(filter instanceof WhitelistFilter)) | 
 |  177         continue; | 
 |  178  | 
|  174       if (filter.matches(location, contentType, docDomain, thirdParty, sitekey)) |  179       if (filter.matches(location, contentType, docDomain, thirdParty, sitekey)) | 
|  175         return filter; |  180         return filter; | 
|  176     } |  181     } | 
|  177     return null; |  182     return null; | 
|  178   }, |  183   }, | 
|  179  |  184  | 
|  180   /** |  185   /** | 
|  181    * Tests whether the URL matches any of the known filters |  186    * Tests whether the URL matches any of the known filters | 
|  182    * @param {String} location URL to be tested |  187    * @param {String} location URL to be tested | 
|  183    * @param {String} contentType content type identifier of the URL |  188    * @param {String} contentType content type identifier of the URL | 
|  184    * @param {String} docDomain domain name of the document that loads the URL |  189    * @param {String} docDomain domain name of the document that loads the URL | 
|  185    * @param {Boolean} thirdParty should be true if the URL is a third-party requ
     est |  190    * @param {Boolean} thirdParty should be true if the URL is a third-party requ
     est | 
|  186    * @param {String} sitekey public key provided by the document |  191    * @param {String} sitekey public key provided by the document | 
 |  192    * @param {Boolean} specificOnly should be true if generic matches should be i
     gnored | 
|  187    * @return {RegExpFilter} matching filter or null |  193    * @return {RegExpFilter} matching filter or null | 
|  188    */ |  194    */ | 
|  189   matchesAny: function(location, contentType, docDomain, thirdParty, sitekey) |  195   matchesAny: function(location, contentType, docDomain, thirdParty, sitekey, sp
     ecificOnly) | 
|  190   { |  196   { | 
|  191     let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); |  197     let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); | 
|  192     if (candidates === null) |  198     if (candidates === null) | 
|  193       candidates = []; |  199       candidates = []; | 
|  194     candidates.push(""); |  200     candidates.push(""); | 
|  195     for (let i = 0, l = candidates.length; i < l; i++) |  201     for (let i = 0, l = candidates.length; i < l; i++) | 
|  196     { |  202     { | 
|  197       let substr = candidates[i]; |  203       let substr = candidates[i]; | 
|  198       if (substr in this.filterByKeyword) |  204       if (substr in this.filterByKeyword) | 
|  199       { |  205       { | 
|  200         let result = this._checkEntryMatch(substr, location, contentType, docDom
     ain, thirdParty, sitekey); |  206         let result = this._checkEntryMatch(substr, location, contentType, docDom
     ain, thirdParty, sitekey, specificOnly); | 
|  201         if (result) |  207         if (result) | 
|  202           return result; |  208           return result; | 
|  203       } |  209       } | 
|  204     } |  210     } | 
|  205  |  211  | 
|  206     return null; |  212     return null; | 
|  207   } |  213   } | 
|  208 }; |  214 }; | 
|  209  |  215  | 
|  210 /** |  216 /** | 
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  340       return !matcher.getKeywordForFilter(filter); |  346       return !matcher.getKeywordForFilter(filter); | 
|  341     else |  347     else | 
|  342       return !matcher.findKeyword(filter); |  348       return !matcher.findKeyword(filter); | 
|  343   }, |  349   }, | 
|  344  |  350  | 
|  345   /** |  351   /** | 
|  346    * Optimized filter matching testing both whitelist and blacklist matchers |  352    * Optimized filter matching testing both whitelist and blacklist matchers | 
|  347    * simultaneously. For parameters see Matcher.matchesAny(). |  353    * simultaneously. For parameters see Matcher.matchesAny(). | 
|  348    * @see Matcher#matchesAny |  354    * @see Matcher#matchesAny | 
|  349    */ |  355    */ | 
|  350   matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sit
     ekey) |  356   matchesAnyInternal: function(location, contentType, docDomain, thirdParty, sit
     ekey, specificOnly) | 
|  351   { |  357   { | 
|  352     let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); |  358     let candidates = location.toLowerCase().match(/[a-z0-9%]{3,}/g); | 
|  353     if (candidates === null) |  359     if (candidates === null) | 
|  354       candidates = []; |  360       candidates = []; | 
|  355     candidates.push(""); |  361     candidates.push(""); | 
|  356  |  362  | 
|  357     let blacklistHit = null; |  363     let blacklistHit = null; | 
|  358     for (let i = 0, l = candidates.length; i < l; i++) |  364     for (let i = 0, l = candidates.length; i < l; i++) | 
|  359     { |  365     { | 
|  360       let substr = candidates[i]; |  366       let substr = candidates[i]; | 
|  361       if (substr in this.whitelist.filterByKeyword) |  367       if (substr in this.whitelist.filterByKeyword) | 
|  362       { |  368       { | 
|  363         let result = this.whitelist._checkEntryMatch(substr, location, contentTy
     pe, docDomain, thirdParty, sitekey); |  369         let result = this.whitelist._checkEntryMatch(substr, location, contentTy
     pe, docDomain, thirdParty, sitekey); | 
|  364         if (result) |  370         if (result) | 
|  365           return result; |  371           return result; | 
|  366       } |  372       } | 
|  367       if (substr in this.blacklist.filterByKeyword && blacklistHit === null) |  373       if (substr in this.blacklist.filterByKeyword && blacklistHit === null) | 
|  368         blacklistHit = this.blacklist._checkEntryMatch(substr, location, content
     Type, docDomain, thirdParty, sitekey); |  374         blacklistHit = this.blacklist._checkEntryMatch(substr, location, content
     Type, docDomain, thirdParty, sitekey, specificOnly); | 
|  369     } |  375     } | 
|  370     return blacklistHit; |  376     return blacklistHit; | 
|  371   }, |  377   }, | 
|  372  |  378  | 
|  373   /** |  379   /** | 
|  374    * @see Matcher#matchesAny |  380    * @see Matcher#matchesAny | 
|  375    */ |  381    */ | 
|  376   matchesAny: function(location, contentType, docDomain, thirdParty, sitekey) |  382   matchesAny: function(location, contentType, docDomain, thirdParty, sitekey, sp
     ecificOnly) | 
|  377   { |  383   { | 
|  378     let key = location + " " + contentType + " " + docDomain + " " + thirdParty 
     + " " + sitekey; |  384     let key = location + " " + contentType + " " + docDomain + " " + thirdParty 
     + " " + sitekey + " " + specificOnly; | 
|  379     if (key in this.resultCache) |  385     if (key in this.resultCache) | 
|  380       return this.resultCache[key]; |  386       return this.resultCache[key]; | 
|  381  |  387  | 
|  382     let result = this.matchesAnyInternal(location, contentType, docDomain, third
     Party, sitekey); |  388     let result = this.matchesAnyInternal(location, contentType, docDomain, third
     Party, sitekey, specificOnly); | 
|  383  |  389  | 
|  384     if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) |  390     if (this.cacheEntries >= CombinedMatcher.maxCacheEntries) | 
|  385     { |  391     { | 
|  386       this.resultCache = Object.create(null); |  392       this.resultCache = Object.create(null); | 
|  387       this.cacheEntries = 0; |  393       this.cacheEntries = 0; | 
|  388     } |  394     } | 
|  389  |  395  | 
|  390     this.resultCache[key] = result; |  396     this.resultCache[key] = result; | 
|  391     this.cacheEntries++; |  397     this.cacheEntries++; | 
|  392  |  398  | 
|  393     return result; |  399     return result; | 
|  394   } |  400   } | 
|  395 } |  401 } | 
|  396  |  402  | 
|  397 /** |  403 /** | 
|  398  * Shared CombinedMatcher instance that should usually be used. |  404  * Shared CombinedMatcher instance that should usually be used. | 
|  399  * @type CombinedMatcher |  405  * @type CombinedMatcher | 
|  400  */ |  406  */ | 
|  401 let defaultMatcher = exports.defaultMatcher = new CombinedMatcher(); |  407 let defaultMatcher = exports.defaultMatcher = new CombinedMatcher(); | 
| OLD | NEW |