| Index: lib/filterClasses.js |
| =================================================================== |
| --- a/lib/filterClasses.js |
| +++ b/lib/filterClasses.js |
| @@ -19,16 +19,18 @@ |
| /** |
| * @fileOverview Definition of Filter class and its subclasses. |
| */ |
| const {filterNotifier} = require("./filterNotifier"); |
| const {extend} = require("./coreUtils"); |
| const {filterToRegExp} = require("./common"); |
| +const {optimizeContentFilterText, |
| + optimizeRegExpFilterText} = require("./filterText"); |
| /** |
| * All known unique domain sources mapped to their parsed values. |
| * @type {Map.<string,Map.<string,boolean>>} |
| */ |
| let knownDomainMaps = new Map(); |
| /** |
| @@ -890,16 +892,19 @@ |
| if (contentType == null) |
| ({contentType} = RegExpFilter.prototype); |
| contentType &= ~(RegExpFilter.typeMap.SCRIPT | |
| RegExpFilter.typeMap.SUBDOCUMENT | |
| RegExpFilter.typeMap.OBJECT | |
| RegExpFilter.typeMap.OBJECT_SUBREQUEST); |
| } |
| + [origText, text, domains, sitekeys, csp, rewrite] = |
| + optimizeRegExpFilterText(origText, text, domains, sitekeys, csp, rewrite); |
| + |
| try |
| { |
| if (blocking) |
| { |
| if (csp && Filter.invalidCSPRegExp.test(csp)) |
| return new InvalidFilter(origText, "filter_invalid_csp"); |
| return new BlockingFilter(origText, text, contentType, matchCase, domains, |
| @@ -1108,16 +1113,19 @@ |
| ContentFilter.fromText = function(text, domains, type, body) |
| { |
| // We don't allow content filters which have any empty domains. |
| // Note: The ContentFilter.prototype.domainSeparator is duplicated here, if |
| // that changes this must be changed too. |
| if (domains && /(^|,)~?(,|$)/.test(domains)) |
| return new InvalidFilter(text, "filter_invalid_domain"); |
| + [text, domains, type, body] = |
| + optimizeContentFilterText(text, domains, type, body); |
| + |
| if (type == "@") |
| return new ElemHideException(text, domains, body); |
| if (type == "?" || type == "$") |
| { |
| // Element hiding emulation and snippet filters are inefficient so we need |
| // to make sure that they're only applied if they specify active domains |
| if (!(/,[^~][^,.]*\.[^,]/.test("," + domains) || |