Bug 1315044 - Test loader destruction. r=jryans draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Mon, 14 Nov 2016 09:15:02 -0800
changeset 438523 989a2eda9e39f80334e62a19379a4c8c71cfce5a
parent 438475 11b1b070889861f55840974ff8d4b512349fc906
child 536934 91ff7fae9126046757300161701da9aa8ea6cb8d
push id35742
push userbmo:poirot.alex@gmail.com
push dateMon, 14 Nov 2016 17:15:50 +0000
reviewersjryans
bugs1315044
milestone52.0a1
Bug 1315044 - Test loader destruction. r=jryans MozReview-Commit-ID: Ky3Okig9qxs
devtools/server/tests/mochitest/test_getProcess.html
--- a/devtools/server/tests/mochitest/test_getProcess.html
+++ b/devtools/server/tests/mochitest/test_getProcess.html
@@ -15,16 +15,17 @@ Bug 1060093 - Test DebuggerServer.getPro
 
 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],
@@ -106,26 +107,52 @@ function runTests() {
 
   // Assert that calling client.getProcess against the same process id is
   // returning the same actor.
   function getProcessAgain(firstActor, id) {
     client.getProcess(id).then(response => {
       let actor = response.form;
       is(actor, firstActor,
          "Second call to getProcess with the same id returns the same form");
+      closeClient();
+    });
+  }
+
+  function processScript() {
+    let listener = function () {
+      Services.obs.removeObserver(listener, "sdk:loader:destroy", false);
+      sendAsyncMessage("test:getProcess-destroy", null);
+    };
+    Services.obs.addObserver(listener, "sdk:loader:destroy", false);
+  }
+
+  function closeClient() {
+    let onLoaderDestroyed = new Promise(done => {
+      let processListener = function () {
+        Services.ppmm.removeMessageListener("test:getProcess-destroy", processListener)
+        done();
+      };
+      Services.ppmm.addMessageListener("test:getProcess-destroy", processListener)
+    });
+    let script = "data:,(" + processScript + ")()";
+    Services.ppmm.loadProcessScript(script, true);
+    client.close();
+
+    onLoaderDestroyed.then(function () {
+      Services.ppmm.removeDelayedProcessScript(script);
+      info("Loader destroyed in the content process\n");
+
       cleanup();
     });
   }
 
   function cleanup() {
-    client.close().then(function () {
-      DebuggerServer.destroy();
-      iframe.remove();
-      SimpleTest.finish()
-    });
+    DebuggerServer.destroy();
+    iframe.remove();
+    SimpleTest.finish()
   }
 
   connect();
 }
 
 </script>
 </pre>
 </body>