<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 load or abort ProgressEvent when a synchronous upload request completes normally or is aborted.</p>
<p>PASS 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;

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

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

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

function testNormal()
{
    results = "";

    xhr.onloadstart = logUnexpectedProgressEvent;
    xhr.onabort = logUnexpectedProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logProgressEvent;
    xhr.onloadend = logProgressEvent;

    xhr.open("POST", "resources/post-echo.cgi", false); 
    xhr.send("data");
    
    completeTest(" load loadend");
}

function testAbort()
{
    results = "";

    xhr.onloadstart = logUnexpectedProgressEvent;
    xhr.onabort = logUnexpectedProgressEvent;
    xhr.onerror = logUnexpectedProgressEvent;
    xhr.onload = logProgressEvent;
    xhr.onloadend = logProgressEvent;
    xhr.onreadystatechange = function(e) {
        // abort in DONE state should do nothing.
        if (xhr.readyState == xhr.DONE)
            xhr.abort();
    }

    xhr.open("POST", "resources/get.txt", false); 
    try {
        xhr.send();
    }
    catch (e) {
        if (e.code != e.NETWORK_ERR)
            results += " " + e;
    }
    
    completeTest(" load loadend");
}

testNormal();
testAbort();

</script>
</body>
