| 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..0af609dc0272c89a196d837b95178cc8449645e9
|
| --- /dev/null
|
| +++ b/content/test/data/loader/async_resource_handler.html
|
| @@ -0,0 +1,84 @@
|
| +<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';
|
| +var iterations = 15;
|
| +for (var i = 0; i < iterations; i++) {
|
| + data = data + data + data;
|
| +}
|
| +
|
| +function sendResults(failures) {
|
| + var resultString = failures.length ? failures.join('\n') : "success";
|
| + 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\'.');
|
| + }
|
| + 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>
|
|
|