worker-dispay-none.tentative.html (1951B)
1 <!DOCTYPE html> 2 <meta charset="utf-8"> 3 <title>Child frame with worker marked as frozen</title> 4 <script src="/resources/testharness.js"></script> 5 <script src="/resources/testharnessreport.js"></script> 6 <body> 7 <script> 8 async_test((t) => { 9 10 var child = document.createElement('iframe'); 11 12 var loaded = false; 13 var frozen = false; 14 var resumed = false; 15 16 var subworker_freeze_count = 0; 17 var subworker2_freeze_count = 0; 18 var subworker_count = 0; 19 var subworker2_count = 0; 20 var bc = new BroadcastChannel('subworker_channel'); 21 bc.onmessage = t.step_func((e) => { 22 if (e.data == 'subworker') { 23 subworker_count++; 24 } else if (e.data == 'subworker2') { 25 subworker2_count++; 26 } else { 27 assert_unreached('bad message'); 28 } 29 30 // Ensure that if we have resumed that we get at least 31 // one message from each worker. 32 if (loaded && frozen && resumed && 33 subworker2_count > subworker2_freeze_count && 34 subworker_count > subworker_freeze_count) { 35 t.done(); 36 } else if (loaded && frozen && !resumed) { 37 // Ensure that at most one message is sent after the frozen state. 38 assert_true(subworker_count - subworker_freeze_count <= 1); 39 assert_true(subworker2_count - subworker2_freeze_count <= 1); 40 } 41 }); 42 43 window.addEventListener('message', t.step_func((e) => { 44 if (e.data == "load") { 45 loaded = true; 46 } else if (e.data == "freeze") { 47 assert_true(loaded); 48 frozen = true; 49 subworker_freeze_count = subworker_count; 50 subworker2_freeze_count = subworker2_count; 51 child.style = "display: block"; 52 } else if (e.data == "resume") { 53 assert_true(loaded); 54 assert_true(frozen); 55 resumed = true; 56 } 57 })); 58 59 child.allow = "execution-while-not-rendered 'none'"; 60 child.src = "resources/subframe_worker.html"; 61 document.body.appendChild(child); 62 child.style = "display: none"; 63 }, "Child frame frozen"); 64 65 </script> 66 </body>