Bug 1492482 - Remove CPOW usage from browser_dbg_event-listeners-02.js. r=jdescottes
authorMike Conley <mconley@mozilla.com>
Tue, 02 Oct 2018 18:00:44 +0000
changeset 487606 ac62c33e160e1aaa711034d807b75168c05732eb
parent 487605 e36f11e684015e5d4abf3df854a3d32be2e7a228
child 487607 16d572f93a940aedfb2eac5cbff73268ac0a4990
push id246
push userfmarier@mozilla.com
push dateSat, 13 Oct 2018 00:15:40 +0000
reviewersjdescottes
bugs1492482
milestone64.0a1
Bug 1492482 - Remove CPOW usage from browser_dbg_event-listeners-02.js. r=jdescottes Depends on D6961 Differential Revision: https://phabricator.services.mozilla.com/D6963
devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js
--- a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-02.js
@@ -5,117 +5,107 @@
 
 /**
  * Tests that the eventListeners request works when bound functions are used as
  * event listeners.
  */
 
 const TAB_URL = EXAMPLE_URL + "doc_event-listeners-03.html";
 
-var gClient;
-var gTab;
 
-function test() {
+add_task(async function() {
   DebuggerServer.init();
   DebuggerServer.registerAllActors();
 
   let transport = DebuggerServer.connectPipe();
-  gClient = new DebuggerClient(transport);
-  gClient.connect().then(([aType, aTraits]) => {
-    is(aType, "browser",
-      "Root actor should identify itself as a browser.");
+  let client = new DebuggerClient(transport);
+  let [type, traits] = await client.connect();
+
+  Assert.equal(type, "browser",
+    "Root actor should identify itself as a browser.");
 
-    addTab(TAB_URL)
-      .then((aTab) => {
-        gTab = aTab;
-        return attachThreadActorForUrl(gClient, TAB_URL);
-      })
-      .then(pauseDebuggee)
-      .then(testEventListeners)
-      .then(() => gClient.close())
-      .then(finish)
-      .catch(aError => {
-        ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
-      });
-  });
-}
+  let tab = await addTab(TAB_URL);
+  let threadClient = await attachThreadActorForUrl(client, TAB_URL);
+  await pauseDebuggee(tab, client, threadClient);
+  await testEventListeners(client, threadClient);
+  await client.close();
+});
 
-function pauseDebuggee(aThreadClient) {
+function pauseDebuggee(aTab, aClient, aThreadClient) {
   let deferred = promise.defer();
 
-  gClient.addOneTimeListener("paused", (aEvent, aPacket) => {
+  aClient.addOneTimeListener("paused", (aEvent, aPacket) => {
     is(aPacket.type, "paused",
       "We should now be paused.");
     is(aPacket.why.type, "debuggerStatement",
       "The debugger statement was hit.");
 
     deferred.resolve(aThreadClient);
   });
 
-  generateMouseClickInTab(gTab, "content.document.querySelector('button')");
+  generateMouseClickInTab(aTab, "content.document.querySelector('button')");
 
   return deferred.promise;
 }
 
-function testEventListeners(aThreadClient) {
-  let deferred = promise.defer();
+async function testEventListeners(aClient, aThreadClient) {
+  let packet = await aThreadClient.eventListeners();
+
+  if (packet.error) {
+    let msg = "Error getting event listeners: " + aPacket.message;
+    ok(false, msg);
+    return;
+  }
+
+  is(packet.listeners.length, 3,
+    "Found all event listeners.");
 
-  aThreadClient.eventListeners(aPacket => {
-    if (aPacket.error) {
-      let msg = "Error getting event listeners: " + aPacket.message;
-      ok(false, msg);
-      deferred.reject(msg);
-      return;
+  let listeners = await promise.all(packet.listeners.map(listener => {
+    const lDeferred = promise.defer();
+    aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => {
+      if (aResponse.error) {
+        const msg = "Error getting function definition site: " + aResponse.message;
+        ok(false, msg);
+        lDeferred.reject(msg);
+        return;
+      }
+      listener.function.url = aResponse.source.url;
+      lDeferred.resolve(listener);
+    });
+    return lDeferred.promise;
+  }));
+
+  Assert.equal(listeners.length, 3, "Found three event listeners.");
+
+  for (let l of listeners) {
+    let node = l.node;
+    ok(node, "There is a node property.");
+    ok(node.object, "There is a node object property.");
+
+    if (node.selector != "window") {
+      let nodeCount =
+        await ContentTask.spawn(gBrowser.selectedBrowser, node.selector, async (selector) => {
+          return content.document.querySelectorAll(selector).length;
+        });
+      Assert.equal(nodeCount, 1, "The node property is a unique CSS selector.");
+    } else {
+      Assert.ok(true, "The node property is a unique CSS selector.");
     }
 
-    is(aPacket.listeners.length, 3,
-      "Found all event listeners.");
-
-    promise.all(aPacket.listeners.map(listener => {
-      const lDeferred = promise.defer();
-      aThreadClient.pauseGrip(listener.function).getDefinitionSite(aResponse => {
-        if (aResponse.error) {
-          const msg = "Error getting function definition site: " + aResponse.message;
-          ok(false, msg);
-          lDeferred.reject(msg);
-          return;
-        }
-        listener.function.url = aResponse.source.url;
-        lDeferred.resolve(listener);
-      });
-      return lDeferred.promise;
-    })).then(listeners => {
-      is(listeners.length, 3, "Found three event listeners.");
-      for (let l of listeners) {
-        let node = l.node;
-        ok(node, "There is a node property.");
-        ok(node.object, "There is a node object property.");
-        ok(node.selector == "window" ||
-          gBrowser.contentDocumentAsCPOW.querySelectorAll(node.selector).length == 1,
-          "The node property is a unique CSS selector.");
+    let func = l.function;
+    ok(func, "There is a function property.");
+    is(func.type, "object", "The function form is of type 'object'.");
+    is(func.class, "Function", "The function form is of class 'Function'.");
+    is(func.url, TAB_URL, "The function url is correct.");
 
-        let func = l.function;
-        ok(func, "There is a function property.");
-        is(func.type, "object", "The function form is of type 'object'.");
-        is(func.class, "Function", "The function form is of class 'Function'.");
-        is(func.url, TAB_URL, "The function url is correct.");
+    is(l.type, "click", "This is a click event listener.");
+    is(l.allowsUntrusted, true,
+      "'allowsUntrusted' property has the right value.");
+    is(l.inSystemEventGroup, false,
+      "'inSystemEventGroup' property has the right value.");
+    is(l.isEventHandler, false,
+      "'isEventHandler' property has the right value.");
+    is(l.capturing, false,
+      "Capturing property has the right value.");
+  }
 
-        is(l.type, "click", "This is a click event listener.");
-        is(l.allowsUntrusted, true,
-          "'allowsUntrusted' property has the right value.");
-        is(l.inSystemEventGroup, false,
-          "'inSystemEventGroup' property has the right value.");
-        is(l.isEventHandler, false,
-          "'isEventHandler' property has the right value.");
-        is(l.capturing, false,
-          "Capturing property has the right value.");
-      }
-
-      aThreadClient.resume(deferred.resolve);
-    });
-  });
-
-  return deferred.promise;
+  await aThreadClient.resume();
 }
-
-registerCleanupFunction(function () {
-  gClient = null;
-});