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

Unified Diff: LayoutTests/http/tests/xmlhttprequest/abort-after-send.html

Issue 66323004: XHR: compliant event sequencing on request errors and aborts. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
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>

Powered by Google App Engine
This is Rietveld 408576698