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

Side by Side Diff: LayoutTests/http/tests/serviceworker/fetch-access-control.html

Issue 333423004: moved to https://codereview.chromium.org/399543002/ (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: rebase 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 <!DOCTYPE html>
2 <title>Service Worker: fetch()</title>
3 <script src="../resources/testharness.js"></script>
4 <script src="../resources/testharnessreport.js"></script>
5 <script src="resources/test-helpers.js"></script>
6 <script>
7 var test = async_test('Verify access control of fetch() in a Service Worker');
8 test.step(function() {
9 window.addEventListener('message', onMessage, false);
10 var scope = 'resources/fetch-access-control-iframe.html';
11 service_worker_unregister_and_register(
12 test, 'resources/fetch-access-control-worker.js', scope).then(test.step_fu nc(onRegister));
13
14
15 var kBaseUrl = 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-con trol.php?';
16 var kCorsBaseUrl = 'http://localhost:8000/serviceworker/resources/fetch-access -control.php?';
17 var kIframeUrl = 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-c ontrol-iframe.html';
18
19 var shouldBeResolved = function (url, data) {
20 assert_true(data.event != 'rejected' && data.event != 'error', url + ' shoul d be resolved');
21 };
22 var shouldBeRejected = function (url, data) {
23 assert_true(data.event != 'resolved' && data.event != 'error', url + ' shoul d be rejected');
24 };
25 var shouldThrowError = function (url, data) {
26 assert_true(data.event != 'rejected' && data.event != 'resolved', url + ' sh ould throw error');
27 };
28 var shouldHaveHeader = function (url, name, value, data) {
29 if (data.event != 'report') {
30 return;
31 }
32 assert_equals(data.headers[name], value,
33 'the request header to ' + url + ' should have ' + name + '/' + value);
34 };
35 var shouldNotHaveHeader = function (url, name, data) {
36 if (data.event != 'report') {
37 return;
38 }
39 assert_equals(data.headers[name], undefined,
40 'the request header to ' + url + ' should not have ' + name);
41 };
42 var methodCheck = function (url, method, data) {
43 if (data.event != 'report') {
44 return;
45 }
46 assert_equals(data.method, method, 'Method must match');
47 };
48 var headerCheck = function (url, hasContentLength, hasXServiceWorkerServerHead er, data) {
49 if (data.event != 'resolved') {
50 return;
51 }
52 var hasCL = false;
53 var hasXSWSH = false;
54 for (var i = 0; i < data.headers.length; ++i) {
55 if (data.headers[i][0] == 'content-length') {
56 hasCL = true;
57 } else if (data.headers[i][0] == 'x-serviceworker-serverheader') {
58 hasXSWSH = true;
59 }
60 }
61 assert_equals(hasCL, hasContentLength, 'hasContentLength must match');
62 assert_equals(hasXSWSH, hasXServiceWorkerServerHeader, 'hasContentLength mus t match');
63 };
64 var testTargets = [];
65 [kBaseUrl, kCorsBaseUrl].forEach(function(baseUrl) {
66 ['same-origin', 'no-cors', 'cors'].forEach(function(mode) {
67 var headersTestList = ['', '{}', 'HEADER_WITHOUT_ACA'];
68 var ACAOriginTestList = [''];
69 if (mode == 'cors') {
70 headersTestList.push('HEADER_WITH_ACA');
71 ACAOriginTestList.push('*');
72 ACAOriginTestList.push('http://127.0.0.1:8000');
73 ACAOriginTestList.push('http://127.0.0.1:8000,http://www.example.com');
74 ACAOriginTestList.push('http://localhost:8000');
75 }
76 ['GET', 'POST', 'PUT', 'XXX'].forEach(function(method) {
77 headersTestList.forEach(function(headers) {
78 ACAOriginTestList.forEach(function(ACAOrigin) {
79 var ACAMethodsTestList = [''];
80 if (mode == 'cors' && headers == '{}' && ACAOrigin == '*') {
81 ACAMethodsTestList.push('*');
82 ACAMethodsTestList.push('XXX');
83 ACAMethodsTestList.push('PUT');
84 ACAMethodsTestList.push('PUT, XXX');
85 }
86 ACAMethodsTestList.forEach(function(ACAMethods) {
87 var ACEHeadersList = [''];
88 if (mode == 'cors' && headers == '{}' && ACAOrigin == '*') {
89 ACEHeadersList.push('X-ServiceWorker-ServerHeader');
90 ACEHeadersList.push('Content-Length, X-ServiceWorker-ServerHeade r');
91 }
92 ACEHeadersList.forEach(function(ACEHeaders){
93 var url = baseUrl +
94 'mode=' + mode +
95 '&method=' + method;
96 if (headers == '{}') {
97 url += '&headers=' + headers;
98 } else if (headers == 'HEADER_WITHOUT_ACA') {
99 url += '&headers={\"X-ServiceWorker-Test\":\ \"test\"}';
100 } else if (headers == 'HEADER_WITH_ACA') {
101 url += '&headers={\"X-ServiceWorker-Test\":\ \"test\"}';
102 url += '&ACAHeaders=x-serviceworker-test';
103 }
104 if (ACAOrigin) {
105 url += '&ACAOrigin=' + ACAOrigin;
106 }
107 if (ACAMethods) {
108 url += '&ACAMethods=' + ACAMethods;
109 }
110 if (ACEHeaders) {
111 url += '&ACEHeaders=' + ACEHeaders;
112 }
113 var checkFunctions = [];
114 var error = false;
115 if (method != 'GET' && method != 'POST') {
116 if (mode == 'no-cors') {
117 error = true;
118 }
119 }
120 var resolve = true;
121 if (!error) {
122 if (baseUrl == kCorsBaseUrl) {
123 if (mode == 'same-origin') {
124 resolve = false;
125 } else if (mode == 'cors') {
126 if (headers == '{}' || headers == 'HEADER_WITH_ACA') {
127 if (ACAOrigin == '' ||
128 ACAOrigin == 'http://localhost:8000' ||
129 ACAOrigin == 'http://127.0.0.1:8000,http://www.examp le.com') {
130 resolve = false;
131 }
132 } else {
133 resolve = false;
134 }
135 if (method != 'GET' && method != 'POST') {
136 if (ACAMethods.indexOf(method) == -1) {
137 resolve = false;
138 }
139 }
140 }
141 }
142 }
143 if (error) {
144 checkFunctions.push(shouldThrowError.bind(this, url));
145 } else if (resolve) {
146 checkFunctions.push(shouldBeResolved.bind(this, url));
147 } else {
148 checkFunctions.push(shouldBeRejected.bind(this, url));
149 }
150 var haveHeader = false;
151 if (resolve) {
152 if (headers == 'HEADER_WITHOUT_ACA' || headers == 'HEADER_WITH _ACA') {
153 if (mode == 'same-origin' || mode == 'cors') {
154 haveHeader = true;
155 }
156 }
157 }
158 if (haveHeader) {
159 checkFunctions.push(shouldHaveHeader.bind(
160 this, url, 'x-serviceworker-test', 'test'));
161 } else {
162 checkFunctions.push(shouldNotHaveHeader.bind(
163 this, url, 'x-serviceworker-test'));
164 }
165 if (resolve) {
166 var expectedMethod = method;
167 if (baseUrl == kBaseUrl) {
168 if (mode == 'no-cors' && method != 'POST') {
169 expectedMethod = 'GET';
170 }
171 } else {
172 if (mode == 'no-cors' && method != 'POST') {
173 expectedMethod = 'GET';
174 }
175 }
176 checkFunctions.push(methodCheck.bind(this, url, expectedMethod ));
177 var hasContentLength = false;
178 var hasXServiceWorkerServerHeader = false;
179 if (baseUrl == kBaseUrl) {
180 if (mode == 'cors') {
181 if (ACEHeaders.indexOf('Content-Length') != -1) {
182 hasContentLength = true;
183 }
184 if (ACEHeaders.indexOf('X-ServiceWorker-ServerHeader') != -1) {
185 hasXServiceWorkerServerHeader = true;
186 }
187 } else {
188 hasContentLength = true;
189 hasXServiceWorkerServerHeader = true;
190 }
191 } else {
192 if (mode == 'cors') {
193 if (ACEHeaders.indexOf('Content-Length') != -1) {
194 hasContentLength = true;
195 }
196 if (ACEHeaders.indexOf('X-ServiceWorker-ServerHeader') != -1) {
197 hasXServiceWorkerServerHeader = true;
198 }
199 }
200 }
201 checkFunctions.push(headerCheck.bind(this, url, hasContentLeng th, hasXServiceWorkerServerHeader));
202 }
203 testTargets.push([url, checkFunctions]);
204 });
205 });
206 });
207 });
208 });
209 });
210 });
211
212 function onRegister(worker) {
213 worker.addEventListener('statechange', test.step_func(onStateChange));
214 var messageChannel = new MessageChannel();
215 messageChannel.port1.onmessage = onWorkerMessage;
216 worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
217 }
218
219 function onWorkerMessage(e) {
220 var message = e.data;
221 testTargets[message.id][1].forEach(function(checkFunc){
222 checkFunc.call(this, message);
223 });
224 if (message.event == 'resolved') {
225 var hasContentLength = false;
226 var hasXServiceWorkerServerHeader = false;
227 for (var i = 0; i < message.headers.length; ++i) {
228 if (message.headers[i][0] == 'content-length') {
229 hasContentLength = true;
230 } else if (message.headers[i][0] == 'x-serviceworker-serverheader') {
231 hasXServiceWorkerServerHeader = true;
232 }
233 }
234 // console.log('resolved type:' + message.data.type +
235 // ' hasContentLength:' + hasContentLength +
236 // ' hasXServiceWorkerServerHeader:' + hasXServiceWorkerServerH eader);
237 } else if (message.event == 'rejected') {
238 // console.log('rejected');
239 } else if (message.event == 'error') {
240 // console.log('error');
241 }
242 }
243
244 var jsonpResultCount = 0;
245 function onMessage(e) {
246 var message = e.data;
247 testTargets[message.id][1].forEach(function(checkFunc){
248 checkFunc.call(this, message);
249 });
250 ++jsonpResultCount;
251 // console.log(message.event + ' ' + message.method + ' ' + message.headers[ 'x-serviceworker-test']);
252 if (jsonpResultCount == testTargets.length) {
253 service_worker_unregister_and_done(test, scope);
254 } else {
255 loadNext();
256 }
257 }
258 var frameWindow = {};
259 function loadNext() {
260 // console.log(testTargets[jsonpResultCount][0]);
261 frameWindow.postMessage(
262 {url: testTargets[jsonpResultCount][0] + '&id=' + jsonpResultCount},
263 kIframeUrl);
264 }
265 function onStateChange(event) {
266 if (event.target.state != 'active')
267 return;
268 with_iframe('resources/fetch-access-control-iframe.html')
269 .then(function(frame) {
270 frameWindow = frame.contentWindow;
271 loadNext();
272 });
273 }
274 });
275 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698