static-router-race-network-and-fetch-handler-sw.js (1489B)
1 'use strict'; 2 3 import {routerRules} from './router-rules.js'; 4 import { 5 recordRequest, 6 recordError, 7 getRecords, 8 resetRecords } from './static-router-sw.sub.js'; 9 10 import './imported-sw.js'; 11 12 self.addEventListener('install', async e => { 13 e.waitUntil(caches.open('v1').then( 14 cache => {cache.put('cache.txt', new Response('From cache'))})); 15 16 const params = new URLSearchParams(location.search); 17 const key = params.get('key'); 18 try { 19 await e.addRoutes(routerRules[key]); 20 } catch (e) { 21 recordError(e); 22 } 23 self.skipWaiting(); 24 }); 25 26 self.addEventListener('activate', e => { 27 e.waitUntil(clients.claim()); 28 }); 29 30 self.addEventListener('fetch', async function(event) { 31 try { 32 recordRequest(event.request); 33 const url = new URL(event.request.url); 34 // Force slow response 35 if (url.searchParams.has('sw_slow')) { 36 const start = Date.now(); 37 while (true) { 38 if (Date.now() - start > 200) { 39 break; 40 } 41 } 42 } 43 const nonce = url.searchParams.get('nonce'); 44 event.respondWith(new Response(nonce)); 45 // Call `fetch(e.request)` but it's not consumed. 46 if (url.searchParams.has('call_fetch')) { 47 await fetch(event.request); 48 } 49 } catch (e) { 50 recordError(e) 51 } 52 }); 53 54 self.addEventListener('message', function(event) { 55 if (event.data.reset) { 56 resetRecords(); 57 } 58 if (event.data.port) { 59 const {requests, errors} = getRecords(); 60 event.data.port.postMessage({requests, errors}); 61 } 62 });