Chromium Code Reviews| 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 |