tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

browser_rules_add-rule-pseudo-class.js (1654B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 // Tests adding a rule with pseudo class locks on.
      7 
      8 const TEST_URI = "<p id='element'>Test element</p>";
      9 
     10 const EXPECTED_SELECTOR = "#element";
     11 const TEST_DATA = [
     12  [],
     13  [":hover"],
     14  [":hover", ":active"],
     15  [":hover", ":active", ":focus"],
     16  [":active"],
     17  [":active", ":focus"],
     18  [":focus"],
     19  [":focus-within"],
     20  [":hover", ":focus-within"],
     21  [":hover", ":active", ":focus-within"],
     22 ];
     23 
     24 add_task(async function () {
     25  await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
     26  const { inspector, view } = await openRuleView();
     27  await selectNode("#element", inspector);
     28 
     29  for (const data of TEST_DATA) {
     30    await runTestData(inspector, view, data);
     31  }
     32 });
     33 
     34 async function runTestData(inspector, view, pseudoClasses) {
     35  await setPseudoLocks(inspector, view, pseudoClasses);
     36 
     37  const expected = EXPECTED_SELECTOR + pseudoClasses.join("");
     38  await addNewRuleAndDismissEditor(inspector, view, expected, 1);
     39 
     40  await resetPseudoLocks(inspector, view);
     41 }
     42 
     43 async function setPseudoLocks(inspector, view, pseudoClasses) {
     44  if (!pseudoClasses.length) {
     45    return;
     46  }
     47 
     48  for (const pseudoClass of pseudoClasses) {
     49    const checkbox = getPseudoClassCheckbox(view, pseudoClass);
     50    if (checkbox) {
     51      checkbox.click();
     52    }
     53    await inspector.once("rule-view-refreshed");
     54  }
     55 }
     56 
     57 async function resetPseudoLocks(inspector, view) {
     58  for (const checkbox of view.pseudoClassCheckboxes) {
     59    if (checkbox.checked) {
     60      checkbox.click();
     61      await inspector.once("rule-view-refreshed");
     62    }
     63  }
     64 }