OLD | NEW |
---|---|
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'); |
OLD | NEW |