| // META: title=Close event test when the document is destroyed. |
| // META: script=/common/dispatcher/dispatcher.js |
| // META: script=/common/get-host-info.sub.js |
| // META: script=/common/utils.js |
| // META: script=/html/browsers/browsing-the-web/remote-context-helper/resources/remote-context-helper.js |
| // META: script=resources/helper.js |
| |
| promise_test(async t => { |
| const rc = await addWindow(); |
| const waitForPort = expectMessagePortFromWindow(window); |
| await createMessageChannelAndSendPort(rc); |
| const closeEventPromise = createCloseEventPromise(await waitForPort); |
| rc.navigateToNew(); |
| await closeEventPromise; |
| }, 'The context is navigated to a new document and a close event is fired.') |
| |
| promise_test(async t => { |
| const rc = await addWindow(); |
| const waitForPort = expectMessagePortFromWindow(window); |
| await createMessageChannelAndSendPort(rc); |
| const closeEventPromise = createCloseEventPromise(await waitForPort); |
| rc.executeScript(() => window.close()); |
| await closeEventPromise; |
| }, 'The window is closed and a close event is fired.') |
| |
| promise_test(async t => { |
| let iframe; |
| const waitForLoad = new Promise(resolve => { |
| iframe = document.createElement('iframe'); |
| iframe.onload = resolve; |
| document.documentElement.appendChild(iframe); |
| }); |
| await waitForLoad; |
| |
| const waitForPort = expectMessagePortFromWindow(iframe.contentWindow); |
| const {port1, port2} = new MessageChannel(); |
| port1.start(); |
| iframe.contentWindow.postMessage('', '*', [port2]); |
| await waitForPort; |
| const closeEventPromise = createCloseEventPromise(port1); |
| iframe.remove(); |
| await closeEventPromise; |
| }, 'The iframe is deleted and a close event is fired.') |