mm_messageChannelParent.js (3485B)
1 let port; 2 let mm; 3 4 function info(message) { 5 return window.arguments[0].info(message); 6 } 7 8 function ok(condition, message) { 9 return window.arguments[0].ok(condition, message); 10 } 11 12 function is(v1, v2, message) { 13 return window.arguments[0].is(v1, v2, message); 14 } 15 16 function todo_is(v1, v2, message) { 17 return window.arguments[0].todo_is(v1, v2, message); 18 } 19 20 function cleanUp() { 21 window.arguments[0].setTimeout(function () { 22 this.done(); 23 }, 0); 24 window.close(); 25 } 26 27 function debug(msg) { 28 dump("[mmMessageChannelParent]" + msg + "\n"); 29 } 30 31 let tests = [basic_test, close_test, empty_transferable, not_transferable]; 32 33 // Test Routine 34 function run_tests() { 35 let test = tests.shift(); 36 if (test === undefined) { 37 cleanUp(); 38 return; 39 } 40 41 test(function () { 42 setTimeout(run_tests, 0); 43 }); 44 } 45 46 // Basic communication test. 47 function basic_test(finish) { 48 ok(mm, "basic_test"); 49 50 let finishPrepare = msg => { 51 is(msg.data.message, "OK", ""); 52 ok(port, ""); 53 port.onmessage = message => { 54 is(message.data, "BasicTest:TestOK", ""); 55 finish(); 56 }; 57 port.postMessage("BasicTest:StartTest"); 58 mm.removeMessageListener("BasicTest:FinishPrepare", finishPrepare); 59 }; 60 61 let channel = new MessageChannel(); 62 port = channel.port2; 63 mm.addMessageListener("BasicTest:FinishPrepare", finishPrepare); 64 mm.sendAsyncMessage("BasicTest:PortCreated", {}, [channel.port1]); 65 } 66 67 // Communicate with closed port. 68 function close_test(finish) { 69 ok(mm, "close_test"); 70 71 let finishPrepare = msg => { 72 is(msg.data.message, "OK", ""); 73 ok(port, ""); 74 75 port.onmessage = () => { 76 ok(false, "Port is alive."); 77 finish(); 78 }; 79 80 port.postMessage("CloseTest:StartTest"); 81 mm.removeMessageListener("CloseTest:FinishPrepare", finishPrepare); 82 finish(); 83 }; 84 85 let channel = new MessageChannel(); 86 port = channel.port2; 87 mm.addMessageListener("CloseTest:FinishPrepare", finishPrepare); 88 mm.sendAsyncMessage("CloseTest:PortCreated", {}, [channel.port1]); 89 } 90 91 // Empty transferable object 92 function empty_transferable(finish) { 93 ok(mm, "empty_transferable"); 94 95 let finishPrepare = () => { 96 ok(true, "Same basic test."); 97 mm.removeMessageListener("EmptyTest:FinishPrepare", finishPrepare); 98 finish(); 99 }; 100 101 mm.addMessageListener("EmptyTest:FinishPrepare", finishPrepare); 102 mm.sendAsyncMessage("EmptyTest:PortCreated", {}, []); 103 } 104 105 // Not transferable object. 106 function not_transferable(finish) { 107 ok(mm, "not_transferable"); 108 109 let finishPrepare = () => { 110 ok(true, "Same basic test."); 111 finish(); 112 }; 113 114 mm.addMessageListener("NotTransferableTest:FinishPrepare", finishPrepare); 115 mm.sendAsyncMessage("NotTransferableTest:PortCreated", {}, [""]); 116 } 117 118 /* 119 * Test preparation 120 */ 121 function finishLoad() { 122 run_tests(); 123 } 124 125 function prepare_test() { 126 debug("start run_tests()"); 127 var node = document.getElementById("messagechannel_remote"); 128 mm = node.messageManager; //Services.ppmm.getChildAt(1); 129 ok(mm, "created MessageManager."); 130 131 mm.addMessageListener("mmMessagePort:finishScriptLoad", finishLoad); 132 mm.addMessageListener("mmMessagePort:fail", failed_test); 133 //mm.loadProcessScript("chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js", true); 134 mm.loadFrameScript( 135 "chrome://mochitests/content/chrome/dom/messagechannel/tests/mm_messageChannel.js", 136 true 137 ); 138 ok(true, "Loaded"); 139 } 140 141 function failed_test() { 142 debug("failed test in child process"); 143 ok(false, ""); 144 }