OLD | NEW |
---|---|
(Empty) | |
1 self.onmessage = function(e) { | |
2 var message = e.data; | |
3 if ('port' in message) { | |
4 port = message.port; | |
yhirano
2014/07/23 05:17:13
Please declare |port|.
horo
2014/07/23 09:05:52
Done.
| |
5 } | |
6 }; | |
7 | |
8 var baseFrameHtml = | |
9 '<script>' + | |
10 'function onMessage(event) {' + | |
11 ' var script = document.createElement(\'script\');' + | |
12 ' script.src = event.data.url;' + | |
13 ' script.addEventListener(' + | |
14 ' \'error\',' + | |
15 ' function() {report({jsonpResult:\'error\'})});' + | |
16 ' document.body.appendChild(script);' + | |
17 '}' + | |
18 'function report(data) {' + | |
19 ' window.parent.postMessage(' + | |
20 ' data,' + | |
21 ' \'http://127.0.0.1:8000/serviceworker/fetch-access-control.html\');' + | |
22 '}' + | |
23 'function onload() {' + | |
24 ' window.addEventListener(\'message\', onMessage, false);' + | |
25 '}' + | |
26 'window.addEventListener(\'load\', onload);' + | |
27 '</script>'; | |
28 | |
29 function handleFrame(event) { | |
30 event.respondWith(new Response(new Blob([baseFrameHtml]))); | |
31 } | |
32 | |
33 function getQueryParams(url) { | |
34 var search = (new URL(url)).search; | |
35 if (!search) { | |
36 return {}; | |
37 } | |
38 var ret = {}; | |
39 var params = search.substring(1).split('&'); | |
40 params.forEach(function(param) { | |
41 var element = param.split('='); | |
42 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); | |
43 }); | |
44 return ret; | |
45 } | |
46 | |
47 function getRequestInit(params) { | |
48 var init = {}; | |
49 if (params['method']) { | |
50 init['method'] = params['method']; | |
51 } | |
52 if (params['mode']) { | |
53 init['mode'] = params['mode']; | |
54 } | |
55 if (params['credentials']) { | |
56 init['credentials'] = params['credentials']; | |
57 } | |
58 if (params['headers'] == 'CUSTOM') { | |
yhirano
2014/07/23 05:17:13
Please use '===' instead of '=='.
horo
2014/07/23 09:05:52
Done.
| |
59 init['headers'] = {"X-ServiceWorker-Test": "test"}; | |
60 } else if (params['headers'] == '{}') { | |
61 init['headers'] = {}; | |
62 } | |
63 return init; | |
64 } | |
65 | |
66 function headersToArray(headers) { | |
67 var ret = []; | |
68 headers.forEach(function(value, key) { | |
69 ret.push([key, value]); | |
70 }); | |
71 return ret; | |
72 } | |
73 | |
74 self.addEventListener('fetch', function(event) { | |
75 var originalURL = event.request.url; | |
76 if (originalURL == 'http://127.0.0.1:8000/serviceworker/resources/fetch-acce ss-control-iframe.html') { | |
77 handleFrame(event); | |
78 } else { | |
79 var params = getQueryParams(originalURL); | |
80 var init = getRequestInit(params); | |
81 var url = params['url']; | |
82 if (params['ignore']) { | |
83 return; | |
84 } | |
85 event.respondWith(new Promise(function(resolve, reject) { | |
86 try { | |
87 var request = event.request; | |
88 if (url) { | |
89 request = new Request(url, init); | |
90 } else if (!params['noChange']) { | |
91 request = new Request(request, init); | |
92 } | |
93 fetch(request).then(function(res){ | |
yhirano
2014/07/23 05:17:13
space before '{'
horo
2014/07/23 09:05:52
Done.
| |
94 // Send the result to fetch-access-control.html. | |
95 port.postMessage({fetchResult: 'resolved', | |
96 hasBody: !!res.body, | |
97 headers: headersToArray(res.headers), | |
98 type: res.type, | |
99 originalURL: originalURL}); | |
100 resolve(res); | |
101 }).catch(function(e){ | |
yhirano
2014/07/23 05:17:13
space before '{'
horo
2014/07/23 09:05:52
Done.
| |
102 // Send the result to fetch-access-control.html. | |
103 port.postMessage({fetchResult: 'rejected'}); | |
104 reject(); | |
105 }); | |
106 } catch (e) { | |
107 // Send the result to fetch-access-control.html. | |
108 port.postMessage({fetchResult: 'error'}); | |
109 reject(); | |
110 } | |
111 })); | |
112 } | |
113 }); | |
OLD | NEW |