test_postMessages_broadcastChannel.html (3719B)
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 BroadcastChannel 15 tests.push(function test_broadcastChannel() { 16 info("Testing broadcastChannel"); 17 18 var bc1 = new BroadcastChannel('postMessagesTest'); 19 var bc2 = new BroadcastChannel('postMessagesTest'); 20 21 var resolve; 22 23 function resolvePromise(data) { 24 if (!resolve) { 25 ok(false, "Unexpected message!"); 26 return; 27 } 28 29 let tmp = resolve; 30 resolve = null; 31 tmp(data); 32 } 33 34 bc2.onmessage = function(e) { 35 resolvePromise({ data: e.data, ports: [], error: false }); 36 } 37 38 bc2.onmessageerror = function(e) { 39 resolvePromise({ error: true }); 40 } 41 42 runTests({ 43 clonableObjectsEveryWhere: true, 44 clonableObjectsSameProcess: true, 45 transferableObjects: false, 46 send(what, ports) { 47 return new Promise(function(r, rr) { 48 if (ports.length) { 49 rr(); 50 return; 51 } 52 53 resolve = r; 54 bc1.postMessage(what); 55 }); 56 }, 57 58 finished() { 59 bc1.close(); 60 bc2.close(); 61 next(); 62 } 63 }); 64 }); 65 66 // PostMessage for BroadcastChannel in workers 67 tests.push(function test_broadcastChannel_inWorkers() { 68 info("Testing broadcastChannel in Workers"); 69 70 var bc = new BroadcastChannel('postMessagesTest_inWorkers'); 71 var resolve; 72 73 var w = new Worker('worker_postMessages.js'); 74 w.postMessage('broadcastChannel'); 75 w.onmessage = function(e) { 76 is(e.data, 'ok', "Worker ready!"); 77 78 w.onmessage = function(e1) { 79 if (!resolve) { 80 ok(false, "Unexpected message!"); 81 return; 82 } 83 84 let tmp = resolve; 85 resolve = null; 86 tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); 87 } 88 89 runTests({ 90 clonableObjectsEveryWhere: true, 91 clonableObjectsSameProcess: true, 92 transferableObjects: false, 93 send(what, ports) { 94 return new Promise(function(r, rr) { 95 if (ports.length) { 96 rr(); 97 return; 98 } 99 100 resolve = r; 101 bc.postMessage(what); 102 }); 103 }, 104 105 finished() { 106 bc.close(); 107 w.terminate(); 108 next(); 109 } 110 }); 111 } 112 }); 113 114 // PostMessage for BroadcastChannel in SharedWorkers 115 tests.push(function test_broadcastChannel_inSharedWorkers() { 116 info("Testing broadcastChannel in SharedWorkers"); 117 118 var bc = new BroadcastChannel('postMessagesTest_inWorkers'); 119 var resolve; 120 121 var w = new SharedWorker('worker_postMessages.js'); 122 w.port.postMessage('broadcastChannel'); 123 w.port.onmessage = function(e) { 124 is(e.data, 'ok', "Worker ready!"); 125 126 w.port.onmessage = function(e1) { 127 if (!resolve) { 128 ok(false, "Unexpected message!"); 129 return; 130 } 131 132 let tmp = resolve; 133 resolve = null; 134 tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); 135 } 136 137 runTests({ 138 clonableObjectsEveryWhere: true, 139 clonableObjectsSameProcess: false, 140 transferableObjects: false, 141 send(what, ports) { 142 return new Promise(function(r, rr) { 143 if (ports.length) { 144 rr(); 145 return; 146 } 147 148 resolve = r; 149 bc.postMessage(what); 150 }); 151 }, 152 153 finished() { 154 bc.close(); 155 w.port.postMessage("terminate"); 156 next(); 157 } 158 }); 159 } 160 }); 161 162 SimpleTest.waitForExplicitFinish(); 163 next(); 164 165 </script> 166 </body> 167 </html>