tor-browser

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

browser_targetBlankNoOpener.js (3178B)


      1 const TEST_URL = "http://mochi.test:8888/browser/dom/html/test/empty.html";
      2 
      3 async function checkOpener(browser, elm, name, rel) {
      4  let p = BrowserTestUtils.waitForNewTab(gBrowser, null, true, true);
      5 
      6  await SpecialPowers.spawn(
      7    browser,
      8    [{ url: TEST_URL, name, rel, elm }],
      9    async obj => {
     10      let element;
     11 
     12      if (obj.elm == "anchor") {
     13        element = content.document.createElement("a");
     14        content.document.body.appendChild(element);
     15        element.appendChild(content.document.createTextNode(obj.name));
     16      } else {
     17        let img = content.document.createElement("img");
     18        img.src = "image_yellow.png";
     19        content.document.body.appendChild(img);
     20 
     21        element = content.document.createElement("area");
     22        img.appendChild(element);
     23 
     24        element.setAttribute("shape", "rect");
     25        element.setAttribute("coords", "0,0,100,100");
     26      }
     27 
     28      element.setAttribute("target", "_blank");
     29      element.setAttribute("href", obj.url);
     30 
     31      if (obj.rel) {
     32        element.setAttribute("rel", obj.rel);
     33      }
     34 
     35      element.click();
     36    }
     37  );
     38 
     39  let newTab = await p;
     40  let newBrowser = gBrowser.getBrowserForTab(newTab);
     41 
     42  let hasOpener = await SpecialPowers.spawn(
     43    newTab.linkedBrowser,
     44    [],
     45    _ => !!content.window.opener
     46  );
     47 
     48  BrowserTestUtils.removeTab(newTab);
     49  return hasOpener;
     50 }
     51 
     52 async function runTests(browser, elm) {
     53  info("Creating an " + elm + " with target=_blank rel=opener");
     54  ok(
     55    !!(await checkOpener(browser, elm, "rel=opener", "opener")),
     56    "We want the opener with rel=opener"
     57  );
     58 
     59  info("Creating an " + elm + " with target=_blank rel=noopener");
     60  ok(
     61    !(await checkOpener(browser, elm, "rel=noopener", "noopener")),
     62    "We don't want the opener with rel=noopener"
     63  );
     64 
     65  info("Creating an " + elm + " with target=_blank");
     66  ok(
     67    !(await checkOpener(browser, elm, "no rel", null)),
     68    "We don't want the opener with no rel is passed"
     69  );
     70 
     71  info("Creating an " + elm + " with target=_blank rel='noopener opener'");
     72  ok(
     73    !(await checkOpener(
     74      browser,
     75      elm,
     76      "rel=noopener+opener",
     77      "noopener opener"
     78    )),
     79    "noopener wins with rel=noopener+opener"
     80  );
     81 
     82  info("Creating an " + elm + " with target=_blank rel='noreferrer opener'");
     83  ok(
     84    !(await checkOpener(browser, elm, "noreferrer wins", "noreferrer opener")),
     85    "We don't want the opener with rel=noreferrer+opener"
     86  );
     87 
     88  info("Creating an " + elm + " with target=_blank rel='opener noreferrer'");
     89  ok(
     90    !(await checkOpener(
     91      browser,
     92      elm,
     93      "noreferrer wins again",
     94      "noreferrer opener"
     95    )),
     96    "We don't want the opener with rel=opener+noreferrer"
     97  );
     98 }
     99 
    100 add_task(async _ => {
    101  await SpecialPowers.flushPrefEnv();
    102  await SpecialPowers.pushPrefEnv({
    103    set: [["dom.targetBlankNoOpener.enabled", true]],
    104  });
    105 
    106  let tab = BrowserTestUtils.addTab(gBrowser, TEST_URL);
    107  gBrowser.selectedTab = tab;
    108 
    109  let browser = gBrowser.getBrowserForTab(tab);
    110  await BrowserTestUtils.browserLoaded(browser);
    111 
    112  await runTests(browser, "anchor");
    113  await runTests(browser, "area");
    114 
    115  info("Removing the tab");
    116  BrowserTestUtils.removeTab(tab);
    117 });