OLD | NEW |
1 if (self.importScripts) { | 1 if (self.importScripts) { |
2 importScripts('../resources/fetch-test-helpers.js'); | 2 importScripts('../resources/fetch-test-helpers.js'); |
3 } | 3 } |
4 | 4 |
5 function arrayBufferToString(buffer) { | 5 function arrayBufferToString(buffer) { |
6 return new Promise(function(resolve) { | 6 return new Promise(function(resolve) { |
7 var reader = new FileReader(); | 7 var reader = new FileReader(); |
8 reader.onload = function() { | 8 reader.onload = function() { |
9 resolve(reader.result); | 9 resolve(reader.result); |
10 }; | 10 }; |
11 reader.readAsText(new Blob([buffer])); | 11 reader.readAsText(new Blob([buffer])); |
12 }); | 12 }); |
13 } | 13 } |
14 | 14 |
15 function readStream(stream, values) { | 15 function readStream(reader, values) { |
16 while (stream.state === 'readable') { | 16 while (reader.state === 'readable') { |
17 values.push(stream.read()); | 17 values.push(reader.read()); |
18 } | 18 } |
19 if (stream.state === 'waiting') { | 19 if (reader.state === 'waiting') { |
20 return stream.ready.then(function() { | 20 return reader.ready.then(function() { |
21 readStream(stream, values); | 21 readStream(reader, values); |
22 }); | 22 }); |
23 } | 23 } |
24 return stream.closed; | 24 return reader.closed; |
25 } | 25 } |
26 | 26 |
27 sequential_promise_test(function(test) { | 27 sequential_promise_test(function(test) { |
28 var response; | 28 var response; |
| 29 var reader; |
29 return fetch('/fetch/resources/doctype.html') | 30 return fetch('/fetch/resources/doctype.html') |
30 .then(function(resp) { | 31 .then(function(resp) { |
31 response = resp; | 32 response = resp; |
32 return response.body.ready; | 33 reader = resp.body.getReader(); |
| 34 return reader.ready; |
33 }) | 35 }) |
34 .then(function() { | 36 .then(function() { |
35 if (response.body.state !== 'readable') { | 37 if (reader.state !== 'readable') { |
36 return Promise.reject(TypeError('stream state get wrong')); | 38 return Promise.reject(TypeError('stream state get wrong')); |
37 } else { | 39 } else { |
| 40 reader.releaseLock(); |
38 return response.text(); | 41 return response.text(); |
39 } | 42 } |
40 }) | 43 }) |
41 .then(function(text) { | 44 .then(function(text) { |
42 assert_equals(text, '<!DOCTYPE html>\n', 'response.body'); | 45 assert_equals(text, '<!DOCTYPE html>\n', 'response.body'); |
43 }) | 46 }) |
44 }, 'FetchTextAfterStreamGetReadableTest'); | 47 }, 'FetchTextAfterStreamGetReadableTest'); |
45 | 48 |
46 sequential_promise_test(function(test) { | 49 sequential_promise_test(function(test) { |
47 return fetch('/fetch/resources/doctype.html') | 50 return fetch('/fetch/resources/doctype.html') |
48 .then(function(response) { | 51 .then(function(response) { |
49 // Accessing the body property makes the stream start working. | 52 // Accessing the body property makes the stream start working. |
50 var stream = response.body; | 53 var stream = response.body; |
51 return response.text(); | 54 return response.text(); |
52 }) | 55 }) |
53 .then(function(text) { | 56 .then(function(text) { |
54 assert_equals(text, '<!DOCTYPE html>\n'); | 57 assert_equals(text, '<!DOCTYPE html>\n'); |
55 }) | 58 }) |
56 }, 'FetchTextAfterAccessingStreamTest'); | 59 }, 'FetchTextAfterAccessingStreamTest'); |
57 | 60 |
58 sequential_promise_test(function(test) { | 61 sequential_promise_test(function(test) { |
59 var values = []; | 62 var values = []; |
60 return fetch('/fetch/resources/doctype.html') | 63 return fetch('/fetch/resources/doctype.html') |
61 .then(function(response) { | 64 .then(function(response) { |
62 r = response; | 65 r = response; |
63 return readStream(response.body, values); | 66 return readStream(response.body.getReader(), values); |
64 }) | 67 }) |
65 .then(function() { | 68 .then(function() { |
66 return Promise.all(values.map(arrayBufferToString)); | 69 return Promise.all(values.map(arrayBufferToString)); |
67 }) | 70 }) |
68 .then(function(strings) { | 71 .then(function(strings) { |
69 var string = String.prototype.concat.apply('', strings); | 72 var string = String.prototype.concat.apply('', strings); |
70 assert_equals(string, '<!DOCTYPE html>\n'); | 73 assert_equals(string, '<!DOCTYPE html>\n'); |
71 }) | 74 }) |
72 }, 'FetchStreamTest'); | 75 }, 'FetchStreamTest'); |
73 | 76 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 }) | 145 }) |
143 }, 'TextTest'); | 146 }, 'TextTest'); |
144 | 147 |
145 sequential_promise_test(function(test) { | 148 sequential_promise_test(function(test) { |
146 var expectedText = ''; | 149 var expectedText = ''; |
147 for (var i = 0; i < 100; ++i) | 150 for (var i = 0; i < 100; ++i) |
148 expectedText += i; | 151 expectedText += i; |
149 | 152 |
150 var values = []; | 153 var values = []; |
151 function partialReadResponse(response, read_count) { | 154 function partialReadResponse(response, read_count) { |
| 155 var reader = response.body.getReader(); |
152 function read(resolve, reject) { | 156 function read(resolve, reject) { |
153 while (response.body.state === 'readable') { | 157 while (reader.state === 'readable') { |
154 values.push(response.body.read()); | 158 values.push(reader.read()); |
155 if (values.length > read_count) { | 159 if (values.length > read_count) { |
| 160 reader.releaseLock(); |
156 resolve(); | 161 resolve(); |
157 return; | 162 return; |
158 } | 163 } |
159 } | 164 } |
160 if (response.body.state === 'closed') { | 165 if (reader.state === 'closed') { |
| 166 reader.releaseLock(); |
161 resolve(); | 167 resolve(); |
162 return; | 168 return; |
163 } | 169 } |
164 response.body.ready.then(function() { | 170 reader.ready.then(function() { |
165 read(resolve, reject); | 171 read(resolve, reject); |
166 }).catch(reject); | 172 }).catch(reject); |
167 } | 173 } |
168 return new Promise(read); | 174 return new Promise(read); |
169 } | 175 } |
170 var response; | 176 var response; |
171 return fetch('/fetch/resources/progressive.php') | 177 return fetch('/fetch/resources/progressive.php') |
172 .then(function(res) { | 178 .then(function(res) { |
173 response = res; | 179 response = res; |
174 return partialReadResponse(response, 10); | 180 return partialReadResponse(response, 10); |
175 }) | 181 }) |
176 .then(function() { | 182 .then(function() { |
177 return Promise.all( | 183 return Promise.all( |
178 values.map(arrayBufferToString).concat(response.text())); | 184 values.map(arrayBufferToString).concat(response.text())); |
179 }) | 185 }) |
180 .then(function(strings) { | 186 .then(function(strings) { |
181 var string = String.prototype.concat.apply('', strings); | 187 var string = String.prototype.concat.apply('', strings); |
182 assert_equals(string, expectedText); | 188 assert_equals(string, expectedText); |
183 }) | 189 }) |
184 }, 'PartiallyReadFromStreamAndReadTextTest'); | 190 }, 'PartiallyReadFromStreamAndReadTextTest'); |
185 | 191 |
186 sequential_promise_test_done(); | 192 sequential_promise_test_done(); |
187 done(); | 193 done(); |
OLD | NEW |