﻿<!DOCTYPE html>
<html>
<head>
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-abort()-method" data-tested-assertations="following-sibling::ol/li[4]/ol/li[3] following-sibling::ol/li[4]/ol/li[5] following-sibling::ol/li[4]/ol/li[6] following-sibling::ol/li[4]/ol/li[7]/ol/li[3] following-sibling::ol/li[4]/ol/li[7]/ol/li[4] following-sibling::ol/li[5]" />
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <title>XMLHttpRequest: The abort() method: abort and loadend events</title>
</head>

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

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

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

            xhr.onreadystatechange = function()
            {
                test.step(function()
                {
                     actual.push(xhr.readyState);
                });
            };
            xhr.onloadstart = function()
            {
                test.step(function()
                {
                    var readyState = xhr.readyState;
                    if (readyState == 1)
                    {
                        xhr.abort();
                        VerifyResult();
                    }else{
                        assert_unreached('Loadstart event should not fire in readyState '+readyState);
                    }
                });
            };

            xhr.onloadend          = function(e){ actual.push(e.type); };
            xhr.onabort            = function(e){ actual.push(e.type); };

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

            function VerifyResult()
            {
                test.step(function()
                {
                    assert_array_equals(actual, expect);
                    assert_equals(xhr.readyState, 0, 'state should be UNSENT');
                    test.done();
                });
            };

            xhr.open("POST", "./resources/content.py", true);
            xhr.send("Test Message");
        });
    </script>
</body>
</html>
