partitioned-cookies-test-helpers.js (795B)
1 // Return a generator containing the worker's message. 2 // 3 // Usage: 4 // await navigator.serviceWorker.register(...) 5 // ... 6 // const nextMessage = worker_message_generator(); 7 // const msg_1 = await nextMessage(); 8 // const msg_2 = await nextMessage(); 9 // const msg_3 = await nextMessage(); 10 // 11 // Worker should have its own onmessage event listener that 12 // postMessages replies to the DOM. 13 function worker_message_generator() { 14 const buffer = []; 15 let resolve = null; 16 17 navigator.serviceWorker.addEventListener('message', message => { 18 buffer.push(message.data); 19 if (resolve) { 20 resolve(); 21 } 22 }); 23 24 return async function () { 25 if (buffer.length != 0) { 26 return buffer.shift(); 27 } 28 await new Promise(r => resolve = r); 29 return buffer.shift(); 30 } 31 }