test_suppressed_microtasks.html (1917B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Test microtask suppression</title> 6 <script src="/tests/SimpleTest/SimpleTest.js"></script> 7 <link rel="stylesheet" href="/tests/SimpleTest/test.css"/> 8 <script> 9 SimpleTest.waitForExplicitFinish(); 10 11 var previousTask = -1; 12 function test() { 13 let win = window.open("about:blank"); 14 win.onmessage = function() { 15 win.start = win.performance.now(); 16 win.didRunMicrotask = false; 17 win.onmessage = function() { 18 ok(win.didRunMicrotask, "Should have run a microtask."); 19 let period = win.performance.now() - win.start; 20 win.opener.ok( 21 period < 200, 22 "Running a task should be fast. Took " + period + "ms."); 23 win.onmessage = null; 24 } 25 win.queueMicrotask(function() { win.didRunMicrotask = true; }); 26 win.postMessage("measurementMessage", "*"); 27 } 28 win.postMessage("initialMessage", "*"); 29 30 const last = 500000; 31 for (let i = 0; i < last + 1; ++i) { 32 window.queueMicrotask(function() { 33 // Check that once microtasks are unsuppressed, they are handled in 34 // the correct order. 35 if (previousTask != i - 1) { 36 // Explicitly optimize out cases which pass. 37 ok(false, "Microtasks should be handled in order."); 38 } 39 previousTask = i; 40 if (i == last) { 41 win.close(); 42 SimpleTest.finish(); 43 } 44 }); 45 } 46 47 // Synchronous XMLHttpRequest suppresses microtasks. 48 var xhr = new XMLHttpRequest(); 49 xhr.open("GET", "slow.sjs", false); 50 xhr.send(); 51 is(previousTask, -1, "Shouldn't have run microtasks during a sync XHR."); 52 } 53 </script> 54 </head> 55 <body onload="test()"> 56 <p id="display"></p> 57 <div id="content" style="display: none"></div> 58 <pre id="test"></pre> 59 </body> 60 </html>