Chromium Code Reviews| Index: content/test/data/loader/async_resource_handler.html |
| diff --git a/content/test/data/loader/async_resource_handler.html b/content/test/data/loader/async_resource_handler.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3301db78e87a50a1a8b636ce83ead55f82cea1ec |
| --- /dev/null |
| +++ b/content/test/data/loader/async_resource_handler.html |
| @@ -0,0 +1,83 @@ |
| +<html> |
| +<head> |
| +<script> |
| +var ranProgressHandler = false; |
| +var completedUpload = false; |
| + |
| +var asyncXHR; |
| +var lastSeenProgress = 0; |
| +// Build a long string, fast. |
| +// data.length = 2 * 3^15 = 28697814 |
| + |
| +var data = "yo"; |
|
mmenke
2015/08/27 22:46:57
nit: Single quotes are actually preferred in Java
|
| +var iterations = 15; |
| +for (var i = 0; i < iterations; i++) { |
| + data = data + data + data; |
| +} |
| + |
| +function sendResults(failures) { |
| + var resultString = failures.join("\n"); |
| + window.domAutomationController.send(resultString); |
| +} |
| + |
| +function progressListener(e) { |
| + var progress = e.loaded; |
| + var failureList = []; |
| + |
| + // The |progress| event should not be called after the |load| event. |
| + // e.loaded should never hold the same value twice. |
| + if (completedUpload) |
| + failureList.push("Progress event occurred after load event."); |
| + if (progress <= lastSeenProgress) |
| + failureList.push("No forward upload progress between events."); |
| + if (e.total != data.length) |
| + failureList.push("Upload total does not match payload size."); |
| + if (progress > e.total) |
| + failureList.push("Upload progress exceeds payload size."); |
| + |
| + if (failureList.length) |
| + sendResults(failureList); |
| + |
| + lastSeenProgress = progress; |
| + ranProgressHandler = true; |
| +} |
| + |
| +function completedUpload(e) { |
| + completedUpload = true; |
| +} |
| + |
| +function onFinished(e) { |
| + var failureList = []; |
| + if (!ranProgressHandler) |
| + failureList.push("Finished upload without firing a progress event."); |
| + if (lastSeenProgress != data.length) |
| + failureList.push("Final progress event before data transfer completed."); |
| + if (this.responseText != "hello") |
| + failureList.push("Receieved responseText: '" + this.responseText +"'. Expected 'hello'"); |
|
mmenke
2015/08/27 22:46:57
nit: lines should be at most 80 characters (And y
|
| + |
| + sendResults(failureList); |
| +} |
| + |
| +function onError(e) { |
| + sendResults(["Received an XHR error event."]); |
| +} |
| + |
| +function WaitForAsyncXHR(url) { |
| + asyncXHR = new XMLHttpRequest(); |
| + asyncXHR.addEventListener('load', onFinished); |
| + asyncXHR.addEventListener('error', onError); |
| + |
| + asyncXHR.upload.addEventListener('progress', progressListener); |
| + asyncXHR.upload.addEventListener('load', completedUpload); |
| + |
| + asyncXHR.open('POST', url, true); |
| + |
| + asyncXHR.setRequestHeader('Content-Type', 'text/plain'); |
| + asyncXHR.send(data); |
| +} |
| +</script> |
| +</head> |
| +<body> |
| +This page sends an asynchronous XMLHttpRequest on calling WaitForAsyncXHR(url). |
| +</body> |
| +</html> |