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 });