44 lines
1.7 KiB
JavaScript
44 lines
1.7 KiB
JavaScript
// Check to see if the worker handles pending events. Messages after close() will not be sent to the parent page, so we use exceptions instead to report failures after close().
|
|
onmessage = function(evt)
|
|
{
|
|
if (evt.data == "closeWithPendingEvents") {
|
|
// Set a timer to generate an event - minimum timeout is 1ms.
|
|
setTimeout(function() {
|
|
postMessage("pending event processed");
|
|
throw "should not be executed";
|
|
}, 1);
|
|
var start = new Date().getTime();
|
|
// Loop for 10 ms so the timer is ready to fire
|
|
while (new Date().getTime() - start < 100)
|
|
;
|
|
// Now close - timer should not fire
|
|
close();
|
|
} else if (evt.data == "typeofClose") {
|
|
postMessage("typeof close: " + (typeof close));
|
|
} else if (evt.data == "close") {
|
|
close();
|
|
postMessage("Should be delivered");
|
|
} else if (evt.data == "ping") {
|
|
postMessage("pong");
|
|
} else if (evt.data == "throw") {
|
|
throw "should never be executed";
|
|
} else if (evt.data == "closeWithError") {
|
|
close();
|
|
nonExistentFunction(); // Undefined function - throws exception
|
|
} else if (evt.data == "close_post_loop") {
|
|
close();
|
|
postMessage("closed");
|
|
while(true) {} // Should loop forever.
|
|
} else if (evt.data == "take_port") {
|
|
messagePort = evt.ports[0];
|
|
messagePort.onmessage = function(event) {
|
|
close();
|
|
postMessage("echo_" + event.data);
|
|
}
|
|
} else if (evt.data == "start_port") {
|
|
messagePort.start();
|
|
} else {
|
|
postMessage("FAIL: Unknown message type: " + evt.data);
|
|
}
|
|
}
|