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 testInLoadingState = async_test('Test aborting XMLHttpRequest with responseT
ype set to "stream" in LOADING state.'); | 7 var testInLoadingState = async_test('Test aborting XMLHttpRequest with responseT
ype set to "stream" in LOADING state.'); |
8 | 8 |
9 testInLoadingState.step(function() | 9 testInLoadingState.step(function() |
10 { | 10 { |
(...skipping 13 matching lines...) Expand all Loading... |
24 assert_unreached('Unexpected readyState: UNSENT'); | 24 assert_unreached('Unexpected readyState: UNSENT'); |
25 return; | 25 return; |
26 | 26 |
27 case xhr.OPENED: | 27 case xhr.OPENED: |
28 case xhr.HEADERS_RECEIVED: | 28 case xhr.HEADERS_RECEIVED: |
29 return; | 29 return; |
30 | 30 |
31 case xhr.LOADING: | 31 case xhr.LOADING: |
32 var stream = xhr.response; | 32 var stream = xhr.response; |
33 assert_true(stream instanceof ReadableStream, 'xhr.response shoud be
ReadableStream'); | 33 assert_true(stream instanceof ReadableStream, 'xhr.response shoud be
ReadableStream'); |
34 assert_true(stream.state == 'readable' || stream.state == 'waiting',
'stream state before abort() call'); | |
35 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, x
hr.LOADING]); | 34 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, x
hr.LOADING]); |
36 | 35 |
37 xhr.abort(); | 36 xhr.abort(); |
38 | 37 |
39 assert_equals(stream.state, 'errored', 'stream state after abort() c
all'); | |
40 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState after abor
t() call'); | 38 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState after abor
t() call'); |
41 assert_equals(xhr.response, null, 'xhr.response after abort() call')
; | 39 assert_equals(xhr.response, null, 'xhr.response after abort() call')
; |
42 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, x
hr.LOADING, xhr.DONE]); | 40 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, x
hr.LOADING, xhr.DONE]); |
43 testInLoadingState.done(); | 41 stream.closed.then(testInLoadingState.step_func(assert_unreached), t
estInLoadingState.done.bind(testInLoadingState)); |
44 return; | 42 return; |
45 | 43 |
46 case xhr.DONE: | 44 case xhr.DONE: |
47 return; | 45 return; |
48 | 46 |
49 default: | 47 default: |
50 assert_unreached('Unexpected readyState: ' + xhr.readyState); | 48 assert_unreached('Unexpected readyState: ' + xhr.readyState); |
51 return; | 49 return; |
52 } | 50 } |
53 }); | 51 }); |
54 | 52 |
55 xhr.open('GET', '/resources/test.ogv', true); | 53 xhr.open('GET', '/resources/test.ogv', true); |
56 xhr.send(); | 54 xhr.send(); |
57 }); | 55 }); |
58 | 56 |
59 var testInDoneState = async_test('Test aborting XMLHttpRequest with responseType
set to "stream" in DONE state.'); | 57 var testInDoneState = async_test('Test aborting XMLHttpRequest with responseType
set to "stream" in DONE state.'); |
60 | 58 |
61 function readUntilDone(stream) { | 59 function readUntilDone(reader) { |
62 return stream.ready.then(function() { | 60 return reader.ready.then(function() { |
63 while (stream.state == 'readable') { | 61 while (reader.state == 'readable') { |
64 stream.read(); | 62 reader.read(); |
65 } | 63 } |
66 if (stream.state == 'closed' || stream.state == 'errored') { | 64 if (reader.state == 'closed' || reader.state == 'errored') { |
67 return stream.closed; | 65 return reader.closed; |
68 } else { | 66 } else { |
69 return readUntilDone(stream); | 67 return readUntilDone(reader); |
70 } | 68 } |
71 }); | 69 }); |
72 } | 70 } |
73 | 71 |
74 testInDoneState.step(function() | 72 testInDoneState.step(function() |
75 { | 73 { |
76 var xhr = new XMLHttpRequest; | 74 var xhr = new XMLHttpRequest; |
77 | 75 |
78 xhr.responseType = 'stream'; | 76 xhr.responseType = 'stream'; |
79 | 77 |
80 var seenStates = []; | 78 var seenStates = []; |
81 var stream; | 79 var stream; |
82 | 80 |
83 xhr.onreadystatechange = testInDoneState.step_func(function() { | 81 xhr.onreadystatechange = testInDoneState.step_func(function() { |
84 // onreadystatechange can be invoked multiple times in LOADING state. | 82 // onreadystatechange can be invoked multiple times in LOADING state. |
85 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le
ngth - 1]) | 83 if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.le
ngth - 1]) |
86 seenStates.push(xhr.readyState); | 84 seenStates.push(xhr.readyState); |
87 | 85 |
88 switch (xhr.readyState) { | 86 switch (xhr.readyState) { |
89 case xhr.UNSENT: | 87 case xhr.UNSENT: |
90 case xhr.OPENED: | 88 case xhr.OPENED: |
91 case xhr.HEADERS_RECEIVED: | 89 case xhr.HEADERS_RECEIVED: |
92 return; | 90 return; |
93 case xhr.LOADING: | 91 case xhr.LOADING: |
94 if (!stream) { | 92 if (!stream) { |
95 stream = xhr.response; | 93 stream = xhr.response; |
96 assert_true(stream instanceof ReadableStream, 'xhr.response shou
d be ReadableStream'); | 94 assert_true(stream instanceof ReadableStream, 'xhr.response shou
d be ReadableStream'); |
97 readUntilDone(stream).then(function() { | 95 readUntilDone(stream.getReader()).then(function() { |
98 assert_true(stream instanceof ReadableStream, 'xhr.response
should be ReadableStream'); | 96 assert_true(stream instanceof ReadableStream, 'xhr.response
should be ReadableStream'); |
99 assert_equals(stream.state, 'closed', 'stream state before a
bort() call'); | |
100 assert_equals(xhr.status, 200, 'xhr.status'); | 97 assert_equals(xhr.status, 200, 'xhr.status'); |
101 assert_not_equals(xhr.response, null, 'xhr.response during D
ONE'); | 98 assert_not_equals(xhr.response, null, 'xhr.response during D
ONE'); |
102 | 99 |
103 xhr.abort(); | 100 xhr.abort(); |
104 | 101 |
105 assert_equals(stream.state, 'closed', 'stream state after ab
ort() call'); | |
106 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState af
ter abort() call'); | 102 assert_equals(xhr.readyState, xhr.UNSENT, 'xhr.readyState af
ter abort() call'); |
107 assert_equals(xhr.response, null, 'xhr.response after abort(
) call'); | 103 assert_equals(xhr.response, null, 'xhr.response after abort(
) call'); |
108 | 104 |
109 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_REC
EIVED, xhr.LOADING, xhr.DONE]); | 105 assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_REC
EIVED, xhr.LOADING, xhr.DONE]); |
| 106 return stream.closed; |
| 107 }).then(function() { |
110 testInDoneState.done(); | 108 testInDoneState.done(); |
111 }).catch(testInDoneState.step_func(function(e) { | 109 }).catch(testInDoneState.step_func(function(e) { |
112 assert_unreached(e); | 110 assert_unreached(e); |
113 })); | 111 })); |
114 } | 112 } |
115 return; | 113 return; |
116 | 114 |
117 case xhr.DONE: | 115 case xhr.DONE: |
118 return; | 116 return; |
119 | 117 |
120 default: | 118 default: |
121 assert_unreached('Unexpected readyState: ' + xhr.readyState); | 119 assert_unreached('Unexpected readyState: ' + xhr.readyState); |
122 return; | 120 return; |
123 } | 121 } |
124 }); | 122 }); |
125 | 123 |
126 xhr.open('GET', '/resources/test.ogv', true); | 124 xhr.open('GET', '/resources/test.ogv', true); |
127 xhr.send(); | 125 xhr.send(); |
128 }); | 126 }); |
129 | 127 |
130 if (global.importScripts) { | 128 if (global.importScripts) { |
131 // Worker case | 129 // Worker case |
132 done(); | 130 done(); |
133 } | 131 } |
OLD | NEW |