| description("This test checks the various use cases around sending multiple ports through Worker.postMessage"); |
| |
| if (window.testRunner) { |
| testRunner.dumpAsText(); |
| testRunner.waitUntilDone(); |
| } |
| |
| var channel = new MessageChannel(); |
| var channel2 = new MessageChannel(); |
| var channel3 = new MessageChannel(); |
| var channel4 = new MessageChannel(); |
| |
| var worker = new Worker("resources/worker-thread-multi-port.js"); |
| worker.postMessage("noport"); |
| worker.postMessage("zero ports", []); |
| worker.postMessage("two ports", [channel2.port1, channel2.port2]); |
| |
| // Now test various failure cases |
| shouldThrow('worker.postMessage("null port", [channel3.port1, null, channel3.port2])'); |
| shouldThrow('worker.postMessage("notAPort", [channel3.port1, {}, channel3.port2])'); |
| // Should be OK to send channel3.port1/2 (should not have been disentangled by the previous failed calls). |
| worker.postMessage("failed ports", [channel3.port1, channel3.port2]); |
| |
| shouldThrow('worker.postMessage("notAnArray", "foo")') |
| shouldThrow('worker.postMessage("notASequence", [{length: 3}])'); |
| |
| worker.postMessage("done", [channel.port2]); |
| worker.onmessage = function(event) { |
| // Report results from worker thread. |
| if (event.data == "done") |
| channel.port1.onmessage = done; |
| else if (event.data.indexOf("PASS") == 0) |
| testPassed(event.data.substring(4)); |
| else if (event.data.indexOf("FAIL") == 0) |
| testFailed(event.data.substring(4)); |
| else |
| testFailed("Unexpected result: " + event.data); |
| } |
| |