Worker-multi-port.html (3713B)
1 <!DOCTYPE html> 2 <title>Test sending multiple ports through Worker.postMessage.</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script> 6 async_test(function(t) { 7 var worker = new Worker("support/Worker-thread-multi-port.js"); 8 worker.onmessage = t.step_func_done(function(evt) { 9 assert_true(evt.data.startsWith('PASS')); 10 }); 11 worker.postMessage("noport"); 12 }, 'Test postMessage with no port.'); 13 14 async_test(function(t) { 15 var worker = new Worker("support/Worker-thread-multi-port.js"); 16 worker.onmessage = t.step_func_done(function(evt) { 17 assert_true(evt.data.startsWith('PASS')); 18 }); 19 worker.postMessage("noargs"); 20 }, 'Test postMessage with no arguments.'); 21 22 async_test(function(t) { 23 var worker = new Worker("support/Worker-thread-multi-port.js"); 24 worker.onmessage = t.step_func_done(function(evt) { 25 assert_true(evt.data.startsWith('PASS')); 26 }); 27 worker.postMessage("zero ports", []); 28 }, 'Test postMessage with no ports and empty array.'); 29 30 async_test(function(t) { 31 var worker = new Worker("support/Worker-thread-multi-port.js"); 32 var channel = new MessageChannel(); 33 worker.onmessage = t.step_func_done(function(evt) { 34 assert_true(evt.data.startsWith('PASS')); 35 }); 36 worker.postMessage("two ports", [channel.port1, channel.port2]); 37 }, 'Test postMessage with two ports.'); 38 39 test(() => { 40 var worker = new Worker("support/Worker-thread-multi-port.js"); 41 assert_throws_js(TypeError, 42 function() { worker.postMessage(); }, 43 'Empty postMessage should throw exception.'); 44 }, 'Test empty postMessage throws exception.'); 45 46 test(() => { 47 var worker = new Worker("support/Worker-thread-multi-port.js"); 48 var channel = new MessageChannel(); 49 assert_throws_js(TypeError, 50 function() { worker.postMessage("null port", 51 [channel.port1, null, 52 channel.port2]); }, 53 'postMessage with null ports should throw exception.'); 54 }, 'Test postMessage with null ports throws exception.'); 55 56 test(() => { 57 var worker = new Worker("support/Worker-thread-multi-port.js") 58 var channel = new MessageChannel(); 59 assert_throws_dom('DataCloneError', 60 function() { worker.postMessage("notAPort", 61 [channel.port1, {}, 62 channel.port2]); }, 63 'postMessage with incorrect ports should throw exception.'); 64 }, 'Test postMessage with incorrect ports throws exception'); 65 66 test(() => { 67 var worker = new Worker("support/Worker-thread-multi-port.js"); 68 assert_throws_dom('DataCloneError', 69 function() { worker.postMessage("notASequence", [{length: 3}]) }, 70 'postMessage without sequence should throw exception.'); 71 }, 'Test postMessage without sequence throws exception'); 72 73 async_test(function(t) { 74 var worker = new Worker("support/Worker-thread-multi-port.js"); 75 var channel = new MessageChannel(); 76 assert_throws_dom('DataCloneError', 77 function() { worker.postMessage("notAPort", 78 [channel.port1, {}, 79 channel.port2]); }, 80 'postMessage with incorrect ports should throw exception.'); 81 worker.onmessage = t.step_func_done(function(evt) { 82 assert_true(evt.data.startsWith('PASS')); 83 }); 84 worker.postMessage("failed ports", [channel.port1, channel.port2]); 85 }, 'Test postMessage on channel with previous failed postMessage calls.'); 86 </script>