document-destroyed.tentative.window.js (1668B)
1 // META: title=Close event test when the document is destroyed. 2 // META: script=/common/dispatcher/dispatcher.js 3 // META: script=/common/get-host-info.sub.js 4 // META: script=/common/utils.js 5 // META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js 6 // META: script=resources/helper.js 7 8 promise_test(async t => { 9 const rc = await addWindow(); 10 const waitForPort = expectMessagePortFromWindow(window); 11 await createMessageChannelAndSendPort(rc); 12 const closeEventPromise = createCloseEventPromise(await waitForPort); 13 rc.navigateToNew(); 14 await closeEventPromise; 15 }, 'The context is navigated to a new document and a close event is fired.') 16 17 promise_test(async t => { 18 const rc = await addWindow(); 19 const waitForPort = expectMessagePortFromWindow(window); 20 await createMessageChannelAndSendPort(rc); 21 const closeEventPromise = createCloseEventPromise(await waitForPort); 22 rc.executeScript(() => window.close()); 23 await closeEventPromise; 24 }, 'The window is closed and a close event is fired.') 25 26 promise_test(async t => { 27 let iframe; 28 const waitForLoad = new Promise(resolve => { 29 iframe = document.createElement('iframe'); 30 iframe.onload = resolve; 31 document.documentElement.appendChild(iframe); 32 }); 33 await waitForLoad; 34 35 const waitForPort = expectMessagePortFromWindow(iframe.contentWindow); 36 const {port1, port2} = new MessageChannel(); 37 port1.start(); 38 iframe.contentWindow.postMessage('', '*', [port2]); 39 await waitForPort; 40 const closeEventPromise = createCloseEventPromise(port1); 41 iframe.remove(); 42 await closeEventPromise; 43 }, 'The iframe is deleted and a close event is fired.')