tor-browser

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

closed-attribute.window.js (2342B)


      1 // META: script=/common/get-host-info.sub.js
      2 
      3 function closedTest(newWindow, closeNewWindowsBrowsingContext) {
      4  assert_equals(newWindow.closed, false);
      5  closeNewWindowsBrowsingContext();
      6  assert_equals(newWindow.closed, true);
      7 }
      8 
      9 test(() => {
     10  const frame = document.body.appendChild(document.createElement("iframe"));
     11  closedTest(frame.contentWindow, () => frame.remove());
     12 }, "closed and same-origin nested browsing context");
     13 
     14 test(() => {
     15  const openee = window.open();
     16  closedTest(openee, () => openee.close());
     17 
     18  // close() is a no-op once "is closing" is set
     19  openee.close();
     20  assert_equals(openee.closed, true);
     21 }, "closed/close() and same-origin auxiliary browsing context");
     22 
     23 const support = new URL("support/closed.html", location.href).pathname;
     24 [
     25  {
     26    type: "cross-origin",
     27    url: `${get_host_info().HTTP_REMOTE_ORIGIN}${support}`
     28  },
     29  {
     30    type: "cross-site",
     31    url: `${get_host_info().HTTP_NOTSAMESITE_ORIGIN}${support}`
     32  }
     33 ].forEach(val => {
     34  async_test(t => {
     35    const frame = document.createElement("iframe"),
     36          ident = `${val.type}-nested-bc`;
     37    frame.src = `${val.url}?window=parent&ident=${ident}`;
     38    const listener = t.step_func(e => {
     39      if (e.data === ident) {
     40        closedTest(frame.contentWindow, () => frame.remove());
     41        self.removeEventListener("message", listener);
     42        t.done();
     43      }
     44    });
     45    // Use a message event rather than onload for consistency with auxiliary browsing contexts.
     46    self.addEventListener("message", listener);
     47    document.body.append(frame);
     48  }, `closed and ${val.type} nested browsing context`);
     49 
     50  async_test(t => {
     51    const ident = `${val.type}-auxiliary-bc`,
     52          support = new URL("support/closed.html", location.href).pathname,
     53          openee = window.open(`${val.url}?window=opener&ident=${ident}`),
     54          listener = t.step_func(e => {
     55      if (e.data === ident) {
     56        closedTest(openee, () => openee.close());
     57 
     58        // close() is a no-op once "is closing" is set
     59        openee.close();
     60        assert_equals(openee.closed, true);
     61 
     62        self.removeEventListener("message", listener);
     63        t.done();
     64      }
     65    });
     66    // As there's no cross-origin onload, use a message event.
     67    self.addEventListener("message", listener);
     68  }, `closed/close() and ${val.type} auxiliary browsing context`);
     69 });