43 lines
1.6 KiB
JavaScript
43 lines
1.6 KiB
JavaScript
// 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.')
|