explicitly-closed.tentative.window.js (1800B)
1 // META: title=Close event test when an entangled port is explicitly closed. 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 async_test(t => { 9 const channel = new MessageChannel(); 10 channel.port1.start(); 11 channel.port2.start(); 12 channel.port2.onclose = t.step_func_done(); 13 channel.port1.close(); 14 }, 'Close event on port2 is fired when port1 is explicitly closed'); 15 16 async_test(t => { 17 const channel = new MessageChannel(); 18 channel.port1.start(); 19 channel.port2.start(); 20 channel.port1.onclose = 21 t.unreached_func('Should not fire a close event on port1'); 22 channel.port1.close(); 23 t.step_timeout(t.step_func_done(), 1000); 24 }, 'Close event on port1 is not fired when port1 is explicitly closed'); 25 26 promise_test(async t => { 27 const rc = await addWindow(); 28 const waitForPort = expectMessagePortFromWindow(window); 29 await createMessageChannelAndSendPort(rc); 30 const closeEventPromise = createCloseEventPromise(await waitForPort); 31 rc.executeScript(() => { 32 window.closePort(); 33 }); 34 await closeEventPromise; 35 }, 'Close event on port2 is fired when port1, which is in a different window, is explicitly closed.') 36 37 promise_test(async t => { 38 const rc = await addWindow(); 39 const waitForPort = expectMessagePortFromWindowWithoutStartingIt(window); 40 await createMessageChannelAndSendPortFollowedByClose(rc); 41 const port = await waitForPort; 42 const closeEventPromise = createCloseEventPromise(port); 43 port.start(); 44 await closeEventPromise; 45 }, 'Close event on port2 is fired when port1, in a different window, is closed during the transfer of port2.')