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 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
475 } | 475 } |
476 | 476 |
477 function CSSSelectorManager(root) | 477 function CSSSelectorManager(root) |
478 { | 478 { |
479 this._root = root; | 479 this._root = root; |
480 | 480 |
481 this.selectors = []; | 481 this.selectors = []; |
482 this.filters = []; | 482 this.filters = []; |
483 | 483 |
484 this._lookup = new Set(); | 484 this._lookup = new Set(); |
485 | |
486 this._extended = false; | |
485 } | 487 } |
486 | 488 |
487 CSSSelectorManager.prototype = { | 489 CSSSelectorManager.prototype = { |
488 add(selectors, filters) | 490 add(selectors, filters) |
489 { | 491 { |
490 for (let i = 0; i < selectors.length; i++) | 492 for (let i = 0; i < selectors.length; i++) |
491 { | 493 { |
492 this.selectors.push(selectors[i]); | 494 this.selectors.push(selectors[i]); |
493 this.filters.push(filters[i]); | 495 this.filters.push(filters[i]); |
494 | 496 |
495 this._lookup.add(selectors[i]); | 497 this._lookup.add(selectors[i]); |
498 | |
499 if (!this._extended && selectors[i].startsWith(":root > ")) | |
500 this._extended = true; | |
496 } | 501 } |
497 }, | 502 }, |
498 | 503 |
499 has(selector) | 504 has(selector) |
500 { | 505 { |
501 return this._lookup.has(selector); | 506 return this._lookup.has(selector); |
502 }, | 507 }, |
503 | 508 |
504 setAt(index, selector) | 509 setAt(index, selector) |
505 { | 510 { |
506 this._lookup.delete(this.selectors[index]); | 511 this._lookup.delete(this.selectors[index]); |
507 this._lookup.add(selector); | 512 this._lookup.add(selector); |
508 | 513 |
509 this.selectors[index] = selector; | 514 this.selectors[index] = selector; |
510 }, | 515 }, |
511 | 516 |
512 deleteAt(index) | 517 deleteAt(index) |
513 { | 518 { |
514 this._lookup.delete(this.selectors[index]); | 519 this._lookup.delete(this.selectors[index]); |
515 | 520 |
516 this.selectors.splice(index, 1); | 521 this.selectors.splice(index, 1); |
517 this.filters.splice(index, 1); | 522 this.filters.splice(index, 1); |
518 }, | 523 }, |
519 | 524 |
520 update(mutations) | 525 update(mutations) |
521 { | 526 { |
527 // If there are no extended CSS selectors (i.e. :-abp-*), there's nothing | |
528 // to update. | |
529 if (!this._extended || this.selectors.length == 0) | |
Manish Jethani
2018/03/21 15:35:26
This is useful. In EasyList the number of sites wi
| |
530 return false; | |
531 | |
522 let changed = false; | 532 let changed = false; |
523 | 533 |
524 for (let mutation of mutations) | 534 for (let mutation of mutations) |
525 { | 535 { |
526 if (this._updateForMutation(mutation)) | 536 if (this._updateForMutation(mutation)) |
527 changed = true; | 537 changed = true; |
528 } | 538 } |
529 | 539 |
530 return changed; | 540 return changed; |
531 }, | 541 }, |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
933 onLoad(event) | 943 onLoad(event) |
934 { | 944 { |
935 let stylesheet = event.target.sheet; | 945 let stylesheet = event.target.sheet; |
936 if (stylesheet) | 946 if (stylesheet) |
937 this.queueFiltering([stylesheet]); | 947 this.queueFiltering([stylesheet]); |
938 }, | 948 }, |
939 | 949 |
940 observe(mutations) | 950 observe(mutations) |
941 { | 951 { |
942 if (this.css.update(mutations)) | 952 if (this.css.update(mutations)) |
943 this.addSelectorsFunc(this.css.selectors, this.css.filters); | 953 this.addSelectorsFunc(this.css.selectors, this.css.filters); |
hub
2018/03/23 15:54:25
My concern here is that the intent of queueFilteri
Manish Jethani
2018/03/23 16:55:33
The thing is that I'm trying to avoid running full
| |
944 | 954 |
945 this.queueFiltering(null, mutations); | 955 this.queueFiltering(null, mutations); |
946 }, | 956 }, |
947 | 957 |
948 apply(patterns) | 958 apply(patterns) |
949 { | 959 { |
950 this.patterns = []; | 960 this.patterns = []; |
951 for (let pattern of patterns) | 961 for (let pattern of patterns) |
952 { | 962 { |
953 let selectors = this.parseSelector(pattern.selector); | 963 let selectors = this.parseSelector(pattern.selector); |
(...skipping 12 matching lines...) Expand all Loading... | |
966 characterData: shouldObserveCharacterData(this.patterns), | 976 characterData: shouldObserveCharacterData(this.patterns), |
967 subtree: true | 977 subtree: true |
968 } | 978 } |
969 ); | 979 ); |
970 this.document.addEventListener("load", this.onLoad.bind(this), true); | 980 this.document.addEventListener("load", this.onLoad.bind(this), true); |
971 } | 981 } |
972 } | 982 } |
973 }; | 983 }; |
974 | 984 |
975 exports.ElemHideEmulation = ElemHideEmulation; | 985 exports.ElemHideEmulation = ElemHideEmulation; |
LEFT | RIGHT |