tor-browser

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

browser_inspector_iframe-navigation.js (1724B)


      1 /* Any copyright is dedicated to the Public Domain.
      2   http://creativecommons.org/publicdomain/zero/1.0/ */
      3 "use strict";
      4 
      5 // Test that the highlighter element picker still works through iframe
      6 // navigations.
      7 
      8 const TEST_URI =
      9  "data:text/html;charset=utf-8," +
     10  "<p>bug 699308 - test iframe navigation</p>" +
     11  "<iframe src='data:text/html;charset=utf-8,hello world'></iframe>";
     12 
     13 add_task(async function () {
     14  const { inspector, toolbox, highlighterTestFront } =
     15    await openInspectorForURL(TEST_URI);
     16 
     17  info("Starting element picker.");
     18  await startPicker(toolbox);
     19 
     20  info("Mouse over for body element.");
     21  await hoverElement(inspector, "body");
     22 
     23  let isVisible = await highlighterTestFront.isHighlighting();
     24  ok(isVisible, "Inspector is highlighting.");
     25 
     26  await reloadIframe(inspector);
     27  info("Frame reloaded. Reloading again.");
     28 
     29  await reloadIframe(inspector);
     30  info("Frame reloaded twice.");
     31 
     32  isVisible = await highlighterTestFront.isHighlighting();
     33  ok(isVisible, "Inspector is highlighting after iframe nav.");
     34 
     35  info("Stopping element picker.");
     36  await toolbox.nodePicker.stop({ canceled: true });
     37 });
     38 
     39 async function reloadIframe(inspector) {
     40  const { resourceCommand } = inspector.commands;
     41 
     42  const { onResource: onNewRoot } = await resourceCommand.waitForNextResource(
     43    resourceCommand.TYPES.ROOT_NODE,
     44    {
     45      ignoreExistingResources: true,
     46    }
     47  );
     48 
     49  await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async () => {
     50    const iframeEl = content.document.querySelector("iframe");
     51    await new Promise(resolve => {
     52      iframeEl.addEventListener("load", () => resolve(), { once: true });
     53      iframeEl.contentWindow.location.reload();
     54    });
     55  });
     56 
     57  await onNewRoot;
     58 }