| 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 |