Chromium Code Reviews| 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(reader, values) { | 15 function readStream(reader, values) { |
| 16 while (reader.state === 'readable') { | 16 reader.read().then(function(r) { |
| 17 values.push(reader.read()); | 17 if (!r.done) { |
| 18 } | 18 values.push(r.value); |
| 19 if (reader.state === 'waiting') { | |
| 20 return reader.ready.then(function() { | |
| 21 readStream(reader, values); | 19 readStream(reader, values); |
| 22 }); | 20 } |
| 23 } | 21 }); |
| 24 return reader.closed; | 22 return reader.closed; |
| 25 } | 23 } |
| 26 | 24 |
| 27 sequential_promise_test(function(test) { | 25 sequential_promise_test(function(test) { |
| 28 var response; | |
| 29 var reader; | |
| 30 return fetch('/fetch/resources/doctype.html') | |
| 31 .then(function(resp) { | |
| 32 response = resp; | |
| 33 reader = resp.body.getReader(); | |
| 34 return reader.ready; | |
| 35 }) | |
| 36 .then(function() { | |
| 37 if (reader.state !== 'readable') { | |
| 38 return Promise.reject(TypeError('stream state get wrong')); | |
| 39 } else { | |
| 40 reader.releaseLock(); | |
| 41 return response.text(); | |
| 42 } | |
| 43 }) | |
| 44 .then(function(text) { | |
| 45 assert_equals(text, '<!DOCTYPE html>\n', 'response.body'); | |
| 46 }) | |
| 47 }, 'FetchTextAfterStreamGetReadableTest'); | |
| 48 | |
| 49 sequential_promise_test(function(test) { | |
| 50 return fetch('/fetch/resources/doctype.html') | 26 return fetch('/fetch/resources/doctype.html') |
| 51 .then(function(response) { | 27 .then(function(response) { |
| 52 // Accessing the body property makes the stream start working. | 28 // Accessing the body property makes the stream start working. |
| 53 var stream = response.body; | 29 var stream = response.body; |
| 54 return response.text(); | 30 return response.text(); |
| 55 }) | 31 }) |
| 56 .then(function(text) { | 32 .then(function(text) { |
| 57 assert_equals(text, '<!DOCTYPE html>\n'); | 33 assert_equals(text, '<!DOCTYPE html>\n'); |
| 58 }) | 34 }) |
| 59 }, 'FetchTextAfterAccessingStreamTest'); | 35 }, 'FetchTextAfterAccessingStreamTest'); |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 144 assert_equals(text, '<!DOCTYPE html>\n'); | 120 assert_equals(text, '<!DOCTYPE html>\n'); |
| 145 }) | 121 }) |
| 146 }, 'TextTest'); | 122 }, 'TextTest'); |
| 147 | 123 |
| 148 sequential_promise_test(function(test) { | 124 sequential_promise_test(function(test) { |
| 149 var expectedText = ''; | 125 var expectedText = ''; |
| 150 for (var i = 0; i < 100; ++i) | 126 for (var i = 0; i < 100; ++i) |
| 151 expectedText += i; | 127 expectedText += i; |
| 152 | 128 |
| 153 var values = []; | 129 var values = []; |
| 154 function partialReadResponse(response, read_count) { | 130 function partialReadResponse(reader, read_count) { |
| 155 var reader = response.body.getReader(); | 131 return Promise.resolve().then(function() { |
|
tyoshino (SeeGerritForStatus)
2015/03/19 09:48:30
is this necessary?
yhirano
2015/03/19 11:00:30
Just to catch exceptions.
tyoshino (SeeGerritForStatus)
2015/03/19 12:18:09
Ah, yeah.
| |
| 156 function read(resolve, reject) { | 132 var promise = Promise.resolve(); |
| 157 while (reader.state === 'readable') { | 133 for (var i = 0; i < read_count; ++i) { |
| 158 values.push(reader.read()); | 134 promise = reader.read().then(function(r) { |
| 159 if (values.length > read_count) { | 135 if (!r.done) { |
| 160 reader.releaseLock(); | 136 values.push(r.value); |
| 161 resolve(); | 137 } |
| 162 return; | 138 }); |
| 163 } | 139 } |
| 164 } | 140 return promise; |
| 165 if (reader.state === 'closed') { | 141 }); |
| 166 reader.releaseLock(); | |
| 167 resolve(); | |
| 168 return; | |
| 169 } | |
| 170 reader.ready.then(function() { | |
| 171 read(resolve, reject); | |
| 172 }).catch(reject); | |
| 173 } | |
| 174 return new Promise(read); | |
| 175 } | 142 } |
| 176 var response; | 143 var response; |
| 144 var reader; | |
| 177 return fetch('/fetch/resources/progressive.php') | 145 return fetch('/fetch/resources/progressive.php') |
| 178 .then(function(res) { | 146 .then(function(res) { |
| 179 response = res; | 147 response = res; |
| 180 return partialReadResponse(response, 10); | 148 reader = response.body.getReader(); |
| 149 return partialReadResponse(reader, 10); | |
| 181 }) | 150 }) |
| 182 .then(function() { | 151 .then(function() { |
| 152 return response.text().then(unreached_rejection(test), function() { | |
|
tyoshino (SeeGerritForStatus)
2015/03/19 09:48:30
hmm. how about adding unreached_fulfillment? it ma
yhirano
2015/03/19 11:00:30
Done.
| |
| 153 // response.text() should fail because we have a reader. | |
| 154 }); | |
| 155 }) | |
| 156 .then(function() { | |
| 157 reader.releaseLock(); | |
| 183 return Promise.all( | 158 return Promise.all( |
| 184 values.map(arrayBufferToString).concat(response.text())); | 159 values.map(arrayBufferToString).concat(response.text())); |
| 185 }) | 160 }) |
| 186 .then(function(strings) { | 161 .then(function(strings) { |
| 187 var string = String.prototype.concat.apply('', strings); | 162 var string = String.prototype.concat.apply('', strings); |
| 188 assert_equals(string, expectedText); | 163 assert_equals(string, expectedText); |
| 189 }) | 164 }) |
| 190 }, 'PartiallyReadFromStreamAndReadTextTest'); | 165 }, 'PartiallyReadFromStreamAndReadTextTest'); |
| 191 | 166 |
| 192 sequential_promise_test_done(); | 167 sequential_promise_test_done(); |
| 193 done(); | 168 done(); |
| OLD | NEW |