| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 /** | 74 /** |
| 75 * Filter type as a string, e.g. "blocking". | 75 * Filter type as a string, e.g. "blocking". |
| 76 * @type {string} | 76 * @type {string} |
| 77 */ | 77 */ |
| 78 get type() | 78 get type() |
| 79 { | 79 { |
| 80 throw new Error("Please define filter type in the subclass"); | 80 throw new Error("Please define filter type in the subclass"); |
| 81 }, | 81 }, |
| 82 | 82 |
| 83 /** | 83 /** |
| 84 * Whether this object is discarded after use. If <code>false</code>, the |
| 85 * object is retained in memory once created and every call to |
| 86 * {@link Filter#fromText} returns the same instance. Defaults to |
| 87 * <code>false</code>. |
| 88 * @type {boolean} |
| 89 * @package |
| 90 */ |
| 91 ephemeral: false, |
| 92 |
| 93 /** |
| 84 * Subscriptions to which this filter belongs. | 94 * Subscriptions to which this filter belongs. |
| 85 * @type {?(Subscription|Set.<Subscription>)} | 95 * @type {?(Subscription|Set.<Subscription>)} |
| 86 * @private | 96 * @private |
| 87 */ | 97 */ |
| 88 _subscriptions: null, | 98 _subscriptions: null, |
| 89 | 99 |
| 90 /** | 100 /** |
| 91 * Whether the filter's subscriptions have already been added to the filter. | 101 * Whether the filter's subscriptions have already been added to the filter. |
| 92 * @type {boolean} | 102 * @type {boolean} |
| 93 * @package | 103 * @package |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 * Regular expression that matches an invalid Content Security Policy | 231 * Regular expression that matches an invalid Content Security Policy |
| 222 * @type {RegExp} | 232 * @type {RegExp} |
| 223 */ | 233 */ |
| 224 Filter.invalidCSPRegExp = /(;|^) ?(base-uri|referrer|report-to|report-uri|upgrad
e-insecure-requests)\b/i; | 234 Filter.invalidCSPRegExp = /(;|^) ?(base-uri|referrer|report-to|report-uri|upgrad
e-insecure-requests)\b/i; |
| 225 | 235 |
| 226 /** | 236 /** |
| 227 * Creates a filter of correct type from its text representation - does the | 237 * Creates a filter of correct type from its text representation - does the |
| 228 * basic parsing and calls the right constructor then. | 238 * basic parsing and calls the right constructor then. |
| 229 * | 239 * |
| 230 * @param {string} text as in Filter() | 240 * @param {string} text as in Filter() |
| 241 * @param {boolean} persistent Whether the filter object should be persisted in |
| 242 * memory. |
| 231 * @return {Filter} | 243 * @return {Filter} |
| 232 */ | 244 */ |
| 233 Filter.fromText = function(text) | 245 Filter.fromText = function(text, persistent = true) |
| 234 { | 246 { |
| 235 let filter = Filter.knownFilters.get(text); | 247 let filter = Filter.knownFilters.get(text); |
| 236 if (filter) | 248 if (filter) |
| 237 return filter; | 249 return filter; |
| 238 | 250 |
| 239 if (text[0] == "!") | 251 if (text[0] == "!") |
| 240 { | 252 { |
| 241 filter = new CommentFilter(text); | 253 filter = new CommentFilter(text); |
| 242 } | 254 } |
| 243 else | 255 else |
| 244 { | 256 { |
| 245 let match = text.includes("#") ? Filter.contentRegExp.exec(text) : null; | 257 let match = text.includes("#") ? Filter.contentRegExp.exec(text) : null; |
| 246 if (match) | 258 if (match) |
| 247 filter = ContentFilter.fromText(text, match[1], match[2], match[3]); | 259 filter = ContentFilter.fromText(text, match[1], match[2], match[3]); |
| 248 else | 260 else |
| 249 filter = RegExpFilter.fromText(text); | 261 filter = RegExpFilter.fromText(text); |
| 250 } | 262 } |
| 251 | 263 |
| 252 Filter.knownFilters.set(filter.text, filter); | 264 if (persistent) |
| 265 filter.ephemeral = false; |
| 266 |
| 267 if (!filter.ephemeral) |
| 268 Filter.knownFilters.set(filter.text, filter); |
| 269 |
| 253 return filter; | 270 return filter; |
| 254 }; | 271 }; |
| 255 | 272 |
| 256 /** | 273 /** |
| 257 * Deserializes a filter | 274 * Deserializes a filter |
| 258 * | 275 * |
| 259 * @param {Object} obj map of serialized properties and their values | 276 * @param {Object} obj map of serialized properties and their values |
| 260 * @return {Filter} filter or null if the filter couldn't be created | 277 * @return {Filter} filter or null if the filter couldn't be created |
| 261 */ | 278 */ |
| 262 Filter.fromObject = function(obj) | 279 Filter.fromObject = function(obj) |
| (...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1309 * @constructor | 1326 * @constructor |
| 1310 * @augments ElemHideBase | 1327 * @augments ElemHideBase |
| 1311 */ | 1328 */ |
| 1312 function ElemHideFilter(text, domains, selector) | 1329 function ElemHideFilter(text, domains, selector) |
| 1313 { | 1330 { |
| 1314 ElemHideBase.call(this, text, domains, selector); | 1331 ElemHideBase.call(this, text, domains, selector); |
| 1315 } | 1332 } |
| 1316 exports.ElemHideFilter = ElemHideFilter; | 1333 exports.ElemHideFilter = ElemHideFilter; |
| 1317 | 1334 |
| 1318 ElemHideFilter.prototype = extend(ElemHideBase, { | 1335 ElemHideFilter.prototype = extend(ElemHideBase, { |
| 1319 type: "elemhide" | 1336 type: "elemhide", |
| 1337 |
| 1338 /** |
| 1339 * See Filter.ephemeral |
| 1340 * @inheritdoc |
| 1341 */ |
| 1342 ephemeral: true |
| 1320 }); | 1343 }); |
| 1321 | 1344 |
| 1322 /** | 1345 /** |
| 1323 * Class for element hiding exceptions | 1346 * Class for element hiding exceptions |
| 1324 * @param {string} text see {@link Filter Filter()} | 1347 * @param {string} text see {@link Filter Filter()} |
| 1325 * @param {string} [domains] see {@link ElemHideBase ElemHideBase()} | 1348 * @param {string} [domains] see {@link ElemHideBase ElemHideBase()} |
| 1326 * @param {string} selector see {@link ElemHideBase ElemHideBase()} | 1349 * @param {string} selector see {@link ElemHideBase ElemHideBase()} |
| 1327 * @constructor | 1350 * @constructor |
| 1328 * @augments ElemHideBase | 1351 * @augments ElemHideBase |
| 1329 */ | 1352 */ |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1374 | 1397 |
| 1375 /** | 1398 /** |
| 1376 * Script that should be executed | 1399 * Script that should be executed |
| 1377 * @type {string} | 1400 * @type {string} |
| 1378 */ | 1401 */ |
| 1379 get script() | 1402 get script() |
| 1380 { | 1403 { |
| 1381 return this.body; | 1404 return this.body; |
| 1382 } | 1405 } |
| 1383 }); | 1406 }); |
| OLD | NEW |