<html>
<head>
<title>Test case for bug 40952</title>
</head>
<body>
<p>Test case for <a href="https://bugs.webkit.org/show_bug.cgi?id=40952"> bug 40952</a>: Onloadend event is not supported in XMLHttpRequest</p>
<p>Verify that a loadend ProgressEvent is dispatched after the abort ProgressEvent when an async request is aborted.</p>
<p> Verify also that a progress ProgressEvent is sent between readystatechange and abort ProgressEvent (<a href="https://bugs.webkit.org/show_bug.cgi?id=126575">bug 126575</a>).</p>
<p>PASS should appear below:</p>
<p id=console></p>
<script type="text/javascript">
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(message)
{
    var consoleElt = document.getElementById("console");
    consoleElt.appendChild(document.createTextNode(message));
}

var xhr = new XMLHttpRequest();
var results = "";
var expected = " loadstart readyState=DONE abort loadend";

function logProgressEvent(e) {
    results += " " + e.type;
}

function logUnexpectedProgressEvent(e) {
    results += " [unexpected ProgressEvent: " + e.type + "]";
    completeTest();   
}

function completeTest()
{
    log(results == expected ? "PASS" : "FAILED results : '" + results + "', expected : '" + expected + "'");
    if (window.testRunner)
        testRunner.notifyDone();
}

function test()
{
    xhr.onreadystatechange = function(e) {
        if (xhr.readyState == xhr.DONE)
            results += " readyState=DONE";
        else if (xhr.readyState > xhr.OPENED) {
            xhr.onprogress = logProgressEvent;
            xhr.abort();
        }
    }
    xhr.onloadstart = logProgressEvent;
    xhr.onabort = logProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logUnexpectedProgressEvent;
    xhr.onloadend = function(e) {
        logProgressEvent(e);
        completeTest();
    }

    xhr.open("GET", "resources/get.txt", true);
    xhr.send();
}

test();

</script>
</body>
