Bug 1380021 - Remove 5000ms timeout from browser_PageActions.js test. draft
authorDrew Willcoxon <adw@mozilla.com>
Tue, 19 Sep 2017 16:29:50 -0700
changeset 667351 14ed9a14ff782e0378a6e2a53ef86c37ebe77bde
parent 666884 e4261f5b96ebfd63e7cb8af3035ff9fea90c74a5
child 732355 c71de98215ce52f91a42130b6b9539817cb18a02
push id80680
push userdwillcoxon@mozilla.com
push dateWed, 20 Sep 2017 00:19:01 +0000
bugs1380021
milestone57.0a1
Bug 1380021 - Remove 5000ms timeout from browser_PageActions.js test. MozReview-Commit-ID: EQBbKIdN235
browser/modules/test/browser/browser_PageActions.js
--- a/browser/modules/test/browser/browser_PageActions.js
+++ b/browser/modules/test/browser/browser_PageActions.js
@@ -1020,17 +1020,29 @@ function promisePanelEvent(panelIDOrNode
     }
     panel.addEventListener(eventType, () => {
       executeSoon(resolve);
     }, { once: true });
   });
 }
 
 function promisePageActionViewShown() {
-  return new Promise(resolve => {
-    BrowserPageActions.panelNode.addEventListener("ViewShown", (event) => {
-      let target = event.originalTarget;
-      window.setTimeout(() => {
-        resolve(target);
-      }, 5000);
-    }, { once: true });
+  let dwu = window.QueryInterface(Ci.nsIInterfaceRequestor)
+                  .getInterface(Ci.nsIDOMWindowUtils);
+  info("promisePageActionViewShown waiting for ViewShown");
+  return BrowserTestUtils.waitForEvent(BrowserPageActions.panelNode, "ViewShown").then(async event => {
+    let panelViewNode = event.originalTarget;
+    // Wait for the subview to be really truly shown by making sure there's at
+    // least one child with non-zero bounds.
+    info("promisePageActionViewShown waiting for a child node to be visible");
+    await BrowserTestUtils.waitForCondition(() => {
+      let bodyNode = panelViewNode.firstChild;
+      for (let childNode of bodyNode.childNodes) {
+        let bounds = dwu.getBoundsWithoutFlushing(childNode);
+        if (bounds.width > 0 && bounds.height > 0) {
+          return true;
+        }
+      }
+      return false;
+    });
+    return panelViewNode;
   });
 }