tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }