 Chromium Code Reviews
 Chromium Code Reviews Issue 329853012:
  [ServiceWorker] Make Request class better conformance with the spec.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/blink.git@master
    
  
    Issue 329853012:
  [ServiceWorker] Make Request class better conformance with the spec.  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/blink.git@master| 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 |