| Index: lib/filterClasses.js |
| =================================================================== |
| --- a/lib/filterClasses.js |
| +++ b/lib/filterClasses.js |
| @@ -395,39 +395,31 @@ |
| /** |
| * Map containing domains that this filter should match on/not match |
| * on or null if the filter should match on all domains |
| * @type {?Map.<string,boolean>} |
| */ |
| get domains() |
| { |
| - let prop = Object.getOwnPropertyDescriptor(this, "_domains"); |
| - if (prop) |
| - { |
| - let {value} = prop; |
| - return typeof value == "string" ? |
| - new Map([[value, true], ["", false]]) : value; |
| - } |
| - |
| let domains = null; |
| if (this.domainSource) |
| { |
| let source = this.domainSource; |
| if (!this.domainSourceIsLowerCase) |
| { |
| // RegExpFilter already have lowercase domains |
| source = source.toLowerCase(); |
| } |
| let list = source.split(this.domainSeparator); |
| if (list.length == 1 && list[0][0] != "~") |
| { |
| // Fast track for the common one-domain scenario |
| - domains = list[0]; |
| + Object.defineProperty(this, "_singleDomain", {value: list[0]}); |
| } |
| else |
| { |
| let hasIncludes = false; |
| for (let i = 0; i < list.length; i++) |
| { |
| let domain = list[i]; |
| if (domain == "") |
| @@ -441,29 +433,35 @@ |
| } |
| else |
| { |
| include = true; |
| hasIncludes = true; |
| } |
| if (!domains) |
| + { |
| domains = new Map(); |
| + Object.defineProperty(this, "domains", {value: domains}); |
| + } |
| domains.set(domain, include); |
| } |
| if (domains) |
| domains.set("", !hasIncludes); |
| } |
| this.domainSource = null; |
| } |
| - Object.defineProperty(this, "_domains", {value: domains}); |
| - return this.domains; |
| + let singleDomain = this._singleDomain; |
| + if (singleDomain) |
| + return new Map([[singleDomain, true], ["", false]]); |
| + |
| + return domains; |
| }, |
| /** |
| * Array containing public keys of websites that this filter should apply to |
| * @type {?string[]} |
| */ |
| sitekeys: null, |