function debug(msg) { dump("[mmMessageChannelChild]" + msg + "\n"); } /** * Preparation Test */ let port; let toString = Object.prototype.toString; (function prepare() { debug("Script loaded."); addTestReceiver(); sendAsyncMessage("mmMessagePort:finishScriptLoad", {}, {}); })(); function ok(condition, message) { debug('condition: ' + condition + ', ' + message + '\n'); if (!condition) { sendAsyncMessage("mmMessagePort:fail", { message: message }); throw 'failed check: ' + message; } } function is(a, b, message) { ok(a===b, message); } /** * Testing codes. */ function addTestReceiver() { addMessageListener("BasicTest:PortCreated", basicTest); addMessageListener("CloseTest:PortCreated", closeTest); addMessageListener("EmptyTest:PortCreated", emptyTest); addMessageListener("NotTransferableTest:PortCreated", notTransferableTest); } function basicTest(msg) { port = msg.ports[0]; is(toString.call(port), "[object MessagePort]", "created MessagePort."); port.onmessage = (msg) => { is(msg.data, "BasicTest:StartTest", "Replied message is correct."); port.postMessage("BasicTest:TestOK"); }; sendAsyncMessage("BasicTest:FinishPrepare", { message: "OK" }); } function closeTest(msg) { port = msg.ports[0]; is(toString.call(port), "[object MessagePort]", "created MessagePort."); port.onmessage = (msg) => { ok(msg.data,"CloseTest:StartTest", "Replied message is correct."); port.postMessage("CloseTest:TestOK"); }; port.close(); sendAsyncMessage("CloseTest:FinishPrepare", { message: "OK"}); } function emptyTest(msg) { let portSize = msg.ports.length; is(portSize, 0, "transfered port size is zero."); sendAsyncMessage("EmptyTest:FinishPrepare", { message: "OK"}); } function notTransferableTest(msg) { sendAsyncMessage("NotTransferableTest:FinishPrepare", {message: "OK"}); }