| <!doctype html> |
| <title>rel=noreferrer and reuse of names</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <script> |
| async_test(function(t) { |
| localStorage.clear() |
| |
| function makeHyperlink(n) { |
| var hyperlink = document.body.appendChild(document.createElement("a")) |
| hyperlink.rel = "noreferrer" |
| hyperlink.target = "sufficientlyrandomwindownameamiright" |
| hyperlink.href = "resources/noreferrer-window-name.html#" + n |
| return hyperlink |
| } |
| |
| var hyperlink1 = makeHyperlink(1), |
| hyperlink2 = makeHyperlink(2) |
| |
| t.add_cleanup(function() { |
| localStorage.setItem("x", "close") |
| localStorage.clear() |
| document.body.removeChild(hyperlink1) |
| document.body.removeChild(hyperlink2) |
| }) |
| |
| addEventListener("storage", function(e) { |
| t.step(function() { |
| if(localStorage.getItem("window1") && localStorage.getItem("window2")) { |
| localStorage.setItem("x", "close") |
| t.done() |
| } |
| }) |
| }) |
| |
| hyperlink1.click() |
| hyperlink2.click() |
| }, "Following a noreferrer link with a named target should not cause creation of a window that can be targeted by another noreferrer link with the same named target"); |
| |
| async_test(function(t) { |
| var ifr = document.createElement("iframe"); |
| ifr.name = "sufficientlyrandomwindownameamiright2"; |
| ifr.onload = t.step_func(function() { |
| var hyperlink = document.body.appendChild(document.createElement("a")); |
| t.add_cleanup(function() { |
| hyperlink.remove(); |
| }); |
| hyperlink.rel = "noreferrer"; |
| hyperlink.href = URL.createObjectURL(new Blob(["hello subframe"], |
| { type: "text/html"})); |
| hyperlink.target = "sufficientlyrandomwindownameamiright2"; |
| ifr.onload = t.step_func_done(function() { |
| assert_equals(ifr.contentDocument.documentElement.textContent, |
| "hello subframe"); |
| }); |
| hyperlink.click(); |
| }); |
| document.body.appendChild(ifr); |
| t.add_cleanup(function() { |
| ifr.remove(); |
| }); |
| }, "Targeting a rel=noreferrer link at an existing named subframe should work"); |
| |
| async_test(function(t) { |
| var win = window.open("", "sufficientlyrandomwindownameamiright3"); |
| t.add_cleanup(function() { |
| win.close(); |
| }); |
| |
| var hyperlink = document.body.appendChild(document.createElement("a")); |
| t.add_cleanup(function() { |
| hyperlink.remove(); |
| }); |
| hyperlink.rel = "noreferrer"; |
| hyperlink.href = URL.createObjectURL(new Blob(["hello window"], |
| { type: "text/html"})); |
| hyperlink.target = "sufficientlyrandomwindownameamiright3"; |
| win.onload = t.step_func_done(function() { |
| assert_equals(win.document.documentElement.textContent, |
| "hello window"); |
| }); |
| hyperlink.click(); |
| }, "Targeting a rel=noreferrer link at an existing named window should work"); |
| </script> |