Bug 1492482 - Remove CPOW usage from browser_dbg_event-listeners-01.js. r=jdescottes
authorMike Conley <mconley@mozilla.com>
Tue, 02 Oct 2018 18:00:19 +0000
changeset 494971 e36f11e684015e5d4abf3df854a3d32be2e7a228
parent 494970 0c2a8c43e38efe614fd7f70e6f5c364bb63e93c4
child 494972 ac62c33e160e1aaa711034d807b75168c05732eb
push id9984
push userffxbld-merge
push dateMon, 15 Oct 2018 21:07:35 +0000
treeherdermozilla-beta@183d27ea8570 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjdescottes
bugs1492482
milestone64.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 1492482 - Remove CPOW usage from browser_dbg_event-listeners-01.js. r=jdescottes Depends on D6960 Differential Revision: https://phabricator.services.mozilla.com/D6961
devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js
--- a/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_event-listeners-01.js
@@ -4,142 +4,129 @@
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Tests that the eventListeners request works.
  */
 
 const TAB_URL = EXAMPLE_URL + "doc_event-listeners-01.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);
 
-function pauseDebuggee(aThreadClient) {
+  await client.close();
+});
+
+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: " + packet.message;
+    Assert.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;
+  }));
+
+  let types = [];
+
+  for (let l of listeners) {
+    info("Listener for the " + l.type + " event.");
+    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 => {
-      let types = [];
+    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'.");
 
-      for (let l of listeners) {
-        info("Listener for the " + l.type + " event.");
-        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.");
+    // The onchange handler is an inline string that doesn't have
+    // a URL because it's basically eval'ed
+    if (l.type !== "change") {
+      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(l.allowsUntrusted, true,
+      "'allowsUntrusted' property has the right value.");
+    is(l.inSystemEventGroup, false,
+      "'inSystemEventGroup' property has the right value.");
 
-        // The onchange handler is an inline string that doesn't have
-        // a URL because it's basically eval'ed
-        if (l.type !== "change") {
-          is(func.url, TAB_URL, "The function url is correct.");
-        }
+    types.push(l.type);
 
-        is(l.allowsUntrusted, true,
-          "'allowsUntrusted' property has the right value.");
-        is(l.inSystemEventGroup, false,
-          "'inSystemEventGroup' property has the right value.");
-
-        types.push(l.type);
+    if (l.type == "keyup") {
+      is(l.capturing, true,
+        "Capturing property has the right value.");
+      is(l.isEventHandler, false,
+        "'isEventHandler' property has the right value.");
+    } else if (l.type == "load") {
+      is(l.capturing, false,
+        "Capturing property has the right value.");
+      is(l.isEventHandler, false,
+        "'isEventHandler' property has the right value.");
+    } else {
+      is(l.capturing, false,
+        "Capturing property has the right value.");
+      is(l.isEventHandler, true,
+        "'isEventHandler' property has the right value.");
+    }
+  }
 
-        if (l.type == "keyup") {
-          is(l.capturing, true,
-            "Capturing property has the right value.");
-          is(l.isEventHandler, false,
-            "'isEventHandler' property has the right value.");
-        } else if (l.type == "load") {
-          is(l.capturing, false,
-            "Capturing property has the right value.");
-          is(l.isEventHandler, false,
-            "'isEventHandler' property has the right value.");
-        } else {
-          is(l.capturing, false,
-            "Capturing property has the right value.");
-          is(l.isEventHandler, true,
-            "'isEventHandler' property has the right value.");
-        }
-      }
+  Assert.ok(types.includes("click"), "Found the click handler.");
+  Assert.ok(types.includes("change"), "Found the change handler.");
+  Assert.ok(types.includes("keyup"), "Found the keyup handler.");
 
-      ok(types.includes("click"), "Found the click handler.");
-      ok(types.includes("change"), "Found the change handler.");
-      ok(types.includes("keyup"), "Found the keyup handler.");
-
-      aThreadClient.resume(deferred.resolve);
-    });
-  });
-
-  return deferred.promise;
+  await aThreadClient.resume();
 }
-
-registerCleanupFunction(function () {
-  gClient = null;
-});