tor-browser

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

browser_jsterm_helper_dollar_dollar_dollar.js (3348B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 const TEST_URI = `data:text/html,<!DOCTYPE html>
      7  <main>
      8    <div id="1" class="x">1</div>
      9    <div id="2" class="x">
     10      <template shadowrootmode="open">
     11        2
     12        <div id="2-1" class="x">2-1</div>
     13        <div id="2-2" class="x">2-2</div>
     14        <section>
     15          <div id="2-3" class="x">2-3</div>
     16        </section>
     17        <div id="2-4" class="x">
     18          <template shadowrootmode="open">
     19            2-4
     20            <div id="2-4-1" class="x y">2-4-1</div>
     21          </template>
     22        </div>
     23      </template>
     24    </div>
     25    <div id="3">3</div>
     26    <details><summary>spoil</summary>peekaboo</details>
     27  </main>`;
     28 
     29 add_task(async function () {
     30  const hud = await openNewTabAndConsole(TEST_URI);
     31 
     32  // Place the mouse on the top left corner to avoid triggering an highlighter request
     33  // to the server. See Bug 1535082.
     34  EventUtils.synthesizeMouse(
     35    hud.ui.outputNode,
     36    0,
     37    0,
     38    { type: "mousemove" },
     39    hud.iframeWindow
     40  );
     41 
     42  let message = await executeAndWaitForResultMessage(
     43    hud,
     44    "$$$('.x')",
     45    "Array(7) [ div#1.x, div#2.x, div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]"
     46  );
     47  ok(message, "`$$$('.x')` worked");
     48 
     49  message = await executeAndWaitForResultMessage(
     50    hud,
     51    "$$$('.y').at(0).id",
     52    "2-4-1"
     53  );
     54  ok(message, "`$$$` result can be used right away");
     55 
     56  message = await executeAndWaitForResultMessage(
     57    hud,
     58    "$$$('main .x')",
     59    "Array [ div#1.x, div#2.x ]"
     60  );
     61  ok(
     62    message,
     63    "`$$$` doesn't handle descendant selectors across the shadow dom boundaries"
     64  );
     65 
     66  message = await executeAndWaitForResultMessage(
     67    hud,
     68    "$$$('header')",
     69    "Array []"
     70  );
     71  ok(message, "`$$$('header')` returns an empty array");
     72 
     73  message = await executeAndWaitForErrorMessage(
     74    hud,
     75    "$$$(':foo')",
     76    "':foo' is not a valid selector"
     77  );
     78  ok(message, "`$$$(':foo')` returns an error message");
     79 
     80  message = await executeAndWaitForResultMessage(
     81    hud,
     82    "$$$('.x', document.getElementById('2'))",
     83    "Array(5) [ div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]"
     84  );
     85  ok(message, "`$$$('.x', document.getElementById('2'))` worked");
     86 
     87  message = await executeAndWaitForErrorMessage(
     88    hud,
     89    "$$$('li', $(':foo'))",
     90    "':foo' is not a valid selector"
     91  );
     92  ok(message, "`$$$('li', $(':foo'))` returns an error message");
     93 
     94  message = await executeAndWaitForResultMessage(
     95    hud,
     96    `$$$('.x', $('[id="2"]'))`,
     97    "Array(5) [ div#2-1.x, div#2-2.x, div#2-3.x, div#2-4.x, div#2-4-1.x.y ]"
     98  );
     99  ok(message, "`$$$('.x', $('[id=\"2\"]'))` worked");
    100 
    101  message = await executeAndWaitForResultMessage(
    102    hud,
    103    `$$$('.x', document.getElementById("2").shadowRoot.querySelector("section"))`,
    104    "Array [ div#2-3.x ]"
    105  );
    106  ok(message, "works when passed a scope inside the shadow DOM");
    107 
    108  message = await executeAndWaitForResultMessage(
    109    hud,
    110    // The <details> element uses a <slot> element to control its layout. It shouldn't
    111    // be returned, but shouldn't make the helper throw (See Bug 2002814)
    112    `$$$("slot, details, summary")`,
    113    "Array [ details, summary ]"
    114  );
    115  ok(
    116    message,
    117    "works when the selector matches native anonymous node (but don't return them)"
    118  );
    119 });