blob: d30b2bab73d303fe8cbcea2253ef3108e2ab01b2 [file] [log] [blame]
<!DOCTYPE html>
<html>
<body>
<b>This test passes if it does not alert the fail.html's content when clicking the button.</b><br>
<input id="testButton" type="button" value="Click me"></input>
<script>
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.setCanOpenWindows();
testRunner.waitUntilDone();
}
let counter = 0;
function run() {
if (++counter == 2) {
parent_frame = frame.contentDocument.querySelector("iframe");
frame1 = parent_frame.appendChild(document.createElement("iframe"));
frame2 = parent_frame.appendChild(document.createElement("iframe"));
frame1.src = "javascript:top.runChild()";
}
}
let child_counter = 0;
function runChild() {
if (++child_counter == 2) {
parent_frame.appendChild(frame2);
a = frame2.contentDocument.createElement("a");
a.href = cache_frame.src;
a.click();
showModalDialog(URL.createObjectURL(new Blob([`
<script>
let intervalID = setInterval(() => {
try {
opener.frame.document.foo;
} catch (e) {
clearInterval(intervalID);
window.close();
if (window.testRunner)
testRunner.abortModal();
}
}, 100);
</scr` + "ipt>"], {type: "text/html"})));
frame2.src = "javascript:alert(document.documentElement.outerHTML)";
}
}
testButton.onclick = _ => {
frame = document.body.appendChild(document.createElement("iframe"));
frame.contentWindow.location = `javascript:'<b><p><iframe`
+ ` src="javascript:top.run()"></iframe></b></p>'`;
setTimeout(() => {
setTimeout(() => {
if (window.testRunner)
testRunner.notifyDone();
}, 0);
}, 0);
}
cache_frame = document.body.appendChild(document.createElement("iframe"));
cache_frame.src = "http://localhost:8000/security/resources/fail.html";
cache_frame.style.display = "none";
onload = function() {
if (!window.internals)
return;
internals.withUserGesture(() => {
testButton.click();
});
}
</script>
</body>
</html>