Chromium Code Reviews| Index: LayoutTests/http/tests/xmlhttprequest/abort-after-send.html |
| diff --git a/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html b/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..4ff2de69a09dce0df37fdc4807bd5df5863c9d7a |
| --- /dev/null |
| +++ b/LayoutTests/http/tests/xmlhttprequest/abort-after-send.html |
| @@ -0,0 +1,81 @@ |
| +<!doctype html> |
| +<html> |
| +<head> |
| +<title>XMLHttpRequest: abort() while sending data</title> |
| +<script src="../resources/testharness.js"></script> |
| +<script src="../resources/testharnessreport.js"></script> |
| +</head> |
| +<body> |
| +Correct progress event sequencing on abort(), <a href="http://crbug.com/315488">bug 315488</a>. |
| +<script> |
| +// Based on http://w3c-test.org/web-platform-tests/master/XMLHttpRequest/abort-during-upload.htm |
| + |
| +var expected = [ |
| + 'upload', 'progress', |
| + 'upload', 'abort', |
| + 'upload', 'loadend', |
| + 'load', 'progress', |
| + 'load', 'abort', |
| + 'load', 'loadend']; |
| + |
| +var result = []; |
| +function recordEvent(e) { |
| + var kind = e.target instanceof XMLHttpRequest ? 'load' : 'upload'; |
| + result.push(kind, e.type); |
| +} |
| + |
| +var abortAfterSendLoadend = async_test("Progress event delivery on abort(), post-send() (async)"); |
| +abortAfterSendLoadend.step(function() { |
| + var xhr = new XMLHttpRequest(); |
| + xhr.open("POST", "resources/delay.php?iteration=1&delay=1000"); |
| + xhr.onprogress = recordEvent; |
| + xhr.onabort = recordEvent; |
| + xhr.onloadend = abortAfterSendLoadend.step_func(function (e) { |
| + recordEvent(e); |
| + assert_equals(xhr.readyState, XMLHttpRequest.DONE); |
| + assert_array_equals(result, expected); |
| + setTimeout(abortAfterSendLoadend.step_func(function () { |
| + assert_equals(xhr.readyState, XMLHttpRequest.UNSENT); |
| + abortAfterSendLoadend.done(); |
| + }), 100); |
|
tyoshino (SeeGerritForStatus)
2013/11/19 16:57:38
does this need to be 100?
sof
2013/11/19 18:57:03
No, just being wary of introducing test flakiness.
|
| + }); |
| + xhr.upload.onprogress = recordEvent; |
| + xhr.upload.onabort = recordEvent; |
| + xhr.upload.onloadend = recordEvent; |
| + |
| + xhr.send(); |
| + xhr.abort(); |
| +}); |
| + |
| +var resultSync = []; |
| +function recordEventSync(e) { |
| + var kind = e.target instanceof XMLHttpRequest ? 'load' : 'upload'; |
| + resultSync.push(kind, e.type); |
| +} |
| +var abortAfterSendSync = async_test("Progress event delivery on abort(), post-send() (sync)"); |
| +abortAfterSendSync.step(function() { |
| + var xhr = new XMLHttpRequest(); |
| + xhr.open("POST", "resources/delay.php?iteration=1&delay=10"); |
| + xhr.onreadystatechange = function () { |
| + if (xhr.readyState > XMLHttpRequest.OPENED && xhr.readyState != XMLHttpRequest.DONE) |
| + xhr.abort(); |
| + }; |
| + xhr.onprogress = recordEventSync; |
| + xhr.onabort = recordEventSync; |
| + xhr.onloadend = abortAfterSendSync.step_func(function (e) { |
| + recordEventSync(e); |
| + assert_equals(xhr.readyState, XMLHttpRequest.DONE); |
| + assert_array_equals(resultSync, expected); |
| + setTimeout(abortAfterSendSync.step_func(function () { |
| + assert_equals(xhr.readyState, XMLHttpRequest.UNSENT); |
| + abortAfterSendSync.done(); |
| + }), 100); |
|
tyoshino (SeeGerritForStatus)
2013/11/19 16:57:38
ditto
|
| + }); |
| + xhr.upload.onprogress = recordEventSync; |
| + xhr.upload.onabort = recordEventSync; |
| + xhr.upload.onloadend = recordEventSync; |
| + xhr.send(); |
| +}); |
| +</script> |
| +</body> |
| +</html> |