test_postMessages_messagePort.html (2453B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Test for postMessages cloning/transferring objects</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 7 <script src="common_postMessages.js"></script> 8 </head> 9 10 <body> 11 <input id="fileList" type="file"></input> 12 <script type="application/javascript"> 13 14 // PostMessage for MessagePort 15 tests.push(function test_messagePort() { 16 info("Testing messagePort"); 17 18 var mc = new MessageChannel(); 19 var resolve; 20 21 function resolvePromise(data) { 22 if (!resolve) { 23 ok(false, "Unexpected message!"); 24 return; 25 } 26 27 let tmp = resolve; 28 resolve = null; 29 tmp(data); 30 } 31 32 mc.port2.onmessage = function(e) { 33 resolvePromise({ data: e.data, ports: e.ports, error: false }); 34 } 35 36 mc.port2.onmessageerror = function(e) { 37 resolvePromise({ error: true }); 38 } 39 40 runTests({ 41 clonableObjectsEveryWhere: true, 42 clonableObjectsSameProcess: true, 43 transferableObjects: true, 44 send(what, ports) { 45 return new Promise(function(r, rr) { 46 resolve = r; 47 try { 48 mc.port1.postMessage(what, ports); 49 } catch(e) { 50 resolve = null; 51 rr(); 52 } 53 }); 54 }, 55 56 finished() { 57 next(); 58 } 59 }); 60 }); 61 62 // PostMessage for MessagePort in Workers 63 tests.push(function test_messagePort_inWorkers() { 64 info("Testing messagePort in workers"); 65 66 var mc = new MessageChannel(); 67 var resolve; 68 69 var w = new Worker('worker_postMessages.js'); 70 w.postMessage('messagePort', [ mc.port2 ]); 71 w.onmessage = function(e) { 72 is(e.data, 'ok', "Worker ready!"); 73 74 w.onmessage = function(e1) { 75 if (!resolve) { 76 ok(false, "Unexpected message!"); 77 return; 78 } 79 80 let tmp = resolve; 81 resolve = null; 82 tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); 83 } 84 85 runTests({ 86 clonableObjectsEveryWhere: true, 87 clonableObjectsSameProcess: true, 88 transferableObjects: true, 89 send(what, ports) { 90 return new Promise(function(r, rr) { 91 resolve = r; 92 try { 93 mc.port1.postMessage(what, ports); 94 } catch(ex) { 95 resolve = null; 96 rr(); 97 } 98 }); 99 }, 100 101 finished() { 102 w.terminate(); 103 next(); 104 } 105 }); 106 } 107 }); 108 109 SimpleTest.waitForExplicitFinish(); 110 next(); 111 112 </script> 113 </body> 114 </html>