<!DOCTYPE HTML> <html> <!-- Bug 1181100 - Test DebuggerServerConnection.setupInParent and DebuggerServer.setupInChild --> <head> <meta charset="utf-8"> <title>Mozilla Bug</title> <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"> </head> <body> <pre id="test"> <script type="application/javascript;version=1.8"> let Cu = Components.utils; let Cc = Components.classes; let Ci = Components.interfaces; let {require} = Cu.import("resource://devtools/shared/Loader.jsm", {}); let {DebuggerClient} = require("devtools/shared/client/main"); let {DebuggerServer} = require("devtools/server/main"); let Services = require("Services"); window.onload = function() { SimpleTest.waitForExplicitFinish(); SpecialPowers.pushPrefEnv({ "set": [ // Always log packets when running tests. ["devtools.debugger.log", true], ["dom.mozBrowserFramesEnabled", true] ] }, runTests); } function runTests() { // Create a minimal iframe with a message manager let iframe = document.createElement("iframe"); iframe.mozbrowser = true; document.body.appendChild(iframe); let mm = iframe.frameLoader.messageManager; // Instantiate a minimal server if (!DebuggerServer.initialized) { DebuggerServer.init(); } if (!DebuggerServer.createRootActor) { DebuggerServer.addBrowserActors(); } // Fake a connection to an iframe let transport = DebuggerServer.connectPipe(); let conn = transport._serverConnection; let client = new DebuggerClient(transport); // Wait for a response from setupInChild const ppmm = Cc["@mozilla.org/parentprocessmessagemanager;1"] .getService(Ci.nsIMessageListenerManager); let onChild = msg => { ppmm.removeMessageListener("test:setupChild", onChild); let args = msg.json; is(args[0], 1, "Got first numeric argument"); is(args[1], "two", "Got second string argument"); is(args[2].three, true, "Got last JSON argument"); // Ask the child to call setupInParent DebuggerServer.setupInChild({ module: "chrome://mochitests/content/chrome/devtools/server/tests/mochitest/setup-in-child.js", setupChild: "callParent" }); }; ppmm.addMessageListener("test:setupChild", onChild); // Wait also for a reponse from setupInParent called from setup-in-child.js let onParent = (_, topic, args) => { Services.obs.removeObserver(onParent, "test:setupParent", false); args = JSON.parse(args); is(args[0], true, "Got `mm` argument, a message manager"); ok(args[1].match(/server\d+.conn\d+.child\d+/), "Got `prefix` argument"); cleanup(); }; Services.obs.addObserver(onParent, "test:setupParent", false); // Instanciate e10s machinery and call setupInChild DebuggerServer.connectToChild(conn, iframe).then(actor => { DebuggerServer.setupInChild({ module: "chrome://mochitests/content/chrome/devtools/server/tests/mochitest/setup-in-child.js", setupChild: "setupChild", args: [1, "two", {three: true}] }); }); function cleanup() { client.close().then(function () { DebuggerServer.destroy(); iframe.remove(); SimpleTest.finish() }); } } </script> </pre> </body> </html>