summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/browser/browser_debugger_server.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/tests/browser/browser_debugger_server.js')
-rw-r--r--devtools/server/tests/browser/browser_debugger_server.js130
1 files changed, 130 insertions, 0 deletions
diff --git a/devtools/server/tests/browser/browser_debugger_server.js b/devtools/server/tests/browser/browser_debugger_server.js
new file mode 100644
index 0000000000..5fa4df23ba
--- /dev/null
+++ b/devtools/server/tests/browser/browser_debugger_server.js
@@ -0,0 +1,130 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test basic features of DevToolsServer
+
+add_task(async function() {
+ // When running some other tests before, they may not destroy the main server.
+ // Do it manually before running our tests.
+ if (DevToolsServer.initialized) {
+ DevToolsServer.destroy();
+ }
+
+ await testDevToolsServerInitialized();
+ await testDevToolsServerKeepAlive();
+});
+
+async function testDevToolsServerInitialized() {
+ const browser = await addTab("data:text/html;charset=utf-8,foo");
+ const tab = gBrowser.getTabForBrowser(browser);
+
+ ok(
+ !DevToolsServer.initialized,
+ "By default, the DevToolsServer isn't initialized in parent process"
+ );
+ await assertServerInitialized(
+ browser,
+ false,
+ "By default, the DevToolsServer isn't initialized not in content process"
+ );
+
+ const target = await TargetFactory.forTab(tab);
+
+ ok(
+ DevToolsServer.initialized,
+ "TargetFactory.forTab will initialize the DevToolsServer in parent process"
+ );
+ await assertServerInitialized(
+ browser,
+ true,
+ "TargetFactory.forTab will initialize the DevToolsServer in content process"
+ );
+
+ await target.destroy();
+
+ // Disconnecting the client will remove all connections from both server,
+ // in parent and content process. But only the one in the content process will be
+ // destroyed.
+ ok(
+ DevToolsServer.initialized,
+ "Destroying the target doesn't destroy the DevToolsServer in the parent process"
+ );
+ await assertServerInitialized(
+ browser,
+ false,
+ "But destroying the target ends up destroying the DevToolsServer in the content" +
+ " process"
+ );
+
+ gBrowser.removeCurrentTab();
+ DevToolsServer.destroy();
+}
+
+async function testDevToolsServerKeepAlive() {
+ const browser = await addTab("data:text/html;charset=utf-8,foo");
+ const tab = gBrowser.getTabForBrowser(browser);
+
+ await assertServerInitialized(
+ browser,
+ false,
+ "Server not started in content process"
+ );
+
+ const target = await TargetFactory.forTab(tab);
+ await assertServerInitialized(
+ browser,
+ true,
+ "Server started in content process"
+ );
+
+ info("Set DevToolsServer.keepAlive to true in the content process");
+ await setContentServerKeepAlive(browser, true);
+
+ info("Destroy the target, the content server should be kept alive");
+ await target.destroy();
+
+ await assertServerInitialized(
+ browser,
+ true,
+ "Server still running in content process"
+ );
+
+ info("Set DevToolsServer.keepAlive back to false");
+ await setContentServerKeepAlive(browser, false);
+
+ info("Create and destroy a target again");
+ const newTarget = await TargetFactory.forTab(tab);
+ await newTarget.destroy();
+
+ await assertServerInitialized(
+ browser,
+ false,
+ "Server stopped in content process"
+ );
+
+ gBrowser.removeCurrentTab();
+ DevToolsServer.destroy();
+}
+
+async function assertServerInitialized(browser, expected, message) {
+ const isInitialized = await SpecialPowers.spawn(browser, [], function() {
+ const { require } = ChromeUtils.import(
+ "resource://devtools/shared/Loader.jsm"
+ );
+ const { DevToolsServer } = require("devtools/server/devtools-server");
+ return DevToolsServer.initialized;
+ });
+ is(isInitialized, expected, message);
+}
+
+async function setContentServerKeepAlive(browser, keepAlive, message) {
+ await SpecialPowers.spawn(browser, [keepAlive], function(_keepAlive) {
+ const { require } = ChromeUtils.import(
+ "resource://devtools/shared/Loader.jsm"
+ );
+ const { DevToolsServer } = require("devtools/server/devtools-server");
+ DevToolsServer.keepAlive = _keepAlive;
+ });
+}