blob: 43506a22a46da53885a2b5a0888095bc52b460ca [file] [log] [blame]
for (const [ev, target] of [
["beforeunload", iframe => iframe.contentWindow],
["pagehide", iframe => iframe.contentWindow],
["unload", iframe => iframe.contentWindow],
["visibilitychange", iframe => iframe.contentDocument],
]) {
async_test(t => {
const iframe = document.body.appendChild(document.createElement("iframe"));
t.add_cleanup(() => iframe.remove());
iframe.src = "/common/blank.html";
iframe.onload = t.step_func(() => {
target(iframe).addEventListener(ev, t.step_func_done(() => {
assert_not_equals(iframe.contentDocument.childNodes.length, 0);
assert_equals(iframe.contentDocument.open(), iframe.contentDocument);
assert_not_equals(iframe.contentDocument.childNodes.length, 0);
}));
iframe.src = "about:blank";
});
}, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (in top-level browsing context)`);
async_test(t => {
const iframe = document.body.appendChild(document.createElement("iframe"));
t.add_cleanup(() => iframe.remove());
iframe.src = "/common/blank.html?1";
iframe.onload = t.step_func(() => {
const doc = iframe.contentDocument;
const innerIframe = doc.body.appendChild(doc.createElement("iframe"));
innerIframe.src = "/common/blank.html?2";
innerIframe.onload = t.step_func(() => {
// Navigate the parent, listen on the child, and open() the parent.
target(innerIframe).addEventListener(ev, t.step_func_done(() => {
assert_not_equals(iframe.contentDocument.childNodes.length, 0);
iframe.contentDocument.open();
assert_not_equals(iframe.contentDocument.childNodes.length, 0);
}));
iframe.src = "about:blank";
});
});
}, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading parent and child)`);
async_test(t => {
const iframe = document.body.appendChild(document.createElement("iframe"));
t.add_cleanup(() => iframe.remove());
iframe.src = "/common/blank.html?1";
iframe.onload = t.step_func(() => {
const doc = iframe.contentDocument;
const innerIframe = doc.body.appendChild(doc.createElement("iframe"));
innerIframe.src = "/common/blank.html?2";
innerIframe.onload = t.step_func(() => {
// Navigate the child, listen on the child, and open() the parent.
target(innerIframe).addEventListener(ev, t.step_func_done(() => {
assert_not_equals(iframe.contentDocument.childNodes.length, 0);
iframe.contentDocument.open();
assert_equals(iframe.contentDocument.childNodes.length, 0);
}));
innerIframe.src = "about:blank";
});
});
}, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading child only)`);
}