<!DOCTYPE html>
<html>
<head>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <title>XMLHttpRequest: The send() method: timeout is not 0 </title>
</head>

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

    <script type="text/javascript">
        async_test(t => {
            const xhr = new XMLHttpRequest(),
                  expect = [4, "", "upload.timeout", "upload.loadend", "timeout", "loadend"];
            let actual = [];

            xhr.onreadystatechange = t.step_func(() => {
                if (xhr.readyState == 4) {
                    actual.push(xhr.readyState, xhr.response);
                }
            });

            xhr.onloadend = t.step_func_done(e => {
                assert_equals(e.loaded, 0);
                assert_equals(e.total, 0);
                actual.push(e.type);
                assert_array_equals(actual, expect);
            });

            xhr.ontimeout = t.step_func(e => {
                assert_equals(e.loaded, 0);
                assert_equals(e.total, 0);
                actual.push(e.type);
            });


            xhr.upload.onloadend = t.step_func(e => {
                assert_equals(e.loaded, 0);
                assert_equals(e.total, 0);
                actual.push("upload." + e.type);
            });

            xhr.upload.ontimeout = t.step_func(e => {
                assert_equals(e.loaded, 0);
                assert_equals(e.total, 0);
                actual.push("upload." + e.type);
            });


            let content = "";
            for (var i = 0; i < 121026; i++) {
                content += "[" + i + "]";
            }

            xhr.open("POST", "./resources/trickle.py", true);
            xhr.timeout = 1;
            xhr.send(content);
        });
    </script>
</body>
</html>
