diff options
Diffstat (limited to '')
-rw-r--r-- | dom/html/test/browser_targetBlankNoOpener.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/dom/html/test/browser_targetBlankNoOpener.js b/dom/html/test/browser_targetBlankNoOpener.js new file mode 100644 index 0000000000..1647df0be2 --- /dev/null +++ b/dom/html/test/browser_targetBlankNoOpener.js @@ -0,0 +1,121 @@ +const TEST_URL = "http://mochi.test:8888/browser/dom/html/test/empty.html"; + +async function checkOpener(browser, elm, name, rel) { + let p = BrowserTestUtils.waitForNewTab(gBrowser, null, true, true); + + await SpecialPowers.spawn( + browser, + [{ url: TEST_URL, name, rel, elm }], + async obj => { + let element; + + if (obj.elm == "anchor") { + element = content.document.createElement("a"); + content.document.body.appendChild(element); + element.appendChild(content.document.createTextNode(obj.name)); + } else { + let img = content.document.createElement("img"); + img.src = "image_yellow.png"; + content.document.body.appendChild(img); + + element = content.document.createElement("area"); + img.appendChild(element); + + element.setAttribute("shape", "rect"); + element.setAttribute("coords", "0,0,100,100"); + } + + element.setAttribute("target", "_blank"); + element.setAttribute("href", obj.url); + + if (obj.rel) { + element.setAttribute("rel", obj.rel); + } + + element.click(); + } + ); + + let newTab = await p; + let newBrowser = gBrowser.getBrowserForTab(newTab); + + let hasOpener = await SpecialPowers.spawn( + newTab.linkedBrowser, + [], + _ => !!content.window.opener + ); + + BrowserTestUtils.removeTab(newTab); + return hasOpener; +} + +async function runTests(browser, elm) { + info("Creating an " + elm + " with target=_blank rel=opener"); + ok( + !!(await checkOpener(browser, elm, "rel=opener", "opener")), + "We want the opener with rel=opener" + ); + + info("Creating an " + elm + " with target=_blank rel=noopener"); + ok( + !(await checkOpener(browser, elm, "rel=noopener", "noopener")), + "We don't want the opener with rel=noopener" + ); + + info("Creating an " + elm + " with target=_blank"); + ok( + !(await checkOpener(browser, elm, "no rel", null)), + "We don't want the opener with no rel is passed" + ); + + info("Creating an " + elm + " with target=_blank rel='noopener opener'"); + ok( + !(await checkOpener( + browser, + elm, + "rel=noopener+opener", + "noopener opener" + )), + "noopener wins with rel=noopener+opener" + ); + + info("Creating an " + elm + " with target=_blank rel='noreferrer opener'"); + ok( + !(await checkOpener(browser, elm, "noreferrer wins", "noreferrer opener")), + "We don't want the opener with rel=noreferrer+opener" + ); + + info("Creating an " + elm + " with target=_blank rel='opener noreferrer'"); + ok( + !(await checkOpener( + browser, + elm, + "noreferrer wins again", + "noreferrer opener" + )), + "We don't want the opener with rel=opener+noreferrer" + ); +} + +add_task(async _ => { + await SpecialPowers.flushPrefEnv(); + await SpecialPowers.pushPrefEnv({ + set: [ + ["dom.block_multiple_popups", false], + ["dom.disable_open_during_load", true], + ["dom.targetBlankNoOpener.enabled", true], + ], + }); + + let tab = BrowserTestUtils.addTab(gBrowser, TEST_URL); + gBrowser.selectedTab = tab; + + let browser = gBrowser.getBrowserForTab(tab); + await BrowserTestUtils.browserLoaded(browser); + + await runTests(browser, "anchor"); + await runTests(browser, "area"); + + info("Removing the tab"); + BrowserTestUtils.removeTab(tab); +}); |