SharedWorker-extendedLifetime.html (1950B)
1 <!DOCTYPE html> 2 <title>SharedWorker extendedLifetime</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/common/utils.js"></script> 6 <script src="/common/dispatcher/dispatcher.js"></script> 7 <script> 8 9 let request_id = 0; 10 11 const connectToSharedWorker = async () => { 12 await window.pageShowPromise; 13 window.worker = new SharedWorker( 14 '/workers/tentative/resources/shared-worker-memory.js', 15 {extendedLifetime: true}); 16 worker.port.start(); 17 }; 18 19 const postAndWait = async (data) => { 20 return new Promise(resolve => { 21 const listener = event => { 22 if (event.data.reqid !== data.reqid) { 23 return; 24 } 25 worker.port.removeEventListener('message', listener); 26 resolve(event.data); 27 }; 28 worker.port.addEventListener('message', listener); 29 worker.port.postMessage(data); 30 }); 31 }; 32 33 promise_test(async t => { 34 // SharedWorker is started with the extendedLifetime option. 35 // random message is stored there, which can be read later. 36 const uuid = token(); 37 const ctx = new RemoteContext(token()); 38 const popup = window.open(remoteExecutorUrl(ctx.context_id)); 39 await ctx.execute_script(connectToSharedWorker); 40 const popup_response = await ctx.execute_script(postAndWait, [{ 41 reqid: request_id++, 42 op: 'store', 43 data: uuid, 44 }]); 45 assert_equals(popup_response.status, 'OK'); 46 popup.close(); 47 48 // Wait for a second. 49 await new Promise(resolve => setTimeout(resolve, 1)); 50 51 const ctx2 = new RemoteContext(token()); 52 const popup2 = window.open(remoteExecutorUrl(ctx2.context_id)); 53 await ctx2.execute_script(connectToSharedWorker); 54 const popup2_response = await ctx2.execute_script(postAndWait, [{ 55 reqid: request_id++, 56 op: 'load', 57 }]); 58 assert_equals(popup2_response.status, 'OK'); 59 assert_equals(popup2_response.data, uuid); 60 }, "SharedWorker lifetime should be extended with extendedLifetime"); 61 </script>