https://github.com/web-platform-tests/wpt
Raw File
Tip revision: 322a0d9b5c7d79d4da4fc7ebd0c6bc60a7effe74 authored by Hallvord Reiar M. Steen on 21 June 2016, 13:44:08 UTC
Misc improvements to progress event tests
Tip revision: 322a0d9
send-sync-blocks-async.htm
<!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>
back to top