69 lines
2.5 KiB
HTML
69 lines
2.5 KiB
HTML
<body>
|
|
<p>Test WorkerGlobalScope.close() method. Will print PASS multiple times, followed by DONE.</p>
|
|
<div id=result></div>
|
|
<script src="resources/worker-util.js"></script>
|
|
<script>
|
|
if (window.testRunner) {
|
|
testRunner.dumpAsText();
|
|
testRunner.waitUntilDone();
|
|
waitUntilWorkerThreadsExit(runTests);
|
|
} else {
|
|
log("NOTE: Test relies on window.testRunner to detect when worker threads have exited. Please run this test via DumpRenderTree");
|
|
waitUntilWorkerThreadsExit(runTests);
|
|
}
|
|
|
|
var worker;
|
|
|
|
function startWorker()
|
|
{
|
|
if (window.testRunner)
|
|
log("PASS: workerThreadCount = " + internals.workerThreadCount);
|
|
worker = new Worker('resources/worker-close.js');
|
|
}
|
|
|
|
function runTests()
|
|
{
|
|
log("Test 1: Call close() in the worker, then enter infinite loop. From the Worker object side, call terminate(). Verify the loop is terminated.")
|
|
startWorker();
|
|
worker.postMessage("close_post_loop"); // Close the worker but put it immediately into infinite loop.
|
|
worker.onmessage = function(event) {
|
|
if (window.testRunner) {
|
|
log("PASS: Worker thread created and closed, received message: " + event.data);
|
|
// Terminate the worker.
|
|
worker.terminate();
|
|
waitUntilWorkerThreadsExit(testCloseWithAccumulatedMessages);
|
|
}
|
|
}
|
|
}
|
|
|
|
function testCloseWithAccumulatedMessages()
|
|
{
|
|
log("PASS: Worker exited after terminate() terminated the infinite loop.");
|
|
log("Test 2: post 2 messages to a MessagePort into the worker. port.onmessage handler inside the worker will call close(). Verify that the second onmessage was not executed.")
|
|
startWorker();
|
|
var channel = new MessageChannel();
|
|
worker.onmessage = function(event) {
|
|
if (event.data == "echo_ping2")
|
|
log("FAIL: The MessagePort message was dispatched after a JS fragment that called 'close()' exited.");
|
|
else
|
|
log("PASS: MessagePort multiple message test, received message: " + event.data);
|
|
setTimeout("waitUntilWorkerThreadsExit(workerExited)", 100); // Let it run a bit to catch the echo_ping2 if it arrives.
|
|
}
|
|
worker.postMessage("take_port", [channel.port2]);
|
|
|
|
// Queue 2 messages.
|
|
channel.port1.postMessage("ping1");
|
|
channel.port1.postMessage("ping2");
|
|
|
|
// Now enable the messages to be delivered. Only first should echo back.
|
|
worker.postMessage("start_port");
|
|
}
|
|
|
|
function workerExited()
|
|
{
|
|
log("PASS: MessagePort messages were not delivered asfter close().");
|
|
done();
|
|
}
|
|
</script>
|
|
</body>
|