Chromium Code Reviews| Index: LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js |
| diff --git a/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js b/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7d47e366324f707bbe1c6944ce132f3124ba950c |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js |
| @@ -0,0 +1,113 @@ |
| +self.onmessage = function(e) { |
| + var message = e.data; |
| + if ('port' in message) { |
| + port = message.port; |
|
yhirano
2014/07/23 05:17:13
Please declare |port|.
horo
2014/07/23 09:05:52
Done.
|
| + } |
| +}; |
| + |
| +var baseFrameHtml = |
| + '<script>' + |
| + 'function onMessage(event) {' + |
| + ' var script = document.createElement(\'script\');' + |
| + ' script.src = event.data.url;' + |
| + ' script.addEventListener(' + |
| + ' \'error\',' + |
| + ' function() {report({jsonpResult:\'error\'})});' + |
| + ' document.body.appendChild(script);' + |
| + '}' + |
| + 'function report(data) {' + |
| + ' window.parent.postMessage(' + |
| + ' data,' + |
| + ' \'http://127.0.0.1:8000/serviceworker/fetch-access-control.html\');' + |
| + '}' + |
| + 'function onload() {' + |
| + ' window.addEventListener(\'message\', onMessage, false);' + |
| + '}' + |
| + 'window.addEventListener(\'load\', onload);' + |
| + '</script>'; |
| + |
| +function handleFrame(event) { |
| + event.respondWith(new Response(new Blob([baseFrameHtml]))); |
| +} |
| + |
| +function getQueryParams(url) { |
| + var search = (new URL(url)).search; |
| + if (!search) { |
| + return {}; |
| + } |
| + var ret = {}; |
| + var params = search.substring(1).split('&'); |
| + params.forEach(function(param) { |
| + var element = param.split('='); |
| + ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]); |
| + }); |
| + return ret; |
| +} |
| + |
| +function getRequestInit(params) { |
| + var init = {}; |
| + if (params['method']) { |
| + init['method'] = params['method']; |
| + } |
| + if (params['mode']) { |
| + init['mode'] = params['mode']; |
| + } |
| + if (params['credentials']) { |
| + init['credentials'] = params['credentials']; |
| + } |
| + if (params['headers'] == 'CUSTOM') { |
|
yhirano
2014/07/23 05:17:13
Please use '===' instead of '=='.
horo
2014/07/23 09:05:52
Done.
|
| + init['headers'] = {"X-ServiceWorker-Test": "test"}; |
| + } else if (params['headers'] == '{}') { |
| + init['headers'] = {}; |
| + } |
| + return init; |
| +} |
| + |
| +function headersToArray(headers) { |
| + var ret = []; |
| + headers.forEach(function(value, key) { |
| + ret.push([key, value]); |
| + }); |
| + return ret; |
| +} |
| + |
| +self.addEventListener('fetch', function(event) { |
| + var originalURL = event.request.url; |
| + if (originalURL == 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-control-iframe.html') { |
| + handleFrame(event); |
| + } else { |
| + var params = getQueryParams(originalURL); |
| + var init = getRequestInit(params); |
| + var url = params['url']; |
| + if (params['ignore']) { |
| + return; |
| + } |
| + event.respondWith(new Promise(function(resolve, reject) { |
| + try { |
| + var request = event.request; |
| + if (url) { |
| + request = new Request(url, init); |
| + } else if (!params['noChange']) { |
| + request = new Request(request, init); |
| + } |
| + fetch(request).then(function(res){ |
|
yhirano
2014/07/23 05:17:13
space before '{'
horo
2014/07/23 09:05:52
Done.
|
| + // Send the result to fetch-access-control.html. |
| + port.postMessage({fetchResult: 'resolved', |
| + hasBody: !!res.body, |
| + headers: headersToArray(res.headers), |
| + type: res.type, |
| + originalURL: originalURL}); |
| + resolve(res); |
| + }).catch(function(e){ |
|
yhirano
2014/07/23 05:17:13
space before '{'
horo
2014/07/23 09:05:52
Done.
|
| + // Send the result to fetch-access-control.html. |
| + port.postMessage({fetchResult: 'rejected'}); |
| + reject(); |
| + }); |
| + } catch (e) { |
| + // Send the result to fetch-access-control.html. |
| + port.postMessage({fetchResult: 'error'}); |
| + reject(); |
| + } |
| + })); |
| + } |
| +}); |