tor-browser

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

async_waituntil_worker.js (1332B)


      1 var keepAlivePromise;
      2 var resolvePromise;
      3 var result = "Failed";
      4 
      5 onactivate = function (event) {
      6  event.waitUntil(clients.claim());
      7 };
      8 
      9 onmessage = function (event) {
     10  if (event.data === "Start") {
     11    event.waitUntil(Promise.reject());
     12 
     13    keepAlivePromise = new Promise(function (resolve, reject) {
     14      resolvePromise = resolve;
     15    });
     16 
     17    result = "Success";
     18    event.waitUntil(keepAlivePromise);
     19    event.source.postMessage("Started");
     20  } else if (event.data === "Result") {
     21    event.source.postMessage(result);
     22    if (resolvePromise !== undefined) {
     23      resolvePromise();
     24    }
     25  }
     26 };
     27 
     28 addEventListener("fetch", e => {
     29  let respondWithPromise = new Promise(function (res, rej) {
     30    setTimeout(() => {
     31      res(new Response("ok"));
     32    }, 0);
     33  });
     34  e.respondWith(respondWithPromise);
     35  // Test that waitUntil can be called in the promise handler of the existing
     36  // lifetime extension promise.
     37  respondWithPromise.then(() => {
     38    e.waitUntil(
     39      clients.matchAll().then(cls => {
     40        dump(`matchAll returned ${cls.length} client(s) with URLs:\n`);
     41        cls.forEach(cl => {
     42          dump(`${cl.url}\n`);
     43        });
     44 
     45        if (cls.length != 1) {
     46          dump("ERROR: no controlled clients.\n");
     47        }
     48        client = cls[0];
     49        client.postMessage("Done");
     50      })
     51    );
     52  });
     53 });