OLD | NEW |
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(reader) { | 20 function readStream(reader) { |
21 var chunks = []; | 21 var chunks = []; |
22 function rec(resolve, reject) { | 22 function consume() { |
23 while (reader.state === 'readable') { | 23 return reader.read().then(function(result) { |
24 chunks.push(reader.read()); | 24 if (result.done) { |
25 } | 25 return chunks; |
26 if (reader.state === 'closed') { | 26 } else { |
27 resolve(chunks); | 27 chunks.push(result.value); |
28 return; | 28 return consume(); |
29 } | 29 } |
30 reader.ready.then(function() { | 30 }); |
31 rec(resolve, reject); | |
32 }).catch(reject); | |
33 } | 31 } |
34 return new Promise(rec); | 32 return consume(); |
35 } | 33 } |
36 var streamPromise = undefined; | 34 var streamPromise = undefined; |
37 | 35 |
38 xhr.onreadystatechange = test.step_func(function() { | 36 xhr.onreadystatechange = test.step_func(function() { |
39 // onreadystatechange can be invoked multiple times in LOADING state. | 37 // onreadystatechange can be invoked multiple times in LOADING state. |
40 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le
ngth - 1]) | 38 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le
ngth - 1]) |
41 seenStates.push(xhr.readyState); | 39 seenStates.push(xhr.readyState); |
42 | 40 |
43 switch (xhr.readyState) { | 41 switch (xhr.readyState) { |
44 case xhr.UNSENT: | 42 case xhr.UNSENT: |
(...skipping 19 matching lines...) Expand all Loading... |
64 assert_equals(xhr.status, 200, 'xhr.status'); | 62 assert_equals(xhr.status, 200, 'xhr.status'); |
65 | 63 |
66 // Check that we saw all states. | 64 // Check that we saw all states. |
67 assert_array_equals(seenStates, | 65 assert_array_equals(seenStates, |
68 [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]); | 66 [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]); |
69 var size = 0; | 67 var size = 0; |
70 for (var i = 0; i < chunks.length; ++i) { | 68 for (var i = 0; i < chunks.length; ++i) { |
71 size += chunks[i].byteLength; | 69 size += chunks[i].byteLength; |
72 } | 70 } |
73 assert_equals(size, 103746, 'response size'); | 71 assert_equals(size, 103746, 'response size'); |
74 return xhr.response.closed; | 72 return xhr.response.getReader().closed; |
75 }).then(function() { | 73 }).then(function() { |
76 test.done(); | 74 test.done(); |
77 }).catch(test.step_func(function(e) { | 75 }).catch(test.step_func(function(e) { |
78 throw e; | 76 throw e; |
79 })); | 77 })); |
80 return; | 78 return; |
81 | 79 |
82 case xhr.DONE: | 80 case xhr.DONE: |
83 return; | 81 return; |
84 | 82 |
85 default: | 83 default: |
86 assert_unreached('Unexpected readyState: ' + xhr.readyState) | 84 assert_unreached('Unexpected readyState: ' + xhr.readyState) |
87 return; | 85 return; |
88 } | 86 } |
89 }); | 87 }); |
90 | 88 |
91 xhr.open('GET', '/resources/test.ogv', true); | 89 xhr.open('GET', '/resources/test.ogv', true); |
92 xhr.send(); | 90 xhr.send(); |
93 }); | 91 }); |
94 | 92 |
95 if (global.importScripts) { | 93 if (global.importScripts) { |
96 // Worker case | 94 // Worker case |
97 done(); | 95 done(); |
98 } | 96 } |
OLD | NEW |