| <!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> |