tor-browser

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

bug1675097-sw.js (1005B)


      1 // We use promises because the message and fetch events do not have a guaranteed
      2 // order, since they come from different task sources.
      3 var resolvePortPromise;
      4 var portPromise = new Promise(resolve => resolvePortPromise = resolve);
      5 var resolveResolveResponsePromise;
      6 var resolveResponsePromise = new Promise(resolve => resolveResolveResponsePromise = resolve);
      7 
      8 self.addEventListener('fetch', event => {
      9    if (event.request.url.indexOf('inner') !== -1) {
     10        event.respondWith(new Promise(resolve => {
     11            resolveResolveResponsePromise(resolve);
     12        }));
     13        portPromise.then(port => port.postMessage('intercepted'));
     14    }
     15 });
     16 
     17 self.addEventListener('message', event => {
     18    if (event.data.type === 'register') {
     19        resolvePortPromise(event.data.port);
     20    }
     21    else if (event.data.type === 'ack') {
     22        self.clients.matchAll()
     23            .then(() => resolveResponsePromise)
     24            .then(resolveResponse => resolveResponse(new Response('inner iframe')));
     25    }
     26 });