Worker-messageport.html (2274B)
1 <!DOCTYPE html> 2 <title>Test that pages and workers can send MessagePorts to one another.</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-messageport.js"); 8 9 // Send messages with and without ports to the worker to make sure it gets them. 10 worker.postMessage("noport"); 11 worker.onmessage = t.step_func_done(evt => { 12 assert_equals(evt.data, "PASS: evt.ports = [] as expected"); 13 }); 14 }, 'Test sending messages to workers with no port.'); 15 16 async_test(function(t) { 17 var worker = new Worker("support/Worker-messageport.js"); 18 var channel = new MessageChannel(); 19 20 worker.postMessage("port", [channel.port1]); 21 worker.onmessage = t.step_func(evt => { 22 assert_equals(evt.data, "PASS: Received message port"); 23 }); 24 25 // Send a message on the new port to make sure it gets to the worker. 26 channel.port2.postMessage("ping"); 27 28 // Wait for the response. 29 channel.port2.onmessage = t.step_func_done(evt => { 30 assert_equals(evt.data, "pong"); 31 }); 32 channel.port2.start(); 33 }, 'Test sending message to a worker on a port.'); 34 35 async_test(function(t) { 36 var worker = new Worker("support/Worker-messageport.js"); 37 var channel = new MessageChannel(); 38 39 worker.onmessage = t.step_func(evt => { 40 assert_equals(evt.data, "port"); 41 assert_equals(String(evt.ports), "[object MessagePort]"); 42 assert_equals(evt.ports.length, 1); 43 evt.ports[0].postMessage("ping"); 44 evt.ports[0].onmessage = t.step_func_done(evt => { 45 assert_equals(evt.data, "pong"); 46 }); 47 evt.ports[0].start(); 48 }); 49 worker.postMessage("getport"); 50 }, 'Test getting messages from a worker on a port.'); 51 52 async_test(function(t) { 53 var worker = new Worker("support/Worker-messageport.js"); 54 var channel = new MessageChannel(); 55 worker.onmessage = t.step_func(evt => { gotSpam(channel.port1); }); 56 worker.postMessage("spam", [channel.port2]); 57 58 function gotSpam(port) { 59 var spamCount = 0; 60 port.onmessage = t.step_func(evt => { 61 assert_equals(evt.data, spamCount); 62 spamCount++; 63 if (spamCount == 1000) { 64 t.done(); 65 } 66 }); 67 } 68 }, 'Test sending many messages to workers using ports.'); 69 </script>