<!DOCTYPE html>
<html>
<head>
    <link rel="help" href="https://xhr.spec.whatwg.org/#handler-xhr-onerror" data-tested-assertations="../.." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol[1]/li[9]/ol/li[2] following::ol[1]/li[9]/ol/li[3]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#infrastructure-for-the-send()-method" data-tested-assertations="following::dt[4] following::dd[4]/p" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#network-error" data-tested-assertations=".." />
    <link rel="help" href="https://xhr.spec.whatwg.org/#request-error" data-tested-assertations="following::ol[1]/li[4] following::ol[1]/li[6] following::ol[1]/li[7] following::ol[1]/li[7]/ol/li[3] following::ol[1]/li[7]/ol/li[4] following::ol[1]/li[9] following::ol[1]/li[10]" />
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <title>XmlHttpRequest: The send() method: Fire a progress event named error when Network error happens (synchronous flag is unset)</title>
</head>

<body>
    <div id="log"></div>

    <script type="text/javascript">
        var test = async_test();

        test.step(function(){
            var xhr = new XMLHttpRequest();
            var expect =  ["loadstart", "upload.loadstart", 4, "upload.error", "upload.loadend", "error", "loadend"];
            var actual = [];

            xhr.onreadystatechange = function()
            {
                test.step(function()
                {
                    if (xhr.readyState == 4)
                    {
                        actual.push(xhr.readyState);
                    }
                });
            };

            xhr.onloadstart          = function(e){ actual.push(e.type); };
            xhr.onloadend          = function(e){ actual.push(e.type); VerifyResult()};
            xhr.onerror            = function(e){ actual.push(e.type); };

            xhr.upload.onloadstart   = function(e){ actual.push("upload." + e.type);};
            xhr.upload.onloadend   = function(e){ actual.push("upload." + e.type);};
            xhr.upload.onerror     = function(e){ actual.push("upload." + e.type); };

            function VerifyResult()
            {
                test.step(function()
                {
                    assert_array_equals(actual, expect);
                    test.done();
                });
            };

            xhr.open("POST", "http://nonexistent-origin.{{host}}:{{ports[http][0]}}", true);
            xhr.send("Test Message");
        });
    </script>
</body>
</html>
