OLD | NEW |
1 function handleString(event) { | 1 function handleString(event) { |
2 event.respondWith(new Response('Test string')); | 2 event.respondWith(new Response('Test string')); |
3 } | 3 } |
4 | 4 |
5 function handleBlob(event) { | 5 function handleBlob(event) { |
6 event.respondWith(new Response(new Blob(['Test blob']))); | 6 event.respondWith(new Response(new Blob(['Test blob']))); |
7 } | 7 } |
8 | 8 |
9 function handleReferrer(event) { | 9 function handleReferrer(event) { |
10 event.respondWith(new Response(new Blob( | 10 event.respondWith(new Response(new Blob( |
11 ['Referrer: ' + event.request.referrer]))); | 11 ['Referrer: ' + event.request.referrer]))); |
12 } | 12 } |
13 | 13 |
14 function handleClientId(event) { | |
15 var body; | |
16 if (event.clientId !== null) { | |
17 body = 'Client ID Found: ' + event.clientId; | |
18 } else { | |
19 body = 'Client ID Not Found'; | |
20 } | |
21 event.respondWith(new Response(body)); | |
22 } | |
23 | |
24 function handleNullBody(event) { | 14 function handleNullBody(event) { |
25 event.respondWith(new Response()); | 15 event.respondWith(new Response()); |
26 } | 16 } |
27 | 17 |
28 function handleFetch(event) { | 18 function handleFetch(event) { |
29 event.respondWith(fetch('other.html')); | 19 event.respondWith(fetch('other.html')); |
30 } | 20 } |
31 | 21 |
32 function handleFormPost(event) { | 22 function handleFormPost(event) { |
33 event.respondWith(new Promise(function(resolve) { | 23 event.respondWith(new Promise(function(resolve) { |
34 event.request.text() | 24 event.request.text() |
35 .then(function(result) { | 25 .then(function(result) { |
36 resolve(new Response(event.request.method + ':' + | 26 resolve(new Response(event.request.method + ':' + result)); |
37 event.request.headers.get('Content-Type') + ':'
+ | |
38 result)); | |
39 }); | 27 }); |
40 })); | 28 })); |
41 } | 29 } |
42 | 30 |
| 31 var logForMultipleRespondWith = ''; |
| 32 |
43 function handleMultipleRespondWith(event) { | 33 function handleMultipleRespondWith(event) { |
44 var logForMultipleRespondWith = ''; | |
45 for (var i = 0; i < 3; ++i) { | 34 for (var i = 0; i < 3; ++i) { |
46 logForMultipleRespondWith += '(' + i + ')'; | 35 logForMultipleRespondWith += '(' + i + ')'; |
47 try { | 36 try { |
48 event.respondWith(new Promise(function(resolve) { | 37 event.respondWith(new Response(logForMultipleRespondWith)); |
49 setTimeout(function() { | |
50 resolve(new Response(logForMultipleRespondWith)); | |
51 }, 0); | |
52 })); | |
53 } catch (e) { | 38 } catch (e) { |
54 logForMultipleRespondWith += '[' + e.name + ']'; | 39 logForMultipleRespondWith += '[' + e.name + ']'; |
55 } | 40 } |
56 } | 41 } |
57 } | 42 } |
58 | 43 |
59 var lastResponseForUsedCheck = undefined; | 44 var lastResponseForUsedCheck = undefined; |
60 | 45 |
61 function handleUsedCheck(event) { | 46 function handleUsedCheck(event) { |
62 if (!lastResponseForUsedCheck) { | 47 if (!lastResponseForUsedCheck) { |
63 event.respondWith(fetch('other.html').then(function(response) { | 48 event.respondWith(fetch('other.html').then(function(response) { |
64 lastResponseForUsedCheck = response; | 49 lastResponseForUsedCheck = response; |
65 return response; | 50 return response; |
66 })); | 51 })); |
67 } else { | 52 } else { |
68 event.respondWith(new Response( | 53 event.respondWith(new Response( |
69 'bodyUsed: ' + lastResponseForUsedCheck.bodyUsed)); | 54 'bodyUsed: ' + lastResponseForUsedCheck.bodyUsed)); |
70 } | 55 } |
71 } | 56 } |
72 | 57 |
73 self.addEventListener('fetch', function(event) { | 58 self.addEventListener('fetch', function(event) { |
74 var url = event.request.url; | 59 var url = event.request.url; |
75 var handlers = [ | 60 var handlers = [ |
76 { pattern: '?string', fn: handleString }, | 61 { pattern: '?string', fn: handleString }, |
77 { pattern: '?blob', fn: handleBlob }, | 62 { pattern: '?blob', fn: handleBlob }, |
78 { pattern: '?referrer', fn: handleReferrer }, | 63 { pattern: '?referrer', fn: handleReferrer }, |
79 { pattern: '?clientId', fn: handleClientId }, | |
80 { pattern: '?ignore', fn: function() {} }, | 64 { pattern: '?ignore', fn: function() {} }, |
81 { pattern: '?null', fn: handleNullBody }, | 65 { pattern: '?null', fn: handleNullBody }, |
82 { pattern: '?fetch', fn: handleFetch }, | 66 { pattern: '?fetch', fn: handleFetch }, |
83 { pattern: '?form-post', fn: handleFormPost }, | 67 { pattern: '?form-post', fn: handleFormPost }, |
84 { pattern: '?multiple-respond-with', fn: handleMultipleRespondWith }, | 68 { pattern: '?multiple-respond-with', fn: handleMultipleRespondWith }, |
85 { pattern: '?used-check', fn: handleUsedCheck } | 69 { pattern: '?used-check', fn: handleUsedCheck } |
86 ]; | 70 ]; |
87 | 71 |
88 var handler = null; | 72 var handler = null; |
89 for (var i = 0; i < handlers.length; ++i) { | 73 for (var i = 0; i < handlers.length; ++i) { |
90 if (url.indexOf(handlers[i].pattern) != -1) { | 74 if (url.indexOf(handlers[i].pattern) != -1) { |
91 handler = handlers[i]; | 75 handler = handlers[i]; |
92 break; | 76 break; |
93 } | 77 } |
94 } | 78 } |
95 | 79 |
96 if (handler) { | 80 if (handler) { |
97 handler.fn(event); | 81 handler.fn(event); |
98 } else { | 82 } else { |
99 event.respondWith(new Response(new Blob( | 83 event.respondWith(new Response(new Blob( |
100 ['Service Worker got an unexpected request: ' + url]))); | 84 ['Service Worker got an unexpected request: ' + url]))); |
101 } | 85 } |
102 }); | 86 }); |
OLD | NEW |