Left: | ||
Right: |
LEFT | RIGHT |
---|---|
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 12 matching lines...) Expand all Loading... | |
23 | 23 |
24 const {filterNotifier} = require("./filterNotifier"); | 24 const {filterNotifier} = require("./filterNotifier"); |
25 const {extend} = require("./coreUtils"); | 25 const {extend} = require("./coreUtils"); |
26 const {filterToRegExp} = require("./common"); | 26 const {filterToRegExp} = require("./common"); |
27 | 27 |
28 /** | 28 /** |
29 * Regular expression used to match the <code>||</code> prefix in an otherwise | 29 * Regular expression used to match the <code>||</code> prefix in an otherwise |
30 * literal pattern. | 30 * literal pattern. |
31 * @type {RegExp} | 31 * @type {RegExp} |
32 */ | 32 */ |
33 let tripleAnchorRegExp = new RegExp(filterToRegExp("|||")); | 33 let doubleAnchorRegExp = new RegExp(filterToRegExp("||") + "$"); |
34 | 34 |
35 /** | 35 /** |
36 * All known unique domain sources mapped to their parsed values. | 36 * All known unique domain sources mapped to their parsed values. |
37 * @type {Map.<string,Map.<string,boolean>>} | 37 * @type {Map.<string,Map.<string,boolean>>} |
38 */ | 38 */ |
39 let knownDomainMaps = new Map(); | 39 let knownDomainMaps = new Map(); |
40 | 40 |
41 /** | 41 /** |
42 * Checks whether the given pattern is a string of literal characters with no | 42 * Checks whether the given pattern is a string of literal characters with no |
43 * wildcards or any other special characters. If the pattern is prefixed with a | 43 * wildcards or any other special characters. If the pattern is prefixed with a |
(...skipping 662 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
706 regexpSource[regexpSource.length - 1] == "/") | 706 regexpSource[regexpSource.length - 1] == "/") |
707 { | 707 { |
708 // The filter is a regular expression - convert it immediately to | 708 // The filter is a regular expression - convert it immediately to |
709 // catch syntax errors | 709 // catch syntax errors |
710 let regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2), | 710 let regexp = new RegExp(regexpSource.substr(1, regexpSource.length - 2), |
711 this.matchCase ? "" : "i"); | 711 this.matchCase ? "" : "i"); |
712 Object.defineProperty(this, "regexp", {value: regexp}); | 712 Object.defineProperty(this, "regexp", {value: regexp}); |
713 } | 713 } |
714 else | 714 else |
715 { | 715 { |
716 if (!this.matchCase && isLiteralPattern(regexpSource)) | 716 if (!this.matchCase && isLiteralPattern(regexpSource)) |
Manish Jethani
2018/10/17 09:05:04
Lowercase the pattern once here if it is literal a
| |
717 regexpSource = regexpSource.toLowerCase(); | 717 regexpSource = regexpSource.toLowerCase(); |
718 | 718 |
719 // No need to convert this filter to regular expression yet, do it on demand | 719 // No need to convert this filter to regular expression yet, do it on demand |
720 this.pattern = regexpSource; | 720 this.pattern = regexpSource; |
721 } | 721 } |
722 } | 722 } |
723 exports.RegExpFilter = RegExpFilter; | 723 exports.RegExpFilter = RegExpFilter; |
724 | 724 |
725 RegExpFilter.prototype = extend(ActiveFilter, { | 725 RegExpFilter.prototype = extend(ActiveFilter, { |
726 /** | 726 /** |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
836 if (!this.matchCase) | 836 if (!this.matchCase) |
837 location = location.toLowerCase(); | 837 location = location.toLowerCase(); |
838 | 838 |
839 let {pattern} = this; | 839 let {pattern} = this; |
840 | 840 |
841 if (pattern[0] == "|" && pattern[1] == "|") | 841 if (pattern[0] == "|" && pattern[1] == "|") |
842 { | 842 { |
843 let index = location.indexOf(pattern.substring(2)); | 843 let index = location.indexOf(pattern.substring(2)); |
844 | 844 |
845 // The "||" prefix requires that the text that follows does not start | 845 // The "||" prefix requires that the text that follows does not start |
846 // with a forward slash. Normally this is part of the generated regular | 846 // with a forward slash. |
847 // expression, but since we're faking it here with string-based matching | |
848 // we need to do the check ourselves. | |
849 return index != -1 && location[index] != "/" && | 847 return index != -1 && location[index] != "/" && |
Manish Jethani
2018/10/17 09:05:04
If the index is not -1 then it's highly unlikely t
| |
850 tripleAnchorRegExp.test(location.substring(0, index)); | 848 doubleAnchorRegExp.test(location.substring(0, index)); |
851 } | 849 } |
852 | 850 |
853 return location.includes(pattern); | 851 return location.includes(pattern); |
854 } | 852 } |
855 }); | 853 }); |
856 | 854 |
857 /** | 855 /** |
858 * Yields the filter itself (required to optimize {@link Matcher}). | 856 * Yields the filter itself (required to optimize {@link Matcher}). |
859 * @yields {RegExpFilter} | 857 * @yields {RegExpFilter} |
860 */ | 858 */ |
(...skipping 477 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1338 | 1336 |
1339 /** | 1337 /** |
1340 * Script that should be executed | 1338 * Script that should be executed |
1341 * @type {string} | 1339 * @type {string} |
1342 */ | 1340 */ |
1343 get script() | 1341 get script() |
1344 { | 1342 { |
1345 return this.body; | 1343 return this.body; |
1346 } | 1344 } |
1347 }); | 1345 }); |
LEFT | RIGHT |