| 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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   145   let element = createElement(parent); |   145   let element = createElement(parent); | 
|   146   insertStyleRule("#" + element.id + " " + styleBlock); |   146   insertStyleRule("#" + element.id + " " + styleBlock); | 
|   147   return element; |   147   return element; | 
|   148 } |   148 } | 
|   149  |   149  | 
|   150 // Create a new ElemHideEmulation instance with @selectors. |   150 // Create a new ElemHideEmulation instance with @selectors. | 
|   151 async function applyElemHideEmulation(test, selectors) |   151 async function applyElemHideEmulation(test, selectors) | 
|   152 { |   152 { | 
|   153   await Promise.resolve(); |   153   await Promise.resolve(); | 
|   154  |   154  | 
|   155   let elemHideEmulation = null; |  | 
|   156  |  | 
|   157   try |   155   try | 
|   158   { |   156   { | 
|   159     elemHideEmulation = new ElemHideEmulation( |   157     let elemHideEmulation = new ElemHideEmulation( | 
|   160       elems => |   158       elems => | 
|   161       { |   159       { | 
|   162         for (let elem of elems) |   160         for (let elem of elems) | 
|   163           elem.style.display = "none"; |   161           elem.style.display = "none"; | 
|   164       } |   162       } | 
|   165     ); |   163     ); | 
|   166  |   164  | 
|   167     elemHideEmulation.document = testDocument; |   165     elemHideEmulation.document = testDocument; | 
|   168     elemHideEmulation.MIN_INVOCATION_INTERVAL = REFRESH_INTERVAL / 2; |   166     elemHideEmulation.MIN_INVOCATION_INTERVAL = REFRESH_INTERVAL / 2; | 
|   169     elemHideEmulation.apply(selectors.map( |   167     elemHideEmulation.apply(selectors.map( | 
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   483   }; |   481   }; | 
|   484  |   482  | 
|   485   insertStyleRule(".inside {}"); |   483   insertStyleRule(".inside {}"); | 
|   486  |   484  | 
|   487   if (await applyElemHideEmulation(test, [selector])) |   485   if (await applyElemHideEmulation(test, [selector])) | 
|   488     compareExpectations(test, elems, expectations); |   486     compareExpectations(test, elems, expectations); | 
|   489  |   487  | 
|   490   test.done(); |   488   test.done(); | 
|   491 } |   489 } | 
|   492  |   490  | 
|   493 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling = async function(t
      est) |   491 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling = function(test) | 
|   494 { |   492 { | 
|   495   let expectations = { |   493   let expectations = { | 
|   496     parent: true, |   494     parent: true, | 
|   497     middile: true, |   495     middile: true, | 
|   498     inside: true, |   496     inside: true, | 
|   499     sibling: true, |   497     sibling: true, | 
|   500     sibling2: true, |   498     sibling2: true, | 
|   501     toHide: false |   499     toHide: false | 
|   502   }; |   500   }; | 
|   503   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |   501   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 
|   504     test, "div:-abp-has(:-abp-has(div.inside)) + div > div", expectations); |   502     test, "div:-abp-has(:-abp-has(div.inside)) + div > div", expectations); | 
|   505 }; |   503 }; | 
|   506  |   504  | 
|   507 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling2 = async function(
      test) |   505 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling2 = function(test) | 
|   508 { |   506 { | 
|   509   let expectations = { |   507   let expectations = { | 
|   510     parent: true, |   508     parent: true, | 
|   511     middile: true, |   509     middile: true, | 
|   512     inside: true, |   510     inside: true, | 
|   513     sibling: true, |   511     sibling: true, | 
|   514     sibling2: true, |   512     sibling2: true, | 
|   515     toHide: false |   513     toHide: false | 
|   516   }; |   514   }; | 
|   517   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |   515   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 
|   518     test, "div:-abp-has(:-abp-has(> div.inside)) + div > div", expectations); |   516     test, "div:-abp-has(:-abp-has(> div.inside)) + div > div", expectations); | 
|   519 }; |   517 }; | 
|   520  |   518  | 
|   521 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling3 = async function(
      test) |   519 exports.testPseudoClassHasSelectorWithHasAndWithSuffixSibling3 = function(test) | 
|   522 { |   520 { | 
|   523   let expectations = { |   521   let expectations = { | 
|   524     parent: true, |   522     parent: true, | 
|   525     middile: true, |   523     middile: true, | 
|   526     inside: true, |   524     inside: true, | 
|   527     sibling: true, |   525     sibling: true, | 
|   528     sibling2: true, |   526     sibling2: true, | 
|   529     toHide: false |   527     toHide: false | 
|   530   }; |   528   }; | 
|   531   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |   529   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 
|   532     test, "div:-abp-has(> div:-abp-has(div.inside)) + div > div", expectations); |   530     test, "div:-abp-has(> div:-abp-has(div.inside)) + div > div", expectations); | 
|   533 }; |   531 }; | 
|   534  |   532  | 
|   535 exports.testPseudoClassHasSelectorWithSuffixSiblingNoop = async function(test) |   533 exports.testPseudoClassHasSelectorWithSuffixSiblingNoop = function(test) | 
|   536 { |   534 { | 
|   537   let expectations = { |   535   let expectations = { | 
|   538     parent: true, |   536     parent: true, | 
|   539     middile: true, |   537     middile: true, | 
|   540     inside: true, |   538     inside: true, | 
|   541     sibling: true, |   539     sibling: true, | 
|   542     sibling2: true, |   540     sibling2: true, | 
|   543     toHide: true |   541     toHide: true | 
|   544   }; |   542   }; | 
|   545   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |   543   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 
|   546     test, "div:-abp-has(> body div.inside) + div > div", expectations); |   544     test, "div:-abp-has(> body div.inside) + div > div", expectations); | 
|   547 }; |   545 }; | 
|   548  |   546  | 
|   549 exports.testPseudoClassHasSelectorWithSuffixSiblingContains = async function(tes
      t) |   547 exports.testPseudoClassHasSelectorWithSuffixSiblingContains = function(test) | 
|   550 { |   548 { | 
|   551   let expectations = { |   549   let expectations = { | 
|   552     parent: true, |   550     parent: true, | 
|   553     middile: true, |   551     middile: true, | 
|   554     inside: true, |   552     inside: true, | 
|   555     sibling: true, |   553     sibling: true, | 
|   556     sibling2: true, |   554     sibling2: true, | 
|   557     toHide: true |   555     toHide: true | 
|   558   }; |   556   }; | 
|   559   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( |   557   runTestPseudoClassHasSelectorWithHasAndWithSuffixSibling( | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
|   581     sibling2: testDocument.getElementById("sibling2"), |   579     sibling2: testDocument.getElementById("sibling2"), | 
|   582     toHide: testDocument.getElementById("tohide") |   580     toHide: testDocument.getElementById("tohide") | 
|   583   }; |   581   }; | 
|   584  |   582  | 
|   585   if (await applyElemHideEmulation(test, [selector])) |   583   if (await applyElemHideEmulation(test, [selector])) | 
|   586     compareExpectations(test, elems, expectations); |   584     compareExpectations(test, elems, expectations); | 
|   587  |   585  | 
|   588   test.done(); |   586   test.done(); | 
|   589 } |   587 } | 
|   590  |   588  | 
|   591 exports.testPseudoClassContainsText = async function(test) |   589 exports.testPseudoClassContainsText = function(test) | 
|   592 { |   590 { | 
|   593   let expectations = { |   591   let expectations = { | 
|   594     parent: true, |   592     parent: true, | 
|   595     middle: true, |   593     middle: true, | 
|   596     inside: true, |   594     inside: true, | 
|   597     sibling: false, |   595     sibling: false, | 
|   598     sibling2: true, |   596     sibling2: true, | 
|   599     toHide: true |   597     toHide: true | 
|   600   }; |   598   }; | 
|   601   runTestPseudoClassContains( |   599   runTestPseudoClassContains( | 
|   602     test, "#parent div:-abp-contains(to hide)", expectations); |   600     test, "#parent div:-abp-contains(to hide)", expectations); | 
|   603 }; |   601 }; | 
|   604  |   602  | 
|   605 exports.testPseudoClassContainsRegexp = async function(test) |   603 exports.testPseudoClassContainsRegexp = function(test) | 
|   606 { |   604 { | 
|   607   let expectations = { |   605   let expectations = { | 
|   608     parent: true, |   606     parent: true, | 
|   609     middle: true, |   607     middle: true, | 
|   610     inside: true, |   608     inside: true, | 
|   611     sibling: false, |   609     sibling: false, | 
|   612     sibling2: true, |   610     sibling2: true, | 
|   613     toHide: true |   611     toHide: true | 
|   614   }; |   612   }; | 
|   615   runTestPseudoClassContains( |   613   runTestPseudoClassContains( | 
|   616     test, "#parent div:-abp-contains(/to\\shide/)", expectations); |   614     test, "#parent div:-abp-contains(/to\\shide/)", expectations); | 
|   617 }; |   615 }; | 
|   618  |   616  | 
|   619 exports.testPseudoClassContainsRegexpIFlag = async function(test) |   617 exports.testPseudoClassContainsRegexpIFlag = function(test) | 
|   620 { |   618 { | 
|   621   let expectations = { |   619   let expectations = { | 
|   622     parent: true, |   620     parent: true, | 
|   623     middle: true, |   621     middle: true, | 
|   624     inside: true, |   622     inside: true, | 
|   625     sibling: false, |   623     sibling: false, | 
|   626     sibling2: true, |   624     sibling2: true, | 
|   627     toHide: true |   625     toHide: true | 
|   628   }; |   626   }; | 
|   629   runTestPseudoClassContains( |   627   runTestPseudoClassContains( | 
|   630     test, "#parent div:-abp-contains(/to\\sHide/i)", expectations); |   628     test, "#parent div:-abp-contains(/to\\sHide/i)", expectations); | 
|   631 }; |   629 }; | 
|   632  |   630  | 
|   633 exports.testPseudoClassContainsRegexpUFlag = async function(test) |   631 exports.testPseudoClassContainsRegexpUFlag = function(test) | 
|   634 { |   632 { | 
|   635   let expectations = { |   633   let expectations = { | 
|   636     parent: true, |   634     parent: true, | 
|   637     middle: true, |   635     middle: true, | 
|   638     inside: true, |   636     inside: true, | 
|   639     sibling: false, |   637     sibling: false, | 
|   640     sibling2: true, |   638     sibling2: true, | 
|   641     toHide: true |   639     toHide: true | 
|   642   }; |   640   }; | 
|   643   runTestPseudoClassContains( |   641   runTestPseudoClassContains( | 
|   644     test, "#parent div:-abp-contains(/to\\shide\\s.!/u)", expectations); |   642     test, "#parent div:-abp-contains(/to\\shide\\s.!/u)", expectations); | 
|   645 }; |   643 }; | 
|   646  |   644  | 
|   647 exports.testPseudoClassContainsWildcardNoMatch = async function(test) |   645 exports.testPseudoClassContainsWildcardNoMatch = function(test) | 
|   648 { |   646 { | 
|   649   let expectations = { |   647   let expectations = { | 
|   650     parent: true, |   648     parent: true, | 
|   651     middle: true, |   649     middle: true, | 
|   652     inside: true, |   650     inside: true, | 
|   653     sibling: true, |   651     sibling: true, | 
|   654     sibling2: true, |   652     sibling2: true, | 
|   655     toHide: true |   653     toHide: true | 
|   656   }; |   654   }; | 
|   657   // this filter shouldn't match anything as "*" has no meaning. |   655   // this filter shouldn't match anything as "*" has no meaning. | 
|   658   runTestPseudoClassContains( |   656   runTestPseudoClassContains( | 
|   659     test, "#parent div:-abp-contains(to *hide)", expectations); |   657     test, "#parent div:-abp-contains(to *hide)", expectations); | 
|   660 }; |   658 }; | 
|   661  |   659  | 
|   662 exports.testPseudoClassContainsWildcardMatch = async function(test) |   660 exports.testPseudoClassContainsWildcardMatch = function(test) | 
|   663 { |   661 { | 
|   664   let expectations = { |   662   let expectations = { | 
|   665     parent: true, |   663     parent: true, | 
|   666     middle: true, |   664     middle: true, | 
|   667     inside: true, |   665     inside: true, | 
|   668     sibling: true, |   666     sibling: true, | 
|   669     sibling2: false, |   667     sibling2: false, | 
|   670     toHide: true |   668     toHide: true | 
|   671   }; |   669   }; | 
|   672   runTestPseudoClassContains( |   670   runTestPseudoClassContains( | 
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1096     { |  1094     { | 
|  1097       if (element.id == "n2" || element.id == "n2_3") |  1095       if (element.id == "n2" || element.id == "n2_3") | 
|  1098         expectProcessed(test, element, element.id); |  1096         expectProcessed(test, element, element.id); | 
|  1099       else |  1097       else | 
|  1100         expectNotProcessed(test, element, element.id); |  1098         expectNotProcessed(test, element, element.id); | 
|  1101     } |  1099     } | 
|  1102   } |  1100   } | 
|  1103  |  1101  | 
|  1104   test.done(); |  1102   test.done(); | 
|  1105 }; |  1103 }; | 
| LEFT | RIGHT |