forked from mykmelez/gecko
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bug 1503681 - rel=noopener implicit for target=_blank in anchor and a…
…rea elements when no rel attribute is set, r=nika In case anchor and area elements have target=_blank and no rel=opener/noopener, this patch makes so that rel=noopener is implied. This feature is behind pref 'dom_targetBlankNoOpener_enabled'. See: whatwg/html#4078
- Loading branch information
Showing
6 changed files
with
128 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
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 ContentTask.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 ContentTask.spawn(newTab.linkedBrowser, null, _ => !!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); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<html><body></body></html> |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters