garbage-collected.tentative.any.js (865B)
1 // META: title=Close event test when an entangled port is GCed. 2 // META: script=/common/gc.js 3 4 /** 5 * Create a new MessageChannel and return port1 and a weak reference to port2. 6 * It is expected that port2 will be garbage collected and a close event 7 * will be fired on port1. 8 * 9 * @returns {Array.<[MessagePort, WeakRef<MessagePort>]>} 10 */ 11 function createMessageChannelAndWeakReferToPort() { 12 const {port1, port2} = new MessageChannel(); 13 port1.start(); 14 return [port1, new WeakRef(port2)]; 15 } 16 17 promise_test(async t => { 18 const [port1, weakport2] = createMessageChannelAndWeakReferToPort(); 19 const closeEventPromise = new Promise(resolve => port1.onclose = resolve); 20 garbageCollect(); 21 await closeEventPromise; 22 assert_equals(weakport2.deref(), undefined, 'port2 should be GCed'); 23 }, 'Entangled port is garbage collected, and the close event is fired.')