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

Side by Side Diff: LayoutTests/http/tests/fetch/script-tests/fetch-body-mixin.js

Issue 1004623007: Streams Implementation Update: async read (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@stream-reader-read
Patch Set: Created 5 years, 9 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
OLDNEW
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
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();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698