Bug 1049545 - use a mutation observer instead of a timeout to wait for the notification, r=mak
authorGijs Kruitbosch <gijskruitbosch@gmail.com>
Thu, 07 Aug 2014 10:55:19 +0100
changeset 198376 01e2fbcd6455eeceac93360591f3ad034159dd68
parent 198375 48c9243ab15a240fe1f67f59a3103a1c7f93e43a
child 198377 bdab9531e0ac570e8555ea53f387f9c4eba41484
push id1
push userroot
push dateMon, 20 Oct 2014 17:29:22 +0000
reviewersmak
bugs1049545
milestone34.0a1
Bug 1049545 - use a mutation observer instead of a timeout to wait for the notification, r=mak
browser/base/content/test/general/browser_urlbarSearchSingleWordNotification.js
--- a/browser/base/content/test/general/browser_urlbarSearchSingleWordNotification.js
+++ b/browser/base/content/test/general/browser_urlbarSearchSingleWordNotification.js
@@ -1,23 +1,37 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
+let notificationObserver;
 registerCleanupFunction(function() {
   Services.prefs.clearUserPref("browser.fixup.domainwhitelist.localhost");
+  if (notificationObserver) {
+    notificationObserver.disconnect();
+  }
 });
 
 function promiseNotificationForTab(value, expected, tab=gBrowser.selectedTab) {
   let deferred = Promise.defer();
   let notificationBox = gBrowser.getNotificationBox(tab.linkedBrowser);
   if (expected) {
-    waitForCondition(() => notificationBox.getNotificationWithValue(value) !== null,
-                     deferred.resolve, "Were expecting to get a notification");
+    let checkForNotification = function() {
+      if (notificationBox.getNotificationWithValue(value)) {
+        notificationObserver.disconnect();
+        notificationObserver = null;
+        deferred.resolve();
+      }
+    }
+    if (notificationObserver) {
+      notificationObserver.disconnect();
+    }
+    notificationObserver = new MutationObserver(checkForNotification);
+    notificationObserver.observe(notificationBox, {childList: true});
   } else {
     setTimeout(() => {
       is(notificationBox.getNotificationWithValue(value), null, "We are expecting to not get a notification");
       deferred.resolve();
     }, 1000);
   }
   return deferred.promise;
 }