tor-browser

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

ignore-opens-during-unload.window.js (2937B)


      1 for (const [ev, target] of [
      2  ["beforeunload", iframe => iframe.contentWindow],
      3  ["pagehide", iframe => iframe.contentWindow],
      4  ["unload", iframe => iframe.contentWindow],
      5  ["visibilitychange", iframe => iframe.contentDocument],
      6 ]) {
      7  async_test(t => {
      8    const iframe = document.body.appendChild(document.createElement("iframe"));
      9    t.add_cleanup(() => iframe.remove());
     10    iframe.src = "/common/blank.html";
     11    iframe.onload = t.step_func(() => {
     12      target(iframe).addEventListener(ev, t.step_func_done(() => {
     13        assert_not_equals(iframe.contentDocument.childNodes.length, 0);
     14        assert_equals(iframe.contentDocument.open(), iframe.contentDocument);
     15        assert_not_equals(iframe.contentDocument.childNodes.length, 0);
     16      }));
     17      iframe.src = "about:blank";
     18    });
     19  }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (in top-level browsing context)`);
     20 
     21  async_test(t => {
     22    const iframe = document.body.appendChild(document.createElement("iframe"));
     23    t.add_cleanup(() => iframe.remove());
     24    iframe.src = "/common/blank.html?1";
     25    iframe.onload = t.step_func(() => {
     26      const doc = iframe.contentDocument;
     27      const innerIframe = doc.body.appendChild(doc.createElement("iframe"));
     28      innerIframe.src = "/common/blank.html?2";
     29      innerIframe.onload = t.step_func(() => {
     30        // Navigate the parent, listen on the child, and open() the parent.
     31        target(innerIframe).addEventListener(ev, t.step_func_done(() => {
     32          assert_not_equals(iframe.contentDocument.childNodes.length, 0);
     33          iframe.contentDocument.open();
     34          assert_not_equals(iframe.contentDocument.childNodes.length, 0);
     35        }));
     36        iframe.src = "about:blank";
     37      });
     38    });
     39  }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading parent and child)`);
     40 
     41  async_test(t => {
     42    const iframe = document.body.appendChild(document.createElement("iframe"));
     43    t.add_cleanup(() => iframe.remove());
     44    iframe.src = "/common/blank.html?1";
     45    iframe.onload = t.step_func(() => {
     46      const doc = iframe.contentDocument;
     47      const innerIframe = doc.body.appendChild(doc.createElement("iframe"));
     48      innerIframe.src = "/common/blank.html?2";
     49      innerIframe.onload = t.step_func(() => {
     50        // Navigate the child, listen on the child, and open() the parent.
     51        target(innerIframe).addEventListener(ev, t.step_func_done(() => {
     52          assert_not_equals(iframe.contentDocument.childNodes.length, 0);
     53          iframe.contentDocument.open();
     54          assert_equals(iframe.contentDocument.childNodes.length, 0);
     55        }));
     56        innerIframe.src = "about:blank";
     57      });
     58    });
     59  }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading child only)`);
     60 }