﻿<!DOCTYPE html>
<html>
<head>
    <!--  This behaviour is not explicitly spelled out in the spec.
    It does say "queue tasks" under the "if the synchronous flag is unset" header in point 10 of the "send" algorithm..  -->
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following-sibling::ol/li[10]/dl/dd/dl/dd[2]/p[3]" />
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <title>XMLHttpRequest: sync requests should block events on pending async requests</title>
</head>

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

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

        var expect = ['sync 4', 'async 2', 'async 3', 'async 4']
        var actual = []

        test.step(function()
        {
            var xhr_async = new XMLHttpRequest()
            xhr_async.open('GET', 'resources/delay.py?ms=1000', true) // first launch an async request, completes in 1 second
            xhr_async.onreadystatechange = function()
            {
                test.step(function()
                {
                     actual.push('async ' + xhr_async.readyState)
                     if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){
                        VerifyResult()
                    }

                });
            };
            xhr_async.send()

            setTimeout(function(){
                var xhr_sync = new XMLHttpRequest();
                xhr_sync.open('GET', 'resources/delay.py?ms=2000', false) // here's a sync request that will take 2 seconds to finish
                xhr_sync.onreadystatechange = function()
                {
                    test.step(function()
                    {
                         actual.push('sync ' + xhr_sync.readyState)
                         if(xhr_sync.readyState === 4 && actual.indexOf('async 4')>-1){
                            VerifyResult()
                        }
                    });
                };
                xhr_sync.send()

            }, 10);

            function VerifyResult()
            {
                test.step(function()
                {
                    assert_array_equals(actual, expect);
                    test.done();
                });
            };
        });
    </script>
</body>
</html>
