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 |
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
13 * | 13 * |
14 * You should have received a copy of the GNU General Public License | 14 * You should have received a copy of the GNU General Public License |
15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
16 */ | 16 */ |
17 | 17 |
18 /** @module filterValidation */ | 18 /** @module filterValidation */ |
19 | 19 |
20 "use strict"; | 20 "use strict"; |
21 | 21 |
22 const {Filter, InvalidFilter, ElemHideBase, ElemHideException, | 22 const {Filter, InvalidFilter, ElemHideBase, ElemHideException, |
23 ElemHideEmulationFilter} = require("filterClasses"); | 23 ElemHideEmulationFilter} = require("filterClasses"); |
24 const {Utils} = require("utils"); | |
25 | 24 |
26 /** | 25 /** |
27 * An error returned by | 26 * An error returned by |
28 * {@link module:filterValidation.parseFilter parseFilter()} or | 27 * {@link module:filterValidation.parseFilter parseFilter()} or |
29 * {@link module:filterValidation.parseFilters parseFilters()} | 28 * {@link module:filterValidation.parseFilters parseFilters()} |
30 * indicating that a given filter cannot be parsed, | 29 * indicating that a given filter cannot be parsed, |
31 * contains an invalid CSS selector or is a filter list header. | 30 * contains an invalid CSS selector or is a filter list header. |
32 * | 31 * |
33 * @param {string} type See documentation in the constructor below. | 32 * @param {string} type See documentation in the constructor below. |
34 * @param {Object} [details] Contains the "reason" and / or "selector" | 33 * @param {Object} [details] Contains the "reason" and / or "selector" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
66 | 65 |
67 /** | 66 /** |
68 * Returns a detailed translated error message. | 67 * Returns a detailed translated error message. |
69 * | 68 * |
70 * @return {string} | 69 * @return {string} |
71 */ | 70 */ |
72 toString() | 71 toString() |
73 { | 72 { |
74 let message; | 73 let message; |
75 if (this.reason) | 74 if (this.reason) |
76 message = Utils.getString(this.reason); | 75 message = browser.i18n.getMessage(this.reason); |
77 else | 76 else |
78 { | 77 { |
79 message = browser.i18n.getMessage( | 78 message = browser.i18n.getMessage( |
80 this.type.replace(/-/g, "_"), | 79 this.type.replace(/-/g, "_"), |
81 "selector" in this ? "'" + this.selector + "'" : null | 80 "selector" in this ? "'" + this.selector + "'" : null |
82 ); | 81 ); |
83 } | 82 } |
84 | 83 |
85 if (this.lineno) | 84 if (this.lineno) |
86 { | 85 { |
(...skipping 19 matching lines...) Expand all Loading... | |
106 } | 105 } |
107 catch (e) | 106 catch (e) |
108 { | 107 { |
109 return false; | 108 return false; |
110 } | 109 } |
111 return true; | 110 return true; |
112 } | 111 } |
113 | 112 |
114 function isValidFilterSelector(filter) | 113 function isValidFilterSelector(filter) |
115 { | 114 { |
116 // Only ElemHideBase has selectors | 115 // Only ElemHideBase has selectors. |
kzar
2018/04/05 15:00:27
Perhaps split these up a bit? Something like this
hub
2018/04/05 17:04:41
Done.
| |
117 // We don't check the syntax of ElemHideEmulationFilter yet | 116 if (!(filter instanceof ElemHideBase)) |
118 if (!(filter instanceof ElemHideBase) | |
119 || (filter instanceof ElemHideEmulationFilter)) | |
kzar
2018/04/05 15:00:27
Nit: Parenthesis around the second clause seem red
hub
2018/04/05 17:04:41
Done.
| |
120 return true; | 117 return true; |
kzar
2018/04/05 15:00:27
Nit: I think a newline between these cases would l
hub
2018/04/05 17:04:41
Done.
| |
121 // If it ElemHideException, don't check if it is | 118 |
122 // for an EmulationFilter | 119 // We don't check the syntax of ElemHideEmulationFilter yet. |
123 if ((filter instanceof ElemHideException) && | 120 if (filter instanceof ElemHideEmulationFilter) |
124 (filter.selector.indexOf(":-abp-") != -1)) | |
kzar
2018/04/05 15:00:27
Is this check good enough now that we support :has
hub
2018/04/05 17:04:41
This idea is that like above if we have one of the
kzar
2018/04/06 10:05:44
Acknowledged.
| |
125 return true; | 121 return true; |
122 | |
123 // If it is an ElemHideException, and it has an extended CSS | |
124 // selector we don't validate and assume it is valid. | |
125 if (filter instanceof ElemHideException && | |
126 filter.selector.includes(":-abp-")) | |
127 { | |
128 return true; | |
129 } | |
126 | 130 |
127 return isValidCSSSelector(filter.selector); | 131 return isValidCSSSelector(filter.selector); |
128 } | 132 } |
129 | 133 |
130 /** | 134 /** |
131 * @typedef ParsedFilter | 135 * @typedef ParsedFilter |
132 * @property {?Filter} [filter] | 136 * @property {?Filter} [filter] |
133 * The parsed filter if it is valid. Or null if the given string is empty. | 137 * The parsed filter if it is valid. Or null if the given string is empty. |
134 * @property {FilterParsingError} [error] | 138 * @property {FilterParsingError} [error] |
135 * See {@link module:filterValidation~FilterParsingError FilterParsingError} | 139 * See {@link module:filterValidation~FilterParsingError FilterParsingError} |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
198 | 202 |
199 if (error) | 203 if (error) |
200 { | 204 { |
201 error.lineno = i + 1; | 205 error.lineno = i + 1; |
202 errors.push(error); | 206 errors.push(error); |
203 } | 207 } |
204 } | 208 } |
205 | 209 |
206 return {filters, errors}; | 210 return {filters, errors}; |
207 }; | 211 }; |
LEFT | RIGHT |