| 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-2016 Eyeo GmbH | 3  * Copyright (C) 2006-2016 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 363 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 374           stylesheet.addRule(selector, "display: none !important;"); | 374           stylesheet.addRule(selector, "display: none !important;"); | 
| 375         } | 375         } | 
| 376       } | 376       } | 
| 377     ); | 377     ); | 
| 378   }); | 378   }); | 
| 379 | 379 | 
| 380   observer.observe(style.parentNode, {childList: true}); | 380   observer.observe(style.parentNode, {childList: true}); | 
| 381   return observer; | 381   return observer; | 
| 382 } | 382 } | 
| 383 | 383 | 
| 384 function convertSelectorsForShadowDOM(selectors) |  | 
| 385 { |  | 
| 386   var result = []; |  | 
| 387   var prefix = "::content "; |  | 
| 388 |  | 
| 389   for (var i = 0; i < selectors.length; i++) |  | 
| 390   { |  | 
| 391     var selector = selectors[i]; |  | 
| 392     if (selector.indexOf(",") == -1) |  | 
| 393     { |  | 
| 394       result.push(prefix + selector); |  | 
| 395       continue; |  | 
| 396     } |  | 
| 397 |  | 
| 398     var start = 0; |  | 
| 399     var sep = ""; |  | 
| 400     for (var j = 0; j < selector.length; j++) |  | 
| 401     { |  | 
| 402       var chr = selector[j]; |  | 
| 403       if (chr == "\\") |  | 
| 404         j++; |  | 
| 405       else if (chr == sep) |  | 
| 406         sep = ""; |  | 
| 407       else if (sep == "") |  | 
| 408       { |  | 
| 409         if (chr == '"' || chr == "'") |  | 
| 410           sep = chr; |  | 
| 411         else if (chr == ",") |  | 
| 412         { |  | 
| 413           result.push(prefix + selector.substring(start, j)); |  | 
| 414           start = j + 1; |  | 
| 415         } |  | 
| 416       } |  | 
| 417     } |  | 
| 418 |  | 
| 419     result.push(prefix + selector.substring(start)); |  | 
| 420   } |  | 
| 421 |  | 
| 422   return result; |  | 
| 423 } |  | 
| 424 |  | 
| 425 function init(document) | 384 function init(document) | 
| 426 { | 385 { | 
| 427   var shadow = null; | 386   var shadow = null; | 
| 428   var style = null; | 387   var style = null; | 
| 429   var observer = null; | 388   var observer = null; | 
| 430   var tracer = null; | 389   var tracer = null; | 
| 431   var propertyFilters = new CSSPropertyFilters(window, addElemHideSelectors); | 390   var propertyFilters = new CSSPropertyFilters(window, addElemHideSelectors); | 
| 432 | 391 | 
| 433   // Use Shadow DOM if available to don't mess with web pages that rely on | 392   // Use Shadow DOM if available to don't mess with web pages that rely on | 
| 434   // the order of their own <style> tags (#309). | 393   // the order of their own <style> tags (#309). | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 465       if (!style.sheet) | 424       if (!style.sheet) | 
| 466         return; | 425         return; | 
| 467 | 426 | 
| 468       observer = reinjectRulesWhenRemoved(document, style); | 427       observer = reinjectRulesWhenRemoved(document, style); | 
| 469     } | 428     } | 
| 470 | 429 | 
| 471     // If using shadow DOM, we have to add the ::content pseudo-element | 430     // If using shadow DOM, we have to add the ::content pseudo-element | 
| 472     // before each selector, in order to match elements within the | 431     // before each selector, in order to match elements within the | 
| 473     // insertion point. | 432     // insertion point. | 
| 474     if (shadow) | 433     if (shadow) | 
| 475       selectors = convertSelectorsForShadowDOM(selectors); | 434     { | 
|  | 435       var preparedSelectors = []; | 
|  | 436       for (var i = 0; i < selectors.length; i++) | 
|  | 437       { | 
|  | 438         var subSelectors = splitSelector(selectors[i]); | 
|  | 439         for (var j = 0; j < subSelectors.length; j++) | 
|  | 440           preparedSelectors.push("::content " + subSelectors[j]); | 
|  | 441       } | 
|  | 442       selectors = preparedSelectors; | 
|  | 443     } | 
| 476 | 444 | 
| 477     // WebKit (and Blink?) apparently chokes when the selector list in a | 445     // WebKit (and Blink?) apparently chokes when the selector list in a | 
| 478     // CSS rule is huge. So we split the elemhide selectors into groups. | 446     // CSS rule is huge. So we split the elemhide selectors into groups. | 
| 479     while (selectors.length > 0) | 447     while (selectors.length > 0) | 
| 480     { | 448     { | 
| 481       var selector = selectors.splice(0, SELECTOR_GROUP_SIZE).join(", "); | 449       var selector = selectors.splice(0, SELECTOR_GROUP_SIZE).join(", "); | 
| 482       style.sheet.addRule(selector, "display: none !important;"); | 450       style.sheet.addRule(selector, "display: none !important;"); | 
| 483     } | 451     } | 
| 484   }; | 452   }; | 
| 485 | 453 | 
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 569   }, true); | 537   }, true); | 
| 570 | 538 | 
| 571   return updateStylesheet; | 539   return updateStylesheet; | 
| 572 } | 540 } | 
| 573 | 541 | 
| 574 if (document instanceof HTMLDocument) | 542 if (document instanceof HTMLDocument) | 
| 575 { | 543 { | 
| 576   checkSitekey(); | 544   checkSitekey(); | 
| 577   window.updateStylesheet = init(document); | 545   window.updateStylesheet = init(document); | 
| 578 } | 546 } | 
| OLD | NEW | 
|---|