Bug 1528276 - Add test for DebuggerServer.keepAlive;r=ochameau
authorJulian Descottes <jdescottes@mozilla.com>
Wed, 27 Feb 2019 17:08:43 +0000
changeset 519407 64aa07723c846dc9927b3e259fa2006854e1a071
parent 519406 d4dd2195766e051b57d93e799fbdc1a029c99c2b
child 519408 de6dc58f6f51caf627274eef936c7dbd2df69823
push id10862
push userffxbld-merge
push dateMon, 11 Mar 2019 13:01:11 +0000
treeherdermozilla-beta@a2e7f5c935da [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersochameau
bugs1528276
milestone67.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1528276 - Add test for DebuggerServer.keepAlive;r=ochameau Depends on D20830 Differential Revision: https://phabricator.services.mozilla.com/D20831
devtools/server/tests/browser/browser_debugger_server.js
--- a/devtools/server/tests/browser/browser_debugger_server.js
+++ b/devtools/server/tests/browser/browser_debugger_server.js
@@ -9,51 +9,88 @@
 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 (DebuggerServer.initialized) {
     DebuggerServer.destroy();
   }
 
   await testDebuggerServerInitialized();
+  await testDebuggerServerKeepAlive();
 });
 
 async function testDebuggerServerInitialized() {
   const browser = await addTab("data:text/html;charset=utf-8,foo");
   const tab = gBrowser.getTabForBrowser(browser);
 
   ok(!DebuggerServer.initialized,
     "By default, the DebuggerServer isn't initialized in parent process");
-  await ContentTask.spawn(browser, null, function() {
-    const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
-    const {DebuggerServer} = require("devtools/server/main");
-    ok(!DebuggerServer.initialized,
-      "By default, the DebuggerServer isn't initialized not in content process");
-  });
+  await assertServerInitialized(browser, false,
+    "By default, the DebuggerServer isn't initialized not in content process");
 
   const target = await TargetFactory.forTab(tab);
 
   ok(DebuggerServer.initialized,
     "TargetFactory.forTab will initialize the DebuggerServer in parent process");
-  await ContentTask.spawn(browser, null, function() {
-    const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
-    const {DebuggerServer} = require("devtools/server/main");
-    ok(DebuggerServer.initialized,
-      "TargetFactory.forTab will initialize the DebuggerServer in content process");
-  });
+  await assertServerInitialized(browser, true,
+    "TargetFactory.forTab will initialize the DebuggerServer 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(DebuggerServer.initialized,
     "Destroying the target doesn't destroy the DebuggerServer in the parent process");
-  await ContentTask.spawn(browser, null, function() {
+  await assertServerInitialized(browser, false,
+    "But destroying the target ends up destroying the DebuggerServer in the content" +
+    " process");
+
+  gBrowser.removeCurrentTab();
+  DebuggerServer.destroy();
+}
+
+async function testDebuggerServerKeepAlive() {
+  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 DebuggerServer.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 DebuggerServer.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();
+  DebuggerServer.destroy();
+}
+
+async function assertServerInitialized(browser, expected, message) {
+  const isInitialized = await ContentTask.spawn(browser, null, function() {
     const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
     const {DebuggerServer} = require("devtools/server/main");
-    ok(!DebuggerServer.initialized,
-      "But destroying the target ends up destroying the DebuggerServer in the content" +
-      " process");
+    return DebuggerServer.initialized;
   });
+  is(isInitialized, expected, message);
+}
 
-  gBrowser.removeCurrentTab();
+async function setContentServerKeepAlive(browser, keepAlive, message) {
+  await ContentTask.spawn(browser, keepAlive, function(_keepAlive) {
+    const {require} = ChromeUtils.import("resource://devtools/shared/Loader.jsm");
+    const {DebuggerServer} = require("devtools/server/main");
+    DebuggerServer.keepAlive = _keepAlive;
+  });
 }