blob: f5d333638698232365441366138c6041fc2816b3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
<!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>
|