tor-browser

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

helpers.js (2417B)


      1 // This file contains general helpers for navigation/history tests. The goal is
      2 // to make tests more imperative and ordered, instead of requiring lots of
      3 // nested callbacks and jumping back and forth. However,
      4 // html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js
      5 // might be even better at that, so prefer that when you can.
      6 //
      7 // TODO(domenic): consider unifying with
      8 // overlapping-navigations-and-traversals/resources/helpers.mjs.
      9 
     10 window.openWindow = (url, t) => {
     11  const w = window.open(url);
     12  t?.add_cleanup(() => w.close());
     13 
     14  return new Promise(resolve => {
     15    w.addEventListener("load", () => resolve(w), { once: true });
     16  });
     17 };
     18 
     19 window.addIframe = (url = "/common/blank.html", doc = document) => {
     20  const iframe = doc.createElement("iframe");
     21  iframe.src = url;
     22  doc.body.append(iframe);
     23 
     24  return new Promise(resolve => {
     25    iframe.addEventListener("load", () => resolve(iframe), { once: true });
     26  });
     27 };
     28 
     29 window.addSrcdocIframe = async () => {
     30  const iframe = document.createElement("iframe");
     31  iframe.srcdoc = `<script>window.parent.postMessage("srcdoc ready", "*")</scr` + `ipt>`;
     32  document.body.append(iframe);
     33 
     34  assert_equals(await waitForMessage(iframe.contentWindow), "srcdoc ready");
     35 
     36  return iframe;
     37 };
     38 
     39 window.waitToAvoidReplace = t => {
     40  return new Promise(resolve => t.step_timeout(resolve, 0));
     41 };
     42 
     43 window.waitForIframeLoad = iframe => {
     44  return new Promise(resolve => {
     45    iframe.addEventListener("load", () => resolve(), { once: true });
     46  });
     47 };
     48 
     49 window.waitForMessage = expectedSource => {
     50  return new Promise(resolve => {
     51    window.addEventListener("message", ({ source, data }) => {
     52      if (source === expectedSource) {
     53        resolve(data);
     54      }
     55    });
     56  });
     57 };
     58 
     59 window.waitForHashchange = w => {
     60  return new Promise(resolve => {
     61    w.addEventListener("hashchange", () => resolve(), { once: true });
     62  });
     63 };
     64 
     65 window.srcdocThatPostsParentOpener = text => {
     66  return `
     67    <p>${text}</p>
     68    <script>
     69      window.onload = () => {
     70        window.top.opener.postMessage('ready', '*');
     71      };
     72    <\/script>
     73  `;
     74 };
     75 
     76 window.failOnMessage = expectedSource => {
     77  return new Promise((_, reject) => {
     78    window.addEventListener("message", ({ source, data }) => {
     79      if (source === expectedSource) {
     80        reject(new Error(`Received message "${data}" but expected to receive no message`));
     81      }
     82    });
     83  });
     84 };