tor-browser

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

browser_picker_link.js (3074B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 "use strict";
      5 
      6 /**
      7 * Check that picking a link when using RDM does not trigger a navigation.
      8 * See Bug 1609199.
      9 */
     10 const TEST_URI = `${URL_ROOT}doc_picker_link.html`;
     11 
     12 addRDMTask(TEST_URI, async function ({ ui }) {
     13  info("Open the rule-view and select the test node before opening RDM");
     14  const { inspector, toolbox } = await openRuleView();
     15  await selectNode("body", inspector);
     16 
     17  info("Open RDM");
     18 
     19  // XXX: Using toggleTouchSimulation waits for browser loaded, which is not
     20  // fired here?
     21  info("Toggle Touch simulation");
     22  const { document } = ui.toolWindow;
     23  const touchButton = document.getElementById("touch-simulation-button");
     24  const changed = once(ui, "touch-simulation-changed");
     25  touchButton.click();
     26  await changed;
     27 
     28  info("Waiting for element picker to become active.");
     29  await startPicker(toolbox, ui);
     30 
     31  info("Move mouse over the pick-target");
     32  await hoverElement(inspector, ui, ".picker-link", 15, 15);
     33 
     34  // Add a listener on the "navigate" event.
     35  let hasNavigated = false;
     36  const { onDomCompleteResource } =
     37    await waitForNextTopLevelDomCompleteResource(toolbox.commands);
     38 
     39  onDomCompleteResource.then(() => {
     40    hasNavigated = true;
     41  });
     42 
     43  info("Click and pick the link");
     44  await pickElement(inspector, ui, ".picker-link");
     45 
     46  // Wait until page to start navigation.
     47  await wait(2000);
     48  ok(
     49    !hasNavigated,
     50    "The page should not have navigated when picking the <a> element"
     51  );
     52 });
     53 
     54 /**
     55 * startPicker, hoverElement and pickElement are slightly modified copies of
     56 * inspector's head.js helpers, but using spawnViewportTask to interact with the
     57 * content page (as well as some other slight modifications).
     58 */
     59 
     60 async function startPicker(toolbox, ui) {
     61  info("Start the element picker");
     62  toolbox.win.focus();
     63  await toolbox.nodePicker.start();
     64  // By default make sure the content window is focused since the picker may not focus
     65  // the content window by default.
     66  await spawnViewportTask(ui, {}, async () => {
     67    content.focus();
     68  });
     69 }
     70 
     71 async function hoverElement(inspector, ui, selector, x, y) {
     72  info("Waiting for element " + selector + " to be hovered");
     73  const onHovered = inspector.toolbox.nodePicker.once("picker-node-hovered");
     74  await spawnViewportTask(ui, { selector, x, y }, async options => {
     75    const target = content.document.querySelector(options.selector);
     76    await EventUtils.synthesizeMouse(
     77      target,
     78      options.x,
     79      options.y,
     80      { type: "mousemove", isSynthesized: false },
     81      content
     82    );
     83  });
     84  return onHovered;
     85 }
     86 
     87 async function pickElement(inspector, ui, selector) {
     88  info("Waiting for element " + selector + " to be picked");
     89  const onNewNodeFront = inspector.selection.once("new-node-front");
     90  await spawnViewportTask(ui, { selector }, async options => {
     91    const target = content.document.querySelector(options.selector);
     92    EventUtils.synthesizeClick(target);
     93  });
     94  info("Returning on new-node-front");
     95  return onNewNodeFront;
     96 }