62 lines
2 KiB
HTML
62 lines
2 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Test microtask suppression</title>
|
|
<script src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
|
|
<script>
|
|
SimpleTest.waitForExplicitFinish();
|
|
|
|
var previousTask = -1;
|
|
function test() {
|
|
let win = window.open("about:blank");
|
|
win.onload = function() {
|
|
win.onmessage = function() {
|
|
win.start = win.performance.now();
|
|
win.didRunMicrotask = false;
|
|
win.onmessage = function() {
|
|
ok(win.didRunMicrotask, "Should have run a microtask.");
|
|
let period = win.performance.now() - win.start;
|
|
win.opener.ok(
|
|
period < 200,
|
|
"Running a task should be fast. Took " + period + "ms.");
|
|
win.onmessage = null;
|
|
}
|
|
win.queueMicrotask(function() { win.didRunMicrotask = true; });
|
|
win.postMessage("measurementMessage", "*");
|
|
}
|
|
win.postMessage("initialMessage", "*");
|
|
|
|
const last = 500000;
|
|
for (let i = 0; i < last + 1; ++i) {
|
|
window.queueMicrotask(function() {
|
|
// Check that once microtasks are unsuppressed, they are handled in
|
|
// the correct order.
|
|
if (previousTask != i - 1) {
|
|
// Explicitly optimize out cases which pass.
|
|
ok(false, "Microtasks should be handled in order.");
|
|
}
|
|
previousTask = i;
|
|
if (i == last) {
|
|
win.close();
|
|
SimpleTest.finish();
|
|
}
|
|
});
|
|
}
|
|
|
|
// Synchronous XMLHttpRequest suppresses microtasks.
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("GET", "slow.sjs", false);
|
|
xhr.send();
|
|
is(previousTask, -1, "Shouldn't have run microtasks during a sync XHR.");
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
<body onload="test()">
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none"></div>
|
|
<pre id="test"></pre>
|
|
</body>
|
|
</html>
|