| <!DOCTYPE html> |
| <title>Test sending multiple ports through Worker.postMessage.</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script> |
| async_test(function(t) { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_true(evt.data.startsWith('PASS')); |
| }); |
| worker.postMessage("noport"); |
| }, 'Test postMessage with no port.'); |
| |
| async_test(function(t) { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_true(evt.data.startsWith('PASS')); |
| }); |
| worker.postMessage("noargs"); |
| }, 'Test postMessage with no arguments.'); |
| |
| async_test(function(t) { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_true(evt.data.startsWith('PASS')); |
| }); |
| worker.postMessage("zero ports", []); |
| }, 'Test postMessage with no ports and empty array.'); |
| |
| async_test(function(t) { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| var channel = new MessageChannel(); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_true(evt.data.startsWith('PASS')); |
| }); |
| worker.postMessage("two ports", [channel.port1, channel.port2]); |
| }, 'Test postMessage with two ports.'); |
| |
| test(() => { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| assert_throws_js(TypeError, |
| function() { worker.postMessage(); }, |
| 'Empty postMessage should throw exception.'); |
| }, 'Test empty postMessage throws exception.'); |
| |
| test(() => { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| var channel = new MessageChannel(); |
| assert_throws_js(TypeError, |
| function() { worker.postMessage("null port", |
| [channel.port1, null, |
| channel.port2]); }, |
| 'postMessage with null ports should throw exception.'); |
| }, 'Test postMessage with null ports throws exception.'); |
| |
| test(() => { |
| var worker = new Worker("support/Worker-thread-multi-port.js") |
| var channel = new MessageChannel(); |
| assert_throws_dom('DataCloneError', |
| function() { worker.postMessage("notAPort", |
| [channel.port1, {}, |
| channel.port2]); }, |
| 'postMessage with incorrect ports should throw exception.'); |
| }, 'Test postMessage with incorrect ports throws exception'); |
| |
| test(() => { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| assert_throws_dom('DataCloneError', |
| function() { worker.postMessage("notASequence", [{length: 3}]) }, |
| 'postMessage without sequence should throw exception.'); |
| }, 'Test postMessage without sequence throws exception'); |
| |
| async_test(function(t) { |
| var worker = new Worker("support/Worker-thread-multi-port.js"); |
| var channel = new MessageChannel(); |
| assert_throws_dom('DataCloneError', |
| function() { worker.postMessage("notAPort", |
| [channel.port1, {}, |
| channel.port2]); }, |
| 'postMessage with incorrect ports should throw exception.'); |
| worker.onmessage = t.step_func_done(function(evt) { |
| assert_true(evt.data.startsWith('PASS')); |
| }); |
| worker.postMessage("failed ports", [channel.port1, channel.port2]); |
| }, 'Test postMessage on channel with previous failed postMessage calls.'); |
| </script> |