Index: LayoutTests/http/tests/xmlhttprequest/response-stream-abort.html |
diff --git a/LayoutTests/http/tests/xmlhttprequest/response-stream-abort.html b/LayoutTests/http/tests/xmlhttprequest/response-stream-abort.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4fa00a734c4ea5c79f5e68a8e9e1b6b1d76fe351 |
--- /dev/null |
+++ b/LayoutTests/http/tests/xmlhttprequest/response-stream-abort.html |
@@ -0,0 +1,100 @@ |
+<!DOCTYPE html> |
+<html> |
+<body> |
+<script src="../resources/testharness.js"></script> |
+<script src="../resources/testharnessreport.js"></script> |
+<script type="text/javascript"> |
+// FIXME: Check loading from Stream after abort once loading API is ready. |
+var testInLoadingState = async_test("Test aborting XMLHttpRequest with responseType set to 'stream' in LOADING state."); |
+ |
+testInLoadingState.step(function() |
+{ |
+ var xhr = new XMLHttpRequest; |
+ |
+ xhr.responseType = "stream"; |
+ |
+ var seenStates = []; |
+ |
+ xhr.onreadystatechange = testInLoadingState.step_func(function() { |
+ // onreadystatechange can be invoked multiple times in LOADING state. |
+ if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.length - 1]) |
+ seenStates.push(xhr.readyState); |
+ |
+ switch (xhr.readyState) { |
+ case xhr.UNSENT: |
+ assert_unreached('Unexpected readyState: UNSENT'); |
+ return; |
+ |
+ case xhr.OPENED: |
+ case xhr.HEADERS_RECEIVED: |
+ return; |
+ |
+ case xhr.LOADING: |
+ xhr.abort(); |
+ |
+ assert_equals(xhr.readyState, xhr.DONE, "xhr.readyState after abort() call"); |
+ assert_equals(xhr.response, null, "xhr.response after abort() call"); |
+ return; |
+ |
+ case xhr.DONE: |
+ assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]); |
+ testInLoadingState.done(); |
+ return; |
+ |
+ default: |
+ assert_unreached('Unexpected readyState: ' + xhr.readyState); |
+ return; |
+ } |
+ }); |
+ |
+ xhr.open('GET', '../resources/test.ogv', true); |
+ xhr.send(); |
+}); |
+ |
+var testInDoneState = async_test("Test aborting XMLHttpRequest with responseType set to 'stream' in DONE state."); |
+ |
+testInDoneState.step(function() |
+{ |
+ var xhr = new XMLHttpRequest; |
+ |
+ xhr.responseType = "stream"; |
+ |
+ var seenStates = []; |
+ |
+ xhr.onreadystatechange = testInDoneState.step_func(function() { |
+ // onreadystatechange can be invoked multiple times in LOADING state. |
+ if (seenStates.length == 0 || xhr.readyState != seenStates[seenStates.length - 1]) |
+ seenStates.push(xhr.readyState); |
+ |
+ switch (xhr.readyState) { |
+ case xhr.UNSENT: |
+ case xhr.OPENED: |
+ case xhr.HEADERS_RECEIVED: |
+ case xhr.LOADING: |
+ return; |
+ |
+ case xhr.DONE: |
+ assert_equals(xhr.status, 200, "xhr.status"); |
+ assert_not_equals(xhr.response, null, "xhr.response during DONE"); |
+ |
+ xhr.abort(); |
+ |
+ assert_equals(xhr.readyState, xhr.UNSENT, "xhr.readyState after abort() call"); |
+ assert_equals(xhr.response, null, "xhr.response after abort() call"); |
+ |
+ assert_array_equals(seenStates, [xhr.OPENED, xhr.HEADERS_RECEIVED, xhr.LOADING, xhr.DONE]); |
+ testInDoneState.done(); |
+ return; |
+ |
+ default: |
+ assert_unreached('Unexpected readyState: ' + xhr.readyState); |
+ return; |
+ } |
+ }); |
+ |
+ xhr.open('GET', '../resources/test.ogv', true); |
+ xhr.send(); |
+}); |
+</script> |
+</body> |
+</html> |