summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js')
-rw-r--r--testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js
new file mode 100644
index 0000000000..43506a22a4
--- /dev/null
+++ b/testing/web-platform/tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js
@@ -0,0 +1,60 @@
+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)`);
+}