<!DOCTYPE html> <html> <head> <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 = test.step_func(() => { actual.push('async ' + xhr_async.readyState) if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){ VerifyResult() } }); xhr_async.send() test.step_timeout(() => { 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 = test.step_func(() => { 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>