suspend_window.html (1843B)
1 <!-- 2 Any copyright is dedicated to the Public Domain. 3 http://creativecommons.org/publicdomain/zero/1.0/ 4 --> 5 <!DOCTYPE HTML> 6 <html> 7 <head> 8 <meta charset="utf-8"> 9 <title>Test for DOM Worker Threads Suspending</title> 10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 11 </head> 12 <body> 13 <pre id="test"> 14 <div id="output"></div> 15 <script class="testbody" type="text/javascript"> 16 17 var worker; 18 var finish = false; 19 var bc = new BroadcastChannel("suspendWindow"); 20 bc.onmessage = (msgEvent) => { 21 var msg = msgEvent.data; 22 var command = msg.command; 23 if (command == "startWorker") { 24 startWorker(); 25 } else if (command == "navigate") { 26 window.location = "suspend_blank.html"; 27 } else if (command == "finish") { 28 finish = true; 29 terminateWorker(); 30 bc.postMessage({command: "finished"}); 31 bc.close(); 32 window.close(); 33 } 34 } 35 36 function messageCallback(data) { 37 if (finish) { 38 return; 39 } 40 bc.postMessage({command: "messageCallback", data}); 41 } 42 43 function errorCallback(msg) { 44 if (finish) { 45 return; 46 } 47 bc.postMessage({command: "errorCallback", data: msg}); 48 } 49 50 var output = document.getElementById("output"); 51 52 function terminateWorker() { 53 if (worker) { 54 worker.postMessage("stop"); 55 worker = null; 56 } 57 } 58 59 function startWorker() { 60 var lastData; 61 worker = new Worker("suspend_worker.js"); 62 63 worker.onmessage = function(event) { 64 output.textContent = (lastData ? lastData + " -> " : "") + event.data; 65 lastData = event.data; 66 messageCallback(event.data); 67 }; 68 69 worker.onerror = function(event) { 70 this.terminate(); 71 errorCallback(event.message); 72 }; 73 } 74 75 window.onload = () => { 76 bc.postMessage({command: "loaded"}); 77 } 78 79 </script> 80 </pre> 81 </body> 82 </html>