Branch data Line data Source code
1 [ + ]: 2 : import assert from 'node:assert/strict'; 2 : 2 : import { XMLHttpRequest } from '../../../lib/whatwg-xhr.js'; 3 : 2 : 4 : 2 : import { prepare_xhr_for_event_order_test } from './xmlhttprequest-event-order.js?q5'; 5 : 2 : import { assert_xhr_event_order_matches } from './xmlhttprequest-event-order.js?q5'; 6 : 2 : 7 [ + ]: 2 : export default (activeURL) => { 8 : 1 : 9 : 1 : let expect = ['sync 4', 'async 2', 'async 3', 'async 4']; 10 : 1 : let actual = []; 11 : 1 : 12 : 1 : let xhr_async = new XMLHttpRequest(); 13 : 1 : 14 : 1 : // first launch an async request, completes in 1 second 15 : 1 : xhr_async.open('GET', `${activeURL}/delay.py?ms=1000`, true); 16 : 1 : 17 [ + ]: 1 : xhr_async.onreadystatechange = () => { 18 : 3 : actual.push('async ' + xhr_async.readyState); 19 : 3 : 20 [ + ][ + ]: 3 : if(xhr_async.readyState === 4 && actual.indexOf('sync 4') > -1){ 21 : 1 : assert.deepStrictEqual(actual, expect); 22 : 1 : xhr_async.onreadystatechange = null; 23 : 1 : } 24 : 1 : }; 25 : 1 : 26 : 1 : xhr_async.send(); 27 : 1 : 28 [ + ]: 1 : setTimeout(() => { 29 : 1 : 30 : 1 : let xhr_sync = new XMLHttpRequest(); 31 : 1 : 32 : 1 : // here's a sync request that will take 2 seconds to finish 33 : 1 : xhr_sync.open('GET', `${activeURL}/delay.py?ms=2000`, false); 34 : 1 : 35 [ + ]: 1 : xhr_sync.onreadystatechange = () => { 36 : 1 : actual.push('sync ' + xhr_sync.readyState); 37 : 1 : 38 [ - ]: 1 : if(xhr_sync.readyState === 4 && actual.indexOf('async 4') > -1){ 39 : 0 : assert.deepStrictEqual(actual, expect); 40 : 0 : xhr_sync.onreadystatechange = null; 41 : 0 : } 42 : 1 : }; 43 : 1 : 44 : 1 : xhr_sync.send(); 45 : 1 : }, 10); 46 : 1 : } 47 : 2 : 48 : 2 : /* 49 : 2 : * send-sync-blocks-async.htm 50 : 2 : * 51 : 2 : 52 : 2 : <!DOCTYPE html> 53 : 2 : <html> 54 : 2 : <head> 55 : 2 : <script src="/resources/testharness.js"></script> 56 : 2 : <script src="/resources/testharnessreport.js"></script> 57 : 2 : <title>XMLHttpRequest: sync requests should block events on pending async requests</title> 58 : 2 : </head> 59 : 2 : 60 : 2 : <body> 61 : 2 : <div id="log"></div> 62 : 2 : 63 : 2 : <script type="text/javascript"> 64 : 2 : var test = async_test(); 65 : 2 : 66 : 2 : var expect = ['sync 4', 'async 2', 'async 3', 'async 4'] 67 : 2 : var actual = [] 68 : 2 : 69 : 2 : test.step(function() 70 : 2 : { 71 : 2 : var xhr_async = new XMLHttpRequest() 72 : 2 : xhr_async.open('GET', 'resources/delay.py?ms=1000', true) // first launch an async request, completes in 1 second 73 : 2 : xhr_async.onreadystatechange = test.step_func(() => { 74 : 2 : actual.push('async ' + xhr_async.readyState) 75 : 2 : if(xhr_async.readyState === 4 && actual.indexOf('sync 4')>-1){ 76 : 2 : VerifyResult() 77 : 2 : } 78 : 2 : }); 79 : 2 : xhr_async.send() 80 : 2 : 81 : 2 : test.step_timeout(() => { 82 : 2 : var xhr_sync = new XMLHttpRequest(); 83 : 2 : xhr_sync.open('GET', 'resources/delay.py?ms=2000', false) // here's a sync request that will take 2 seconds to finish 84 : 2 : xhr_sync.onreadystatechange = test.step_func(() => { 85 : 2 : actual.push('sync ' + xhr_sync.readyState) 86 : 2 : if(xhr_sync.readyState === 4 && actual.indexOf('async 4')>-1){ 87 : 2 : VerifyResult() 88 : 2 : } 89 : 2 : }); 90 : 2 : xhr_sync.send() 91 : 2 : }, 10); 92 : 2 : 93 : 2 : function VerifyResult() 94 : 2 : { 95 : 2 : test.step(function() 96 : 2 : { 97 : 2 : assert_array_equals(actual, expect); 98 : 2 : test.done(); 99 : 2 : }); 100 : 2 : }; 101 : 2 : }); 102 : 2 : </script> 103 : 2 : </body> 104 : 2 : </html> 105 : 2 : 106 : 2 : * 107 : 2 : * send-sync-blocks-async.htm 108 : 2 : */