123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- function ok(a, msg) {
- postMessage({ type: 'check', check: !!a, message: msg });
- }
- function is(a, b, msg) {
- ok (a === b, msg);
- }
- function info(msg) {
- postMessage({ type: 'info', message: msg });
- }
- function finish() {
- postMessage({ type: 'finish' });
- }
- function basic()
- {
- var a = new MessageChannel();
- ok(a, "MessageChannel created");
- var port1 = a.port1;
- ok(port1, "MessageChannel.port1 exists");
- is(port1, a.port1, "MessageChannel.port1 is port1");
- var port2 = a.port2;
- ok(port2, "MessageChannel.port1 exists");
- is(port2, a.port2, "MessageChannel.port2 is port2");
- [ 'postMessage', 'start', 'close' ].forEach(function(e) {
- ok(e in port1, "MessagePort1." + e + " exists");
- ok(e in port2, "MessagePort2." + e + " exists");
- });
- runTests();
- }
- function sendMessages()
- {
- var a = new MessageChannel();
- ok(a, "MessageChannel created");
- a.port1.postMessage("Hello world!");
- a.port1.onmessage = function(e) {
- is(e.data, "Hello world!", "The message is back!");
- runTests();
- }
- a.port2.onmessage = function(e) {
- a.port2.postMessage(e.data);
- }
- }
- function transferPort()
- {
- var a = new MessageChannel();
- ok(a, "MessageChannel created");
- a.port1.postMessage("Hello world!");
- a.port1.onmessage = function(e) {
- is(e.data, "Hello world!", "The message is back!");
- runTests();
- }
- postMessage({ type: 'port' }, [a.port2]);
- }
- function transferPort2()
- {
- onmessage = function(evt) {
- is(evt.ports.length, 1, "A port has been received by the worker");
- evt.ports[0].onmessage = function(e) {
- is(e.data, 42, "Data is 42!");
- runTests();
- }
- }
- postMessage({ type: 'newport' });
- }
- var tests = [
- basic,
- sendMessages,
- transferPort,
- transferPort2,
- ];
- function runTests() {
- if (!tests.length) {
- finish();
- return;
- }
- var t = tests.shift();
- t();
- }
- var subworker;
- onmessage = function(evt) {
- if (evt.data == 0) {
- runTests();
- return;
- }
- if (!subworker) {
- info("Create a subworkers. ID: " + evt.data);
- subworker = new Worker('worker_messageChannel.js');
- subworker.onmessage = function(e) {
- info("Proxy a message to the parent.");
- postMessage(e.data, e.ports);
- }
- subworker.postMessage(evt.data - 1);
- return;
- }
- info("Dispatch a message to the subworker.");
- subworker.postMessage(evt.data, evt.ports);
- }
|