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

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: remove Source/core/timing/Performance.cpp 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 self.onmessage = function(e) {
2 var message = e.data;
3 if ('port' in message) {
4 port = message.port;
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') {
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){
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){
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 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698