ignore-opens-during-unload.window.js (2937B)
1 for (const [ev, target] of [ 2 ["beforeunload", iframe => iframe.contentWindow], 3 ["pagehide", iframe => iframe.contentWindow], 4 ["unload", iframe => iframe.contentWindow], 5 ["visibilitychange", iframe => iframe.contentDocument], 6 ]) { 7 async_test(t => { 8 const iframe = document.body.appendChild(document.createElement("iframe")); 9 t.add_cleanup(() => iframe.remove()); 10 iframe.src = "/common/blank.html"; 11 iframe.onload = t.step_func(() => { 12 target(iframe).addEventListener(ev, t.step_func_done(() => { 13 assert_not_equals(iframe.contentDocument.childNodes.length, 0); 14 assert_equals(iframe.contentDocument.open(), iframe.contentDocument); 15 assert_not_equals(iframe.contentDocument.childNodes.length, 0); 16 })); 17 iframe.src = "about:blank"; 18 }); 19 }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (in top-level browsing context)`); 20 21 async_test(t => { 22 const iframe = document.body.appendChild(document.createElement("iframe")); 23 t.add_cleanup(() => iframe.remove()); 24 iframe.src = "/common/blank.html?1"; 25 iframe.onload = t.step_func(() => { 26 const doc = iframe.contentDocument; 27 const innerIframe = doc.body.appendChild(doc.createElement("iframe")); 28 innerIframe.src = "/common/blank.html?2"; 29 innerIframe.onload = t.step_func(() => { 30 // Navigate the parent, listen on the child, and open() the parent. 31 target(innerIframe).addEventListener(ev, t.step_func_done(() => { 32 assert_not_equals(iframe.contentDocument.childNodes.length, 0); 33 iframe.contentDocument.open(); 34 assert_not_equals(iframe.contentDocument.childNodes.length, 0); 35 })); 36 iframe.src = "about:blank"; 37 }); 38 }); 39 }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading parent and child)`); 40 41 async_test(t => { 42 const iframe = document.body.appendChild(document.createElement("iframe")); 43 t.add_cleanup(() => iframe.remove()); 44 iframe.src = "/common/blank.html?1"; 45 iframe.onload = t.step_func(() => { 46 const doc = iframe.contentDocument; 47 const innerIframe = doc.body.appendChild(doc.createElement("iframe")); 48 innerIframe.src = "/common/blank.html?2"; 49 innerIframe.onload = t.step_func(() => { 50 // Navigate the child, listen on the child, and open() the parent. 51 target(innerIframe).addEventListener(ev, t.step_func_done(() => { 52 assert_not_equals(iframe.contentDocument.childNodes.length, 0); 53 iframe.contentDocument.open(); 54 assert_equals(iframe.contentDocument.childNodes.length, 0); 55 })); 56 innerIframe.src = "about:blank"; 57 }); 58 }); 59 }, `document.open should bail out when ignore-opens-during-unload is greater than 0 during ${ev} event (open(parent) while unloading child only)`); 60 }