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

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

Powered by Google App Engine
This is Rietveld 408576698