["a", "area"].forEach(type => { const followed = type === "a" ? true : false; async_test(t => { const target = document.createElement("iframe"), link = document.createElement(type); t.add_cleanup(() => target.remove()); target.name = "certifiedrandom" + type; link.target = "certifiedrandom" + type; link.href = "/"; document.body.appendChild(target); target.onload = t.step_func(() => { if(target.contentWindow.location.href === "about:blank") return; if(followed) { assert_equals(target.contentWindow.location.pathname, "/"); t.done(); } else { assert_unreached(); } }); link.click(); t.step_timeout(() => { if(followed) { assert_unreached(); } else { t.done(); } }, 500); }, "<" + type + "> that is not connected should " + (followed ? "" : "not ") + "be followed"); async_test(t => { const target = document.createElement("iframe"), doc = document.implementation.createDocument("", ""), link = doc.createElementNS("http://www.w3.org/1999/xhtml", type); t.add_cleanup(() => target.remove()); target.name = "certifiedrandom2" + type; link.target = "certifiedrandom2" + type; link.href = "/"; document.body.appendChild(target); target.onload = t.step_func(() => { if(target.contentWindow.location.href === "about:blank") return; assert_unreached(); }); link.click(); t.step_timeout(() => t.done(), 500); }, "<" + type + "> that is from an inactive document should not be followed"); });