| 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-present eyeo GmbH | 3  * Copyright (C) 2006-present 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 375 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 386   domainSeparator: null, | 386   domainSeparator: null, | 
| 387 | 387 | 
| 388   /** | 388   /** | 
| 389    * Determines whether domainSource is already upper-case, | 389    * Determines whether domainSource is already upper-case, | 
| 390    * can be overridden by subclasses. | 390    * can be overridden by subclasses. | 
| 391    * @type {boolean} | 391    * @type {boolean} | 
| 392    */ | 392    */ | 
| 393   domainSourceIsUpperCase: false, | 393   domainSourceIsUpperCase: false, | 
| 394 | 394 | 
| 395   /** | 395   /** | 
| 396    * Map containing domains that this filter should match on/not match | 396    * String specifying the domain that this filter should match on, or map | 
| 397    * on or null if the filter should match on all domains | 397    * containing domains that this filter should match on/not match on, or null | 
| 398    * @type {?Map.<string,boolean>} | 398    * if the filter should match on all domains | 
|  | 399    * @type {?Map.<string,boolean>|string} | 
| 399    */ | 400    */ | 
| 400   get domains() | 401   get domains() | 
| 401   { | 402   { | 
| 402     // Despite this property being cached, the getter is called | 403     // Despite this property being cached, the getter is called | 
| 403     // several times on Safari, due to WebKit bug 132872 | 404     // several times on Safari, due to WebKit bug 132872 | 
| 404     let prop = Object.getOwnPropertyDescriptor(this, "domains"); | 405     let prop = Object.getOwnPropertyDescriptor(this, "domains"); | 
| 405     if (prop) | 406     if (prop) | 
| 406       return prop.value; | 407       return prop.value; | 
| 407 | 408 | 
| 408     let domains = null; | 409     let domains = null; | 
| 409 | 410 | 
| 410     if (this.domainSource) | 411     if (this.domainSource) | 
| 411     { | 412     { | 
| 412       let source = this.domainSource; | 413       let source = this.domainSource; | 
| 413       if (!this.domainSourceIsUpperCase) | 414       if (!this.domainSourceIsUpperCase) | 
| 414       { | 415       { | 
| 415         // RegExpFilter already have uppercase domains | 416         // RegExpFilter already have uppercase domains | 
| 416         source = source.toUpperCase(); | 417         source = source.toUpperCase(); | 
| 417       } | 418       } | 
| 418       let list = source.split(this.domainSeparator); | 419       let list = source.split(this.domainSeparator); | 
| 419       if (list.length == 1 && list[0][0] != "~") | 420       if (list.length == 1 && list[0][0] != "~") | 
| 420       { | 421       { | 
| 421         // Fast track for the common one-domain scenario | 422         // Fast track for the common one-domain scenario | 
| 422         domains = new Map([["", false], [list[0], true]]); | 423         domains = list[0]; | 
| 423       } | 424       } | 
| 424       else | 425       else | 
| 425       { | 426       { | 
| 426         let hasIncludes = false; | 427         let hasIncludes = false; | 
| 427         for (let i = 0; i < list.length; i++) | 428         for (let i = 0; i < list.length; i++) | 
| 428         { | 429         { | 
| 429           let domain = list[i]; | 430           let domain = list[i]; | 
| 430           if (domain == "") | 431           if (domain == "") | 
| 431             continue; | 432             continue; | 
| 432 | 433 | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 481       return false; | 482       return false; | 
| 482     } | 483     } | 
| 483 | 484 | 
| 484     // If no domains are set the rule matches everywhere | 485     // If no domains are set the rule matches everywhere | 
| 485     if (!this.domains) | 486     if (!this.domains) | 
| 486       return true; | 487       return true; | 
| 487 | 488 | 
| 488     // If the document has no host name, match only if the filter | 489     // If the document has no host name, match only if the filter | 
| 489     // isn't restricted to specific domains | 490     // isn't restricted to specific domains | 
| 490     if (!docDomain) | 491     if (!docDomain) | 
| 491       return this.domains.get(""); | 492       return typeof this.domains != "string" && this.domains.get(""); | 
| 492 | 493 | 
| 493     docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); | 494     docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); | 
| 494 | 495 | 
|  | 496     if (typeof this.domains == "string") | 
|  | 497     { | 
|  | 498       return docDomain == this.domains || | 
|  | 499              docDomain.endsWith("." + this.domains); | 
|  | 500     } | 
|  | 501 | 
| 495     while (true) | 502     while (true) | 
| 496     { | 503     { | 
| 497       let isDomainIncluded = this.domains.get(docDomain); | 504       let isDomainIncluded = this.domains.get(docDomain); | 
| 498       if (typeof isDomainIncluded != "undefined") | 505       if (typeof isDomainIncluded != "undefined") | 
| 499         return isDomainIncluded; | 506         return isDomainIncluded; | 
| 500 | 507 | 
| 501       let nextDot = docDomain.indexOf("."); | 508       let nextDot = docDomain.indexOf("."); | 
| 502       if (nextDot < 0) | 509       if (nextDot < 0) | 
| 503         break; | 510         break; | 
| 504       docDomain = docDomain.substr(nextDot + 1); | 511       docDomain = docDomain.substr(nextDot + 1); | 
| 505     } | 512     } | 
| 506     return this.domains.get(""); | 513     return this.domains.get(""); | 
| 507   }, | 514   }, | 
| 508 | 515 | 
| 509   /** | 516   /** | 
| 510    * Checks whether this filter is active only on a domain and its subdomains. | 517    * Checks whether this filter is active only on a domain and its subdomains. | 
| 511    * @param {string} docDomain | 518    * @param {string} docDomain | 
| 512    * @return {boolean} | 519    * @return {boolean} | 
| 513    */ | 520    */ | 
| 514   isActiveOnlyOnDomain(docDomain) | 521   isActiveOnlyOnDomain(docDomain) | 
| 515   { | 522   { | 
| 516     if (!docDomain || !this.domains || this.domains.get("")) | 523     if (!docDomain || !this.domains || | 
|  | 524         typeof this.domains != "string" && this.domains.get("")) | 
|  | 525     { | 
| 517       return false; | 526       return false; | 
|  | 527     } | 
| 518 | 528 | 
| 519     docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); | 529     docDomain = docDomain.replace(/\.+$/, "").toUpperCase(); | 
| 520 | 530 | 
|  | 531     if (typeof this.domains == "string") | 
|  | 532     { | 
|  | 533       return docDomain == this.domains || | 
|  | 534              this.domains.endsWith("." + docDomain); | 
|  | 535     } | 
|  | 536 | 
| 521     for (let [domain, isIncluded] of this.domains) | 537     for (let [domain, isIncluded] of this.domains) | 
| 522     { | 538     { | 
| 523       if (isIncluded && domain != docDomain) | 539       if (isIncluded && domain != docDomain) | 
| 524       { | 540       { | 
| 525         if (domain.length <= docDomain.length) | 541         if (domain.length <= docDomain.length) | 
| 526           return false; | 542           return false; | 
| 527 | 543 | 
| 528         if (!domain.endsWith("." + docDomain)) | 544         if (!domain.endsWith("." + docDomain)) | 
| 529           return false; | 545           return false; | 
| 530       } | 546       } | 
| 531     } | 547     } | 
| 532 | 548 | 
| 533     return true; | 549     return true; | 
| 534   }, | 550   }, | 
| 535 | 551 | 
| 536   /** | 552   /** | 
| 537    * Checks whether this filter is generic or specific | 553    * Checks whether this filter is generic or specific | 
| 538    * @return {boolean} | 554    * @return {boolean} | 
| 539    */ | 555    */ | 
| 540   isGeneric() | 556   isGeneric() | 
| 541   { | 557   { | 
| 542     return !(this.sitekeys && this.sitekeys.length) && | 558     return !(this.sitekeys && this.sitekeys.length) && | 
| 543             (!this.domains || this.domains.get("")); | 559             (!this.domains || | 
|  | 560              typeof this.domains != "string" && this.domains.get("")); | 
| 544   }, | 561   }, | 
| 545 | 562 | 
| 546   /** | 563   /** | 
| 547    * See Filter.serialize() | 564    * See Filter.serialize() | 
| 548    * @inheritdoc | 565    * @inheritdoc | 
| 549    */ | 566    */ | 
| 550   serialize(buffer) | 567   serialize(buffer) | 
| 551   { | 568   { | 
| 552     if (this._disabled || this._hitCount || this._lastHit) | 569     if (this._disabled || this._hitCount || this._lastHit) | 
| 553     { | 570     { | 
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1099  */ | 1116  */ | 
| 1100 function ElemHideEmulationFilter(text, domains, selector) | 1117 function ElemHideEmulationFilter(text, domains, selector) | 
| 1101 { | 1118 { | 
| 1102   ElemHideBase.call(this, text, domains, selector); | 1119   ElemHideBase.call(this, text, domains, selector); | 
| 1103 } | 1120 } | 
| 1104 exports.ElemHideEmulationFilter = ElemHideEmulationFilter; | 1121 exports.ElemHideEmulationFilter = ElemHideEmulationFilter; | 
| 1105 | 1122 | 
| 1106 ElemHideEmulationFilter.prototype = extend(ElemHideBase, { | 1123 ElemHideEmulationFilter.prototype = extend(ElemHideBase, { | 
| 1107   type: "elemhideemulation" | 1124   type: "elemhideemulation" | 
| 1108 }); | 1125 }); | 
| OLD | NEW | 
|---|