2 <p>Test WorkerContext.close functionality. Should print a series of PASS messages, followed with DONE.
</p>
7 document
.getElementById("result").innerHTML
+= message
+ "<br>";
10 if (window
.layoutTestController
)
12 layoutTestController
.dumpAsText();
13 layoutTestController
.waitUntilDone();
16 var worker
= new Worker('resources/worker-close.js');
19 worker
.postMessage("typeofClose");
20 worker
.onmessage
= testTypeofClose
;
22 function testTypeofClose(evt
)
24 if (evt
.data
== "typeof close: function")
25 log("PASS: " + evt
.data
);
27 log("FAIL: " + evt
.data
);
28 worker
.onmessage
= testMessageAfterClose
;
29 worker
.postMessage("ping");
32 function testMessageAfterClose(evt
) {
33 if (evt
.data
== "pong")
34 log("PASS: received message before close");
36 log("FAIL: received unknown response: " + evt
.data
);
38 // Tell the worker to close, then send a followup message
39 // which should not be delivered.
40 worker
.postMessage("close");
41 worker
.onmessage = function(evt
) {
42 log("FAIL: Received message after worker closed: " + evt
.data
);
45 // Make sure that messages don't arrive at the remote end - since they
46 // can't send back response messages, we'll have the worker throw an
47 // exception instead (errors are still propagated to the caller even after
49 worker
.postMessage("throw");
50 worker
.onerror = function(evt
) {
51 log("FAIL: message delivered after close(): " + evt
.message
);
54 timeout
= setTimeout(testErrorAfterClose
, 1000);
57 function testErrorAfterClose()
59 log("PASS: messages sent after close() are ignored");
60 // Test that errors are delivered after close.
61 worker
= new Worker('resources/worker-close.js');
62 worker
.postMessage("closeWithError");
63 worker
.onerror = function(event
) {
64 log("PASS: Error arrived after close: " + event
.message
);
70 function testPendingEvents()
72 // Now test that workers do not deliver pending events
73 worker
= new Worker('resources/worker-close.js');
74 worker
.postMessage("closeWithPendingEvents");
75 worker
.onmessage = function(evt
) {
76 log("FAIL: pending events should not fire:" + evt
.data
);
79 worker
.onerror = function(evt
) {
80 log("FAIL: pending events should not fire:" + evt
.message
);
83 timeout
= setTimeout(testTerminateAfterClose
, 500);
86 function testTerminateAfterClose()
88 log("PASS: close() did not dispatch pending events");
89 worker
= new Worker('resources/worker-class.js');
90 worker
.postMessage("close");
91 worker
.onmessage = function(evt
) {
92 log("FAIL: Received message after worker closed: " + evt
.data
);
95 // Give worker a chance to close first, then terminate it.
96 timeout
= setTimeout(function() {
104 clearTimeout(timeout
);
106 if (window
.layoutTestController
)
107 layoutTestController
.notifyDone();