summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/mochitest/test_setupInParentChild.html
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/mochitest/test_setupInParentChild.html')
-rw-r--r--devtools/server/tests/mochitest/test_setupInParentChild.html110
1 files changed, 110 insertions, 0 deletions
diff --git a/devtools/server/tests/mochitest/test_setupInParentChild.html b/devtools/server/tests/mochitest/test_setupInParentChild.html
new file mode 100644
index 000000000..fc94ca96a
--- /dev/null
+++ b/devtools/server/tests/mochitest/test_setupInParentChild.html
@@ -0,0 +1,110 @@
+<!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>