<p> Test for: <ul><li><a href="https://bugs.webkit.org/show_bug.cgi?id=40996">bug 40996<a>: Progress event should not be fired during synchronous XMLHttpRequest;</li>
<li><a href="https://bugs.webkit.org/show_bug.cgi?id=17502">bug 17502<a>: Assertion failure when trying to restart a sync XMLHttpRequest as an async one from onreadystatechange.</li></ul>
<pre id=log></pre>

<script type="text/javascript">
if (window.testRunner)
    testRunner.dumpAsText();

function log(message)
{
    document.getElementById("log").innerHTML += message + "\n";
}

function test(url)
{
    try {
        var xhr = new XMLHttpRequest();
        xhr.open("POST", url, false);
        xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

        xhr.addEventListener("loadstart", function () { log("loadstart"); }, true);
        xhr.addEventListener("readystatechange", function () { log("readystatechange " + xhr.readyState); }, true);
        xhr.addEventListener("progress", function () { log("progress"); }, true);
        xhr.addEventListener("load", function () { log("load"); }, true);
        xhr.addEventListener("error", function () { log("error"); }, true);
        xhr.addEventListener("loadend", function () { log("loadend"); }, true);

        xhr.upload.addEventListener("loadstart", function () { log("upload.loadstart"); }, true);
        xhr.upload.addEventListener("readystatechange", function () { log("upload.readystatechange"); }, true); // No such event on upload object, but let's add a listener anyway.
        xhr.upload.addEventListener("progress", function () { log("upload.progress"); }, true);
        xhr.upload.addEventListener("load", function () { log("upload.load"); }, true);
        xhr.upload.addEventListener("error", function () { log("upload.error"); }, true);
        xhr.upload.addEventListener("loadend", function () { log("upload.loadend"); }, true);

        xhr.send("foobar");
    } catch (ex) {
        log(ex);
    }
}


log("Step 1: Same origin request");
test("xmlhttprequest-sync-vs-async-assertion-failure.html");

log("\nStep 2: Cross origin request, disallowed");
test("http://localhost:8000/xmlhttprequest/xmlhttprequest-sync-vs-async-assertion-failure.html");

log("\nStep 3: Cross origin request, allowed");
test("http://localhost:8000/xmlhttprequest/resources/access-control-basic-allow.cgi");

log("\nStep 4: Cross origin request, check that preflight isn't attempted");
test("http://localhost:8000/xmlhttprequest/resources/access-control-basic-post-fail-non-simple.cgi");
</script>

</body></html>
