<head>
<script>
if (window.testRunner) {
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
}

function log(text) {
    document.body.appendChild(document.createTextNode(text));
    document.body.appendChild(document.createElement("br"));
}

function runTest(shouldAbort) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        log("Asynchronous onreadystatechange status: " + xhr.status + ", readyState:" + xhr.readyState + ", responseText: " + xhr.responseText);
    }
    xhr.ontimeout = function () {
        log("timeout - this should not be called.");
    };
    xhr.onerror = function () {
        log("onerror was called.");
        if (shouldAbort) // The second time this is called.
            testRunner.notifyDone();
    };

    xhr.open("GET", "resources/url-blocking-test.js", true);
    xhr.timeout = 1; // 1 ms should be too late if it is blocked.
    try {
        xhr.send();
    } catch (error) {
        log("Asynchronous error: " + error);
    }
    if (shouldAbort)
        xhr.abort(); // This should not crash, obviously.
    log("Finished runTest.  Waiting for callbacks");
}

function runTests() {
    runTest(false);
    runTest(true);
}
</script>
</head>
<body onload="runTests()">
</body>
