﻿<!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>
