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 706 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
717 this.matchCase = matchCase; | 717 this.matchCase = matchCase; |
718 if (thirdParty != null) | 718 if (thirdParty != null) |
719 this.thirdParty = thirdParty; | 719 this.thirdParty = thirdParty; |
720 if (sitekeys != null) | 720 if (sitekeys != null) |
721 this.sitekeySource = sitekeys; | 721 this.sitekeySource = sitekeys; |
722 if (rewrite != null) | 722 if (rewrite != null) |
723 this.rewrite = rewrite; | 723 this.rewrite = rewrite; |
724 if (resourceName) | 724 if (resourceName) |
725 this.resourceName = resourceName; | 725 this.resourceName = resourceName; |
726 | 726 |
| 727 if (!this.matchCase) |
| 728 regexpSource = regexpSource.toLowerCase(); |
| 729 |
727 if (regexpSource.length >= 2 && | 730 if (regexpSource.length >= 2 && |
728 regexpSource[0] == "/" && | 731 regexpSource[0] == "/" && |
729 regexpSource[regexpSource.length - 1] == "/") | 732 regexpSource[regexpSource.length - 1] == "/") |
730 { | 733 { |
731 // The filter is a regular expression - convert it immediately to | 734 // The filter is a regular expression - convert it immediately to |
732 // catch syntax errors | 735 // catch syntax errors |
733 let regexp = new RegExp(regexpSource.substring(1, regexpSource.length - 1), | 736 let regexp = new RegExp(regexpSource.substring(1, regexpSource.length - 1)); |
734 this.matchCase ? "" : "i"); | |
735 Object.defineProperty(this, "regexp", {value: regexp}); | 737 Object.defineProperty(this, "regexp", {value: regexp}); |
736 } | 738 } |
737 else | 739 else |
738 { | 740 { |
739 // Patterns like /foo/bar/* exist so that they are not treated as regular | 741 // Patterns like /foo/bar/* exist so that they are not treated as regular |
740 // expressions. We drop any superfluous wildcards here so our optimizations | 742 // expressions. We drop any superfluous wildcards here so our optimizations |
741 // can kick in. | 743 // can kick in. |
742 if (this.rewrite == null || this.resourceName) | 744 if (this.rewrite == null || this.resourceName) |
743 regexpSource = regexpSource.replace(/^\*+/, "").replace(/\*+$/, ""); | 745 regexpSource = regexpSource.replace(/^\*+/, "").replace(/\*+$/, ""); |
744 | 746 |
745 if (!this.matchCase && isLiteralPattern(regexpSource)) | |
746 regexpSource = regexpSource.toLowerCase(); | |
747 | |
748 // No need to convert this filter to regular expression yet, do it on demand | 747 // No need to convert this filter to regular expression yet, do it on demand |
749 this.pattern = regexpSource; | 748 this.pattern = regexpSource; |
750 } | 749 } |
751 } | 750 } |
752 exports.RegExpFilter = RegExpFilter; | 751 exports.RegExpFilter = RegExpFilter; |
753 | 752 |
754 RegExpFilter.prototype = extend(ActiveFilter, { | 753 RegExpFilter.prototype = extend(ActiveFilter, { |
755 /** | 754 /** |
756 * Number of filters contained, will always be 1 (required to | 755 * Number of filters contained, will always be 1 (required to |
757 * optimize {@link Matcher}). | 756 * optimize {@link Matcher}). |
(...skipping 16 matching lines...) Expand all Loading... |
774 /** | 773 /** |
775 * Regular expression to be used when testing against this filter | 774 * Regular expression to be used when testing against this filter |
776 * @type {RegExp} | 775 * @type {RegExp} |
777 */ | 776 */ |
778 get regexp() | 777 get regexp() |
779 { | 778 { |
780 let value = null; | 779 let value = null; |
781 | 780 |
782 let {pattern, rewrite, resourceName} = this; | 781 let {pattern, rewrite, resourceName} = this; |
783 if ((rewrite != null && !resourceName) || !isLiteralPattern(pattern)) | 782 if ((rewrite != null && !resourceName) || !isLiteralPattern(pattern)) |
784 { | 783 value = new RegExp(filterToRegExp(pattern, rewrite != null)); |
785 value = new RegExp(filterToRegExp(pattern, rewrite != null), | |
786 this.matchCase ? "" : "i"); | |
787 } | |
788 | 784 |
789 Object.defineProperty(this, "regexp", {value}); | 785 Object.defineProperty(this, "regexp", {value}); |
790 return value; | 786 return value; |
791 }, | 787 }, |
792 /** | 788 /** |
793 * Content types the filter applies to, combination of values from | 789 * Content types the filter applies to, combination of values from |
794 * RegExpFilter.typeMap | 790 * RegExpFilter.typeMap |
795 * @type {number} | 791 * @type {number} |
796 */ | 792 */ |
797 contentType: 0x7FFFFFFF, | 793 contentType: 0x7FFFFFFF, |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 /** | 887 /** |
892 * Checks whether the given URL matches this filter's pattern. | 888 * Checks whether the given URL matches this filter's pattern. |
893 * @param {string} location The URL to check. | 889 * @param {string} location The URL to check. |
894 * @param {?string} [lowerCaseLocation] The lower-case version of the URL to | 890 * @param {?string} [lowerCaseLocation] The lower-case version of the URL to |
895 * check, for case-insensitive matching. | 891 * check, for case-insensitive matching. |
896 * @returns {boolean} <code>true</code> if the URL matches. | 892 * @returns {boolean} <code>true</code> if the URL matches. |
897 * @package | 893 * @package |
898 */ | 894 */ |
899 matchesLocation(location, lowerCaseLocation) | 895 matchesLocation(location, lowerCaseLocation) |
900 { | 896 { |
| 897 if (!this.matchCase) |
| 898 location = lowerCaseLocation || location.toLowerCase(); |
| 899 |
901 let {regexp} = this; | 900 let {regexp} = this; |
902 | 901 |
903 if (regexp) | 902 if (regexp) |
904 return regexp.test(location); | 903 return regexp.test(location); |
905 | 904 |
906 if (!this.matchCase) | |
907 location = lowerCaseLocation || location.toLowerCase(); | |
908 | |
909 let {pattern} = this; | 905 let {pattern} = this; |
910 | 906 |
911 let startsWithDoubleAnchor = pattern[0] == "|" && pattern[1] == "|"; | 907 let startsWithDoubleAnchor = pattern[0] == "|" && pattern[1] == "|"; |
912 let endsWithSeparator = pattern[pattern.length - 1] == "^"; | 908 let endsWithSeparator = pattern[pattern.length - 1] == "^"; |
913 | 909 |
914 if (startsWithDoubleAnchor) | 910 if (startsWithDoubleAnchor) |
915 pattern = pattern.substr(2); | 911 pattern = pattern.substr(2); |
916 | 912 |
917 if (endsWithSeparator) | 913 if (endsWithSeparator) |
918 pattern = pattern.slice(0, -1); | 914 pattern = pattern.slice(0, -1); |
(...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 | 1433 |
1438 /** | 1434 /** |
1439 * Script that should be executed | 1435 * Script that should be executed |
1440 * @type {string} | 1436 * @type {string} |
1441 */ | 1437 */ |
1442 get script() | 1438 get script() |
1443 { | 1439 { |
1444 return this.body; | 1440 return this.body; |
1445 } | 1441 } |
1446 }); | 1442 }); |
OLD | NEW |