test_postMessages_workers.html (2459B)
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 Workers 15 tests.push(function test_workers() { 16 info("Testing Workers"); 17 18 var resolve; 19 20 var w = new Worker('worker_postMessages.js'); 21 w.postMessage('workers'); 22 w.onmessage = function(e) { 23 is(e.data, 'ok', "Worker ready!"); 24 25 w.onmessage = function(e1) { 26 if (!resolve) { 27 ok(false, "Unexpected message!"); 28 return; 29 } 30 31 let tmp = resolve; 32 resolve = null; 33 tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); 34 } 35 36 runTests({ 37 clonableObjectsEveryWhere: true, 38 clonableObjectsSameProcess: true, 39 transferableObjects: true, 40 send(what, ports) { 41 return new Promise(function(r, rr) { 42 resolve = r; 43 try { 44 w.postMessage(what, ports); 45 } catch(ex) { 46 resolve = null; 47 rr(); 48 } 49 }); 50 }, 51 52 finished() { 53 w.terminate(); 54 next(); 55 } 56 }); 57 } 58 }); 59 60 // PostMessage for SharedWorkers 61 tests.push(function test_sharedWorkers() { 62 info("Testing SharedWorkers"); 63 64 var resolve; 65 66 var w = new SharedWorker('worker_postMessages.js'); 67 w.port.postMessage('sharedworkers'); 68 w.port.onmessage = function(e) { 69 is(e.data, 'ok', "Worker ready!"); 70 71 w.port.onmessage = function(e1) { 72 if (!resolve) { 73 ok(false, "Unexpected message!"); 74 return; 75 } 76 77 let tmp = resolve; 78 resolve = null; 79 tmp({ data: e1.data, ports: e1.ports, error: e1.data === "error" }); 80 } 81 82 runTests({ 83 clonableObjectsEveryWhere: true, 84 clonableObjectsSameProcess: false, 85 transferableObjects: true, 86 send(what, ports) { 87 return new Promise(function(r, rr) { 88 resolve = r; 89 try { 90 w.port.postMessage(what, ports); 91 } catch(ex) { 92 resolve = null; 93 rr(); 94 } 95 }); 96 }, 97 98 finished() { 99 w.port.postMessage("terminate"); 100 next(); 101 } 102 }); 103 } 104 }); 105 106 SimpleTest.waitForExplicitFinish(); 107 next(); 108 109 </script> 110 </body> 111 </html>