tor-browser

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

clients-get-resultingClientId-worker.js (1841B)


      1 let savedPort = null;
      2 let savedResultingClientId = null;
      3 
      4 async function getTestingPage() {
      5  const clientList = await self.clients.matchAll({ type: 'window', includeUncontrolled: true });
      6  for (let c of clientList) {
      7    if (c.url.endsWith('clients-get.https.html')) {
      8      c.focus();
      9      return c;
     10    }
     11  }
     12  return null;
     13 }
     14 
     15 async function destroyResultingClient(testingPage) {
     16  const destroyedPromise = new Promise(resolve => {
     17    self.addEventListener('message', e => {
     18      if (e.data.msg == 'resultingClientDestroyed') {
     19        resolve();
     20      }
     21    }, {once: true});
     22  });
     23  testingPage.postMessage({ msg: 'destroyResultingClient' });
     24  return destroyedPromise;
     25 }
     26 
     27 self.addEventListener('fetch', async (e) => {
     28  let { resultingClientId } = e;
     29  savedResultingClientId = resultingClientId;
     30 
     31  if (e.request.url.endsWith('simple.html?fail')) {
     32    e.waitUntil((async () => {
     33      const testingPage = await getTestingPage();
     34      await destroyResultingClient(testingPage);
     35      testingPage.postMessage({ msg: 'resultingClientDestroyedAck',
     36                                resultingDestroyedClientId: savedResultingClientId });
     37    })());
     38    return;
     39  }
     40 
     41  e.respondWith(fetch(e.request));
     42 });
     43 
     44 self.addEventListener('message', (e) => {
     45  let { msg, resultingClientId } = e.data;
     46  e.waitUntil((async () => {
     47    if (msg == 'getIsResultingClientUndefined') {
     48      const client = await self.clients.get(resultingClientId);
     49      let isUndefined = typeof client == 'undefined';
     50      e.source.postMessage({ msg: 'getIsResultingClientUndefined',
     51        isResultingClientUndefined: isUndefined });
     52      return;
     53    }
     54    if (msg == 'getResultingClientId') {
     55      e.source.postMessage({ msg: 'getResultingClientId',
     56                             resultingClientId: savedResultingClientId });
     57      return;
     58    }
     59  })());
     60 });