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 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
64 if (parts.length == 2 && parts[0] in data) | 64 if (parts.length == 2 && parts[0] in data) |
65 data[parts[0]] = decodeURIComponent(parts[1]); | 65 data[parts[0]] = decodeURIComponent(parts[1]); |
66 } | 66 } |
67 } | 67 } |
68 } | 68 } |
69 | 69 |
70 let params = { | 70 let params = { |
71 blockedURLs: "", | 71 blockedURLs: "", |
72 filterlistsReinitialized: false, | 72 filterlistsReinitialized: false, |
73 addSubscription: false, | 73 addSubscription: false, |
74 filterError: false, | |
75 downloadStatus: "synchronize_ok", | 74 downloadStatus: "synchronize_ok", |
76 showNotificationUI: false, | 75 showNotificationUI: false, |
77 showPageOptions: false | 76 showPageOptions: false |
78 }; | 77 }; |
79 updateFromURL(params); | 78 updateFromURL(params); |
80 | 79 |
81 let modules = {}; | 80 let modules = {}; |
82 window.require = function(module) | 81 window.require = function(module) |
83 { | 82 { |
84 return modules[module]; | 83 return modules[module]; |
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
306 } | 305 } |
307 } | 306 } |
308 } | 307 } |
309 } | 308 } |
310 }; | 309 }; |
311 | 310 |
312 function Filter(text) | 311 function Filter(text) |
313 { | 312 { |
314 this.text = text; | 313 this.text = text; |
315 this.disabled = false; | 314 this.disabled = false; |
316 } | 315 if (Filter.elemhideRegExp.test(text)) |
316 this.selector = RegExp.$3; | |
317 } | |
318 Filter.elemhideRegExp = /^([^/*|@"!]*?)#([@?])?#(.+)$/; | |
317 Filter.fromText = (text) => new Filter(text); | 319 Filter.fromText = (text) => new Filter(text); |
318 | 320 |
319 function BlockingFilter() | 321 function BlockingFilter() |
320 { | 322 { |
321 } | 323 } |
322 | 324 |
323 function RegExpFilter() | 325 function RegExpFilter() |
324 { | 326 { |
325 } | 327 } |
326 RegExpFilter.typeMap = Object.create(null); | 328 RegExpFilter.typeMap = Object.create(null); |
327 | 329 |
328 modules.filterClasses = { | 330 modules.filterClasses = { |
329 BlockingFilter, | 331 BlockingFilter, |
330 Filter, | 332 Filter, |
331 RegExpFilter | 333 RegExpFilter |
332 }; | 334 }; |
333 | 335 |
336 const isValidCSSSelector = selector => | |
337 { | |
338 if (!selector) | |
339 return true; | |
340 try | |
341 { | |
342 document.documentElement.matches(selector); | |
343 return true; | |
344 } | |
345 catch (error) | |
346 { | |
347 return false; | |
348 } | |
349 }; | |
350 | |
334 modules.filterValidation = | 351 modules.filterValidation = |
335 { | 352 { |
353 // to test failing filters | |
354 // use one or more bad CSS selectors | |
355 // or start the line with a [ | |
336 parseFilter(text) | 356 parseFilter(text) |
337 { | 357 { |
338 if (params.filterError) | 358 let filter = null; |
339 return {error: "Invalid filter"}; | 359 if (text) |
340 return {filter: modules.filterClasses.Filter.fromText(text)}; | 360 { |
361 if (text[0] == "[") | |
362 return {error: {reason: "Unexpected filter list header"}}; | |
363 | |
364 filter = modules.filterClasses.Filter.fromText(text); | |
365 | |
366 if (!isValidCSSSelector(filter.selector)) | |
367 { | |
368 return {error: {reason: "Invalid CSS selector"}}; | |
369 } | |
370 } | |
371 | |
372 return {filter}; | |
341 }, | 373 }, |
342 parseFilters(text) | 374 parseFilters(text) |
343 { | 375 { |
344 if (params.filterError) | 376 let lines = text.split("\n"); |
saroyanm
2018/01/29 11:44:48
Suggestion: copy pasting with the slight modificat
a.giammarchi
2018/01/29 17:36:32
not sure I understand this one. What do you mean?
saroyanm
2018/01/30 12:03:44
We will try to use part of filterValidation in ord
| |
345 return {errors: [{reason: "Invalid filter", lineno: 1}]}; | 377 let filters = []; |
346 return { | 378 let errors = []; |
347 filters: text.split("\n") | 379 |
348 .filter((filter) => !!filter) | 380 for (let i = 0; i < lines.length; i++) |
349 .map(modules.filterClasses.Filter.fromText), | 381 { |
350 errors: [] | 382 let {filter, error} = this.parseFilter(lines[i]); |
351 }; | 383 |
384 if (filter) | |
385 filters.push(filter); | |
386 | |
387 if (error) | |
388 { | |
389 error.lineno = i + 1; | |
390 errors.push(error); | |
391 } | |
392 } | |
393 | |
394 return {filters, errors}; | |
352 } | 395 } |
353 }; | 396 }; |
354 | 397 |
355 modules.synchronizer = { | 398 modules.synchronizer = { |
356 Synchronizer: { | 399 Synchronizer: { |
357 _downloading: false, | 400 _downloading: false, |
358 execute(subscription, manual) | 401 execute(subscription, manual) |
359 { | 402 { |
360 modules.synchronizer.Synchronizer._downloading = true; | 403 modules.synchronizer.Synchronizer._downloading = true; |
361 modules.filterNotifier.FilterNotifier.emit( | 404 modules.filterNotifier.FilterNotifier.emit( |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
612 }, | 655 }, |
613 filter: { | 656 filter: { |
614 text: "||example.com/some-annoying-popup$popup", | 657 text: "||example.com/some-annoying-popup$popup", |
615 whitelisted: false, | 658 whitelisted: false, |
616 userDefined: true, | 659 userDefined: true, |
617 subscription: null | 660 subscription: null |
618 } | 661 } |
619 }); | 662 }); |
620 }); | 663 }); |
621 }()); | 664 }()); |
LEFT | RIGHT |