Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(496)

Side by Side Diff: LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js

Issue 399543002: [ServiceWorker] Make fetch() method better conformance with the spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: incorporated falken's comment Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 var port = undefined;
2 var isTestTargetFetch = false;
3
4 self.onmessage = function(e) {
5 var message = e.data;
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);
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) {
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698