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