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

Side by Side Diff: LayoutTests/http/tests/xmlhttprequest/resources/response-stream.js

Issue 1001233002: Streams Implementation Update: Reader name and Stream methods (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
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 var global = this; 1 var global = this;
2 if (global.importScripts) { 2 if (global.importScripts) {
3 // Worker case 3 // Worker case
4 importScripts('/resources/testharness.js'); 4 importScripts('/resources/testharness.js');
5 } 5 }
6 6
7 var test = async_test('Test response of XMLHttpRequest with responseType set to "stream" for various readyState.'); 7 var test = async_test('Test response of XMLHttpRequest with responseType set to "stream" for various readyState.');
8 8
9 test.step(function() { 9 test.step(function() {
10 var xhr = new XMLHttpRequest; 10 var xhr = new XMLHttpRequest;
11 11
12 xhr.responseType = 'stream'; 12 xhr.responseType = 'stream';
13 assert_equals(xhr.responseType, 'stream', 'xhr.responseType'); 13 assert_equals(xhr.responseType, 'stream', 'xhr.responseType');
14 14
15 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState'); 15 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState');
16 assert_equals(xhr.response, null, 'xhr.response during UNSENT'); 16 assert_equals(xhr.response, null, 'xhr.response during UNSENT');
17 17
18 var seenStates = []; 18 var seenStates = [];
19 19
20 function readStream(stream) { 20 function readStream(reader) {
21 var chunks = []; 21 var chunks = [];
22 function rec(resolve, reject) { 22 function rec(resolve, reject) {
23 while (stream.state === 'readable') { 23 while (reader.state === 'readable') {
24 chunks.push(stream.read()); 24 chunks.push(reader.read());
25 } 25 }
26 if (stream.state === 'closed') { 26 if (reader.state === 'closed') {
27 resolve(chunks); 27 resolve(chunks);
28 return; 28 return;
29 } 29 }
30 stream.ready.then(function() { 30 reader.ready.then(function() {
31 rec(resolve, reject); 31 rec(resolve, reject);
32 }).catch(reject); 32 }).catch(reject);
33 } 33 }
34 return new Promise(rec); 34 return new Promise(rec);
35 } 35 }
36 var streamPromise = undefined; 36 var streamPromise = undefined;
37 37
38 xhr.onreadystatechange = test.step_func(function() { 38 xhr.onreadystatechange = test.step_func(function() {
39 // onreadystatechange can be invoked multiple times in LOADING state. 39 // onreadystatechange can be invoked multiple times in LOADING state.
40 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le ngth - 1]) 40 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le ngth - 1])
(...skipping 10 matching lines...) Expand all
51 51
52 case xhr.HEADERS_RECEIVED: 52 case xhr.HEADERS_RECEIVED:
53 assert_equals(xhr.response, null, 'xhr.response during HEADERS_RECEI VED'); 53 assert_equals(xhr.response, null, 'xhr.response during HEADERS_RECEI VED');
54 return; 54 return;
55 55
56 case xhr.LOADING: 56 case xhr.LOADING:
57 assert_not_equals(xhr.response, null, 'xhr.response during LOADING') ; 57 assert_not_equals(xhr.response, null, 'xhr.response during LOADING') ;
58 assert_true(xhr.response instanceof ReadableStream, 58 assert_true(xhr.response instanceof ReadableStream,
59 'xhr.response should be ReadableStream during LOADING'); 59 'xhr.response should be ReadableStream during LOADING');
60 if (streamPromise === undefined) { 60 if (streamPromise === undefined) {
61 streamPromise = readStream(xhr.response); 61 streamPromise = readStream(xhr.response.getReader());
62 } 62 }
63 streamPromise.then(test.step_func(function(chunks) { 63 streamPromise.then(function(chunks) {
64 assert_equals(xhr.status, 200, 'xhr.status'); 64 assert_equals(xhr.status, 200, 'xhr.status');
65 65
66 // Check that we saw all states. 66 // Check that we saw all states.
67 assert_array_equals(seenStates, 67 assert_array_equals(seenStates,
68 [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]); 68 [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]);
69 assert_equals(xhr.response.state, 'closed', 'stream status');
70 var size = 0; 69 var size = 0;
71 for (var i = 0; i < chunks.length; ++i) { 70 for (var i = 0; i < chunks.length; ++i) {
72 size += chunks[i].byteLength; 71 size += chunks[i].byteLength;
73 } 72 }
74 assert_equals(size, 103746, 'response size'); 73 assert_equals(size, 103746, 'response size');
74 return xhr.response.closed;
75 }).then(function() {
75 test.done(); 76 test.done();
76 }), test.step_func(function(e) { 77 }).catch(test.step_func(function(e) {
77 assert_unreached('failed to read the response stream: ' + e); 78 throw e;
78 })); 79 }));
79 return; 80 return;
80 81
81 case xhr.DONE: 82 case xhr.DONE:
82 return; 83 return;
83 84
84 default: 85 default:
85 assert_unreached('Unexpected readyState: ' + xhr.readyState) 86 assert_unreached('Unexpected readyState: ' + xhr.readyState)
86 return; 87 return;
87 } 88 }
88 }); 89 });
89 90
90 xhr.open('GET', '/resources/test.ogv', true); 91 xhr.open('GET', '/resources/test.ogv', true);
91 xhr.send(); 92 xhr.send();
92 }); 93 });
93 94
94 if (global.importScripts) { 95 if (global.importScripts) {
95 // Worker case 96 // Worker case
96 done(); 97 done();
97 } 98 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698