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

Side by Side Diff: LayoutTests/http/tests/serviceworker/resources/request-worker.js

Issue 329853012: [ServiceWorker] Make Request class better conformance with the spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Copy headers in FetchRequestData::createRestrictedCopy(). 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
« no previous file with comments | « no previous file | Source/modules/modules.gypi » ('j') | Source/modules/serviceworkers/Request.cpp » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 importScripts('worker-test-helpers.js'); 1 importScripts('worker-test-helpers.js');
2 2
3 test(function() { 3 test(function() {
4 var headers = new HeaderMap; 4 var url = 'https://www.example.com/test.html';
5 headers.set('User-Agent', 'Mozilla/5.0'); 5 var headers = new Headers;
6 headers.set('Accept', 'text/html'); 6 headers.set('User-Agent', 'Mozilla/5.0');
7 headers.set('X-ServiceWorker-Test', 'request test field'); 7 headers.set('Accept', 'text/html');
8 headers.set('X-ServiceWorker-Test', 'request test field');
8 9
yhirano 2014/07/02 08:28:14 Do you have a test about Request.referrer?
horo 2014/07/02 13:49:14 Done.
9 var request = new Request({ 10 var request = new Request(
10 url: 'https://www.example.com/test.html', 11 url,
11 method: 'GET', 12 {
12 headers: headers 13 method: 'GET',
14 headers: headers
15 });
16
17 assert_equals(request.url, url, 'Request.url should match');
18 assert_equals(request.method, 'GET', 'Request.method should match');
19 assert_true(request.headers instanceof Headers, 'Request.headers should be Hea ders');
20
21 // 'User-Agent' is a forbidden header.
22 assert_equals(request.headers.size, 2, 'Request.headers.size should match');
23 // Note: detailed behavioral tests for Headers are in another test,
24 // http/tests/serviceworker/headers.html.
25
26 request.url = 'http://localhost/';
27 assert_equals(request.url, 'https://www.example.com/test.html', 'Request.url s hould be readonly');
28 request = new Request('http://localhost/\uD800'); // Unmatched lead surrogate.
29 assert_equals(request.url,
30 'http://localhost/' + encodeURIComponent('\uFFFD'),
31 'Request.url should have unmatched surrogates replaced.');
32 request.method = 'POST';
33 assert_equals(request.method, 'GET', 'Request.method should be readonly');
34
35 request = new Request(url);
36 assert_equals(request.url, url, 'Request.url should match');
37 assert_equals(request.method, 'GET', 'Default Request.method should be GET');
38 assert_equals(request.mode, 'cors', 'Default Request.mode should be cors');
39 assert_equals(request.credentials, 'omit', 'Default Request.credentials should be omit');
40 request.headers.append('X-ServiceWorker-Foo', 'foo1');
41 request.headers.append('X-ServiceWorker-Foo', 'foo2');
42 request.headers.append('X-ServiceWorker-Bar', 'bar');
43 var request2 = new Request(request);
44 assert_equals(request2.url, url, 'Request.url should match');
45 assert_equals(request2.method, 'GET', 'Request.method should match');
46 assert_equals(request2.mode, 'cors', 'Request.mode should match');
47 assert_equals(request2.credentials, 'omit', 'Request.credentials should match' );
48 assert_equals(request2.headers.getAll('X-ServiceWorker-Foo')[0], 'foo1',
49 'Request.headers should match');
50 assert_equals(request2.headers.getAll('X-ServiceWorker-Foo')[1], 'foo2',
51 'Request.headers should match');
52 assert_equals(request2.headers.getAll('X-ServiceWorker-Bar')[0], 'bar',
53 'Request.headers should match');
54
55 var kMethods = ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS'];
56 var kModes = ['same-origin', 'no-cors', 'cors'];
57 var kCredentials = ['omit', 'same-origin', 'include'];
58
59 kMethods.forEach(function(method) {
60 request = new Request(url, {method: method});
61 assert_equals(request.method, method, 'Request.method should match');
62 request2 = new Request(request);
63 assert_equals(request2.method, method, 'Request.method should match');
64 kMethods.forEach(function(method2) {
65 var request2 = new Request(request, {method: method2});
66 assert_equals(request2.method, method2, 'Request.method should be overri dden');
13 }); 67 });
68 });
69 kModes.forEach(function(mode) {
70 request = new Request(url, {mode: mode});
71 assert_equals(request.mode, mode, 'Request.mode should match');
72 var request2 = new Request(request);
73 assert_equals(request2.mode, mode, 'Request.mode should match');
74 kModes.forEach(function(mode2) {
75 var request2 = new Request(request, {mode: mode2});
76 assert_equals(request2.mode, mode2, 'Request.mode should be overridden') ;
77 });
78 });
79 kCredentials.forEach(function(credentials) {
80 request = new Request(url, {credentials: credentials});
81 assert_equals(request.credentials, credentials, 'Request.credentials should match');
82 var request2 = new Request(request);
83 assert_equals(request2.credentials, credentials, 'Request.credentials should match');
84 kCredentials.forEach(function(credentials2) {
85 var request2 = new Request(request, {credentials: credentials2});
86 assert_equals(request2.credentials, credentials2, 'Request.credentials s hould be overridden');
87 });
88 });
14 89
15 assert_equals(request.url, 'https://www.example.com/test.html', 'Request.url should match');
16 assert_equals(request.method, 'GET', 'Request.method should match');
17 assert_equals(request.origin, 'https://www.example.com', 'Request.origin sho uld match');
18 assert_true(request.headers instanceof HeaderMap, 'Request.headers should be HeaderMap');
19 assert_equals(request.headers.size, 3, 'Request.headers.size should match');
20 // Note: detailed behavioral tests for HeaderMap are in another test,
21 // http/tests/serviceworker/headermap.html.
22 90
23 request.url = 'http://localhost/'; 91 var forbiddenMethods = ['TRACE', 'TRACK', 'CONNECT'];
24 assert_equals(request.url, 'http://localhost/', 'Request.url should be writa ble'); 92 var invalidNames = ['(', ')', '<', '>', '@', ',', ';', ':', '\\', '"',
25 request.url = 'http://localhost/\uD800'; // Unmatched lead surrogate. 93 '/', '[', ']', '?', '=', '{', '}', '\u3042', 'a(b'];
26 assert_equals(request.url, 94 forbiddenMethods.forEach(function(method) {
27 'http://localhost/' + encodeURIComponent('\uFFFD'), 95 assert_throws({name:'TypeError'},
28 'Request.url should have unmatched surrogates replaced.'); 96 function() { var request = new Request(url, {method: method}); },
29 request.method = 'POST'; 97 'new Request with a forbidden method (' + method +') should th row');
30 assert_equals(request.method, 'POST', 'Request.method should be writable'); 98 });
31 assert_throws({name: 'TypeError'}, function() { request.method = 'invalid \u 0100'; }, 99 invalidNames.forEach(function(name) {
32 'Request.method should throw on invalid ByteString'); 100 assert_throws({name:'TypeError'},
101 function() { var request = new Request(url, {method: name}); } ,
102 'new Request with an invalid method (' + name +') should throw ');
103 });
104
105 kMethods.forEach(function(method) {
106 request = new Request(url, {method: method.toLowerCase()});
107 assert_equals(request.method, method, 'Request.method should be case correct ed');
108 });
109
110 ['PUT', 'DELETE', 'OPTIONS'].forEach(function(method) {
111 assert_throws({name:'TypeError'},
112 function() { var request = new Request(url, {method: method, m ode: 'no-cors'}); },
113 'new no-cors Request with non simple method (' + method +') sh ould throw');
114 assert_throws({name:'TypeError'},
115 function() {
116 var request = new Request(url, {method: method});
117 var request2 = new Request(request, {mode: 'no-cors'});
118 },
119 'new no-cors Request with non simple method (' + method +') sh ould throw');
120 assert_throws({name:'TypeError'},
121 function() {
122 var request = new Request(url, {mode: 'no-cors'});
123 var request2 = new Request(request, {method: method});
124 },
125 'new no-cors Request with non simple method (' + method +') sh ould throw');
yhirano 2014/07/02 08:28:14 Can we have a test case that tests if we can set n
horo 2014/07/02 13:49:14 Done.
126 });
127
128 kForbiddenHeaders =
129 ['Accept-Charset', 'Accept-Encoding', 'Access-Control-Request-Headers',
130 'Access-Control-Request-Method', 'Connection', 'Content-Length', 'Cookie' ,
131 'Cookie2', 'Date', 'DNT', 'Expect', 'Host', 'Keep-Alive', 'Origin',
132 'Referer', 'TE', 'Trailer', 'Transfer-Encoding', 'Upgrade', 'User-Agent',
133 'Via', 'Proxy-', 'Sec-', 'Proxy-FooBar', 'Sec-FooBar'];
134 kSimpleHeaders =
135 [['Accept', '*'], ['Accept-Language', 'ru'], ['Content-Language', 'ru'],
136 ['Content-Type', 'application/x-www-form-urlencoded'],
137 ['Content-Type', 'multipart/form-data'],
138 ['Content-Type', 'text/plain']]
139
140 request = new Request(url);
141 assert_equals(request.headers.size, 0);
142 request.headers.append('X-ServiceWorker-Test', 'test');
143 request.headers.append('X-ServiceWorker-Test2', 'test2');
144 assert_equals(request.headers.size, 2);
145 assert_equals(request.headers.get('X-ServiceWorker-Test'), 'test');
146 assert_equals(request.headers.get('X-ServiceWorker-Test2'), 'test2');
147 kForbiddenHeaders.forEach(function(header) {
148 request.headers.append(header, 'test');
149 assert_equals(request.headers.size, 2,
150 'Request.headers.append should ignore the forbidden headers');
151 request.headers.set(header, 'test');
152 assert_equals(request.headers.size, 2,
153 'Request.headers.append should ignore the forbidden headers');
154 });
155
156 request = new Request(url, {mode: 'no-cors'});
157 request.headers.append('X-ServiceWorker-Test', 'test');
158 request.headers.append('X-ServiceWorker-Test2', 'test2');
159 assert_equals(request.headers.size, 0);
160
161 kSimpleHeaders.forEach(function(header) {
162 request = new Request(url, {mode: 'no-cors'});
163 request.headers.append(header[0], header[1]);
164 assert_equals(request.headers.size, 1);
165 request = new Request(url, {mode: 'no-cors'});
166 request.headers.set(header[0], header[1]);
167 assert_equals(request.headers.size, 1);
168 request.headers.delete(header[0]);
169 if (header[0] == 'Content-Type') {
170 assert_equals(
171 request.headers.size, 1,
172 'Content-Type header of no-cors request shouldn\'t be deleted');
173 } else {
174 assert_equals(request.headers.size, 0);
175 }
176 });
177
178 kSimpleHeaders.forEach(function(header) {
179 var headers = {};
180 headers['X-ServiceWorker-Test'] = 'test';
181 headers['X-ServiceWorker-Test2'] = 'test2';
182 kForbiddenHeaders.forEach(function(header) { headers[header] = 'foo';});
183 headers[header[0]] = header[1];
184 request = new Request(url, {headers: headers});
185 assert_equals(request.headers.size, 3,
186 'Request.headers should not support the forbidden headers');
187 request = new Request(url, {mode: 'same-origin', headers: headers});
188 assert_equals(request.headers.size, 3,
189 'Request.headers should not support the forbidden headers');
190 request = new Request(url, {mode: 'no-cors', headers: headers});
191 assert_equals(request.headers.size, 1,
192 'No-CORS Request.headers should only support simple headers');
193 request = new Request(url, {mode: 'cors', headers: headers});
194 assert_equals(request.headers.size, 3,
195 'Request.headers should not support the forbidden headers');
196 });
33 197
34 }, 'Request in ServiceWorkerGlobalScope'); 198 }, 'Request in ServiceWorkerGlobalScope');
OLDNEW
« no previous file with comments | « no previous file | Source/modules/modules.gypi » ('j') | Source/modules/serviceworkers/Request.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698