OLD | NEW |
---|---|
(Empty) | |
1 var port = undefined; | |
2 var isTestTargetFetch = false; | |
3 | |
4 self.onmessage = function(e) { | |
5 var message = e.data; | |
falken
2014/07/25 05:41:29
this should just be 2 space indent, as it's not an
horo
2014/07/25 06:00:56
Done.
| |
6 if ('port' in message) { | |
7 port = message.port; | |
8 } else if (message.msg === 'START TEST CASE') { | |
9 isTestTargetFetch = true; | |
10 port.postMessage({msg: 'READY'}); | |
11 } | |
12 }; | |
13 | |
14 function getQueryParams(url) { | |
15 var search = (new URL(url)).search; | |
16 if (!search) { | |
17 return {}; | |
18 } | |
19 var ret = {}; | |
20 var params = search.substring(1).split('&'); | |
21 params.forEach(function(param) { | |
22 var element = param.split('='); | |
23 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); | |
24 }); | |
25 return ret; | |
26 } | |
27 | |
28 function getRequestInit(params) { | |
29 var init = {}; | |
30 if (params['method']) { | |
31 init['method'] = params['method']; | |
32 } | |
33 if (params['mode']) { | |
34 init['mode'] = params['mode']; | |
35 } | |
36 if (params['credentials']) { | |
37 init['credentials'] = params['credentials']; | |
38 } | |
39 if (params['headers'] === 'CUSTOM') { | |
40 init['headers'] = {"X-ServiceWorker-Test": "test"}; | |
41 } else if (params['headers'] === '{}') { | |
42 init['headers'] = {}; | |
43 } | |
44 return init; | |
45 } | |
46 | |
47 function headersToArray(headers) { | |
48 var ret = []; | |
49 headers.forEach(function(value, key) { | |
50 ret.push([key, value]); | |
51 }); | |
52 return ret; | |
53 } | |
54 | |
55 self.addEventListener('fetch', function(event) { | |
56 var originalURL = event.request.url; | |
57 if (!isTestTargetFetch) { | |
58 // Don't handle the event when it is not the test target fetch such as a | |
59 // redirected fetch or for the iframe html. | |
60 return; | |
61 } | |
62 isTestTargetFetch = false; | |
63 var params = getQueryParams(originalURL); | |
64 var init = getRequestInit(params); | |
falken
2014/07/25 05:41:29
nit: space after =
horo
2014/07/25 06:00:56
Done.
| |
65 var url = params['url']; | |
66 if (params['ignore']) { | |
67 port.postMessage({fetchResult: 'ignored'}); | |
68 return; | |
69 } | |
70 event.respondWith(new Promise(function(resolve, reject) { | |
71 try { | |
72 var request = event.request; | |
73 if (url) { | |
74 request = new Request(url, init); | |
75 } else if (!params['noChange']) { | |
76 request = new Request(request, init); | |
77 } | |
78 fetch(request) | |
79 .then(function(res) { | |
falken
2014/07/25 05:41:29
.then should be indented 2
horo
2014/07/25 06:00:56
Done.
| |
80 // Send the result to fetch-access-control.html. | |
81 port.postMessage({fetchResult: 'resolved', | |
82 hasBody: !!res.body, | |
83 headers: headersToArray(res.headers), | |
84 type: res.type, | |
85 originalURL: originalURL}); | |
86 resolve(res); | |
87 }) | |
88 .catch(function(e) { | |
89 // Send the result to fetch-access-control.html. | |
90 port.postMessage({fetchResult: 'rejected'}); | |
91 reject(); | |
92 }); | |
93 } catch (e) { | |
94 // Send the result to fetch-access-control.html. | |
95 port.postMessage({fetchResult: 'error'}); | |
96 reject(); | |
97 } | |
98 })); | |
99 }); | |
OLD | NEW |