| 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 | 
|---|