| <html> |
| <body onload="onLoad()"> |
| <script> |
| |
| function log(message) { |
| var div = document.createElement('div'); |
| div.innerText = message; |
| document.getElementById('console').appendChild(div); |
| } |
| |
| function strike(id) { |
| document.getElementById(id).style.textDecoration = "line-through" |
| } |
| |
| function onLoad() { |
| if (!Worker.prototype.postMessage) { // fake workers |
| strike('s1'); |
| strike('s2'); |
| log('[using fake workers]'); |
| } else { |
| log('[using real workers]'); |
| } |
| } |
| |
| var primeWorker; |
| var invalidWorker; |
| var count; |
| var timer; |
| |
| function startWorkers() { |
| startButton.disabled = true; |
| |
| primeWorker = new Worker('resources/worker-primes.js'); |
| primeWorker.onmessage = onMessage; |
| primeWorker.onerror = onError; |
| primeWorker.postMessage(2); |
| count = 3; |
| |
| timer = setInterval(onTimer, 1000); |
| try { |
| invalidWorker = new Worker('non-existent-worker.js'); |
| } catch(e) { |
| } |
| log('Started worker'); |
| } |
| |
| function onTimer() { |
| primeWorker.postMessage(count); |
| count+=2; |
| } |
| |
| function onMessage(event) { |
| if (event.data[1]) { |
| log(event.data[0]); |
| if (event.data[0] === 5) |
| strike('s6'); |
| } |
| } |
| |
| function onError(event) { |
| log('Error in worker: ' + event.message); |
| strike('s8'); |
| } |
| |
| function causeError() { |
| primeWorker.postMessage('forty two'); |
| } |
| |
| function stopWorker() { |
| log('Stopping worker...'); |
| if (timer) { |
| clearInterval(timer); |
| timer = 0; |
| } |
| primeWorker.terminate(); |
| startButton.disabled = false; |
| } |
| |
| </script> |
| |
| <h1>Tests debugging of HTML5 Workers</h1> |
| |
| <ol> |
| |
| <li id="s1">Open DevTools, Scripts Panel; Tick Debug on Workers sidebar.</li> |
| <li id="s2">Reload the page.</li> |
| <li id="s3"><button onclick="startWorkers()" id="startButton">Start Worker</button></li> |
| <li id="s4">Observe 2 workers appear in the worker sidebar pane (including non-existent-worker.js)"</li> |
| <li id="s5">Observe worker-primes.js and primes.js appear in scripts drop-down box.</li> |
| <li id="s6">Assure primes are being logged to test console below.</li> |
| <li id="s7">Set a breakpoint on one of worker scripts, assure it's hit.</li> |
| <li id="s8">Try causing an error in worker, observe it's logged in DevTools console and in test console below. |
| <button onclick="causeError()">Cause Error</button> |
| <li id="s9"><button onclick="stopWorker()">Stop Worker</button></li> |
| |
| </ol> |
| |
| <div id="console" style="font-family: courier; background-color: black; color: green; width: 80em; height: 25em; overflow: scroll"> |
| </div> |
| |
| </body> |
| </html> |