OLD | NEW |
| (Empty) |
1 // TODO(horo): Service worker can be killed at some point during the test. So we | |
2 // should use storage API instead of this global variable. | |
3 var urls = []; | |
4 | |
5 self.addEventListener('message', function(event) { | |
6 event.data.port.postMessage({urls: urls}); | |
7 urls = []; | |
8 }); | |
9 | |
10 function get_query_params(url) { | |
11 var search = (new URL(url)).search; | |
12 if (!search) { | |
13 return {}; | |
14 } | |
15 var ret = {}; | |
16 var params = search.substring(1).split('&'); | |
17 params.forEach(function(param) { | |
18 var element = param.split('='); | |
19 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); | |
20 }); | |
21 return ret; | |
22 } | |
23 | |
24 self.addEventListener('fetch', function(event) { | |
25 urls.push(event.request.url) | |
26 var params = get_query_params(event.request.url); | |
27 if (params['sw'] == 'gen') { | |
28 event.respondWith(Response.redirect(params['url'])); | |
29 } else if (params['sw'] == 'fetch') { | |
30 event.respondWith(fetch(event.request)); | |
31 } else if (params['sw'] == 'opaque') { | |
32 event.respondWith(fetch( | |
33 new Request(event.request.url, {redirect: 'manual'}))); | |
34 } else if (params['sw'] == 'opaqueThroughCache') { | |
35 var url = event.request.url; | |
36 var cache; | |
37 event.respondWith( | |
38 self.caches.delete(url) | |
39 .then(function() { return self.caches.open(url); }) | |
40 .then(function(c) { | |
41 cache = c; | |
42 return fetch(new Request(url, {redirect: 'manual'})); | |
43 }) | |
44 .then(function(res) { return cache.put(event.request, res); }) | |
45 .then(function() { return cache.match(url); })); | |
46 } | |
47 }); | |
OLD | NEW |