mirror of
https://github.com/servo/servo.git
synced 2025-08-05 21:50:18 +01:00
66 lines
1.9 KiB
HTML
66 lines
1.9 KiB
HTML
<!DOCTYPE html>
|
|
<meta charset="utf-8">
|
|
<title>Child frame with worker marked as frozen</title>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<body>
|
|
<script>
|
|
async_test((t) => {
|
|
|
|
var child = document.createElement('iframe');
|
|
|
|
var loaded = false;
|
|
var frozen = false;
|
|
var resumed = false;
|
|
|
|
var subworker_freeze_count = 0;
|
|
var subworker2_freeze_count = 0;
|
|
var subworker_count = 0;
|
|
var subworker2_count = 0;
|
|
var bc = new BroadcastChannel('subworker_channel');
|
|
bc.onmessage = t.step_func((e) => {
|
|
if (e.data == 'subworker') {
|
|
subworker_count++;
|
|
} else if (e.data == 'subworker2') {
|
|
subworker2_count++;
|
|
} else {
|
|
assert_unreached('bad message');
|
|
}
|
|
|
|
// Ensure that if we have resumed that we get at least
|
|
// one message from each worker.
|
|
if (loaded && frozen && resumed &&
|
|
subworker2_count > subworker2_freeze_count &&
|
|
subworker_count > subworker_freeze_count) {
|
|
t.done();
|
|
} else if (loaded && frozen && !resumed) {
|
|
// Ensure that at most one message is sent after the frozen state.
|
|
assert_true(subworker_count - subworker_freeze_count <= 1);
|
|
assert_true(subworker2_count - subworker2_freeze_count <= 1);
|
|
}
|
|
});
|
|
|
|
window.addEventListener('message', t.step_func((e) => {
|
|
if (e.data == "load") {
|
|
loaded = true;
|
|
} else if (e.data == "freeze") {
|
|
assert_true(loaded);
|
|
frozen = true;
|
|
subworker_freeze_count = subworker_count;
|
|
subworker2_freeze_count = subworker2_count;
|
|
child.style = "display: block";
|
|
} else if (e.data == "resume") {
|
|
assert_true(loaded);
|
|
assert_true(frozen);
|
|
resumed = true;
|
|
}
|
|
}));
|
|
|
|
child.allow = "execution-while-not-rendered 'none'";
|
|
child.src = "resources/subframe_worker.html";
|
|
document.body.appendChild(child);
|
|
child.style = "display: none";
|
|
}, "Child frame frozen");
|
|
|
|
</script>
|
|
</body>
|