Backed out changeset e69eab662c29 (bug 1314125) for also being the reason for the timeouts in browser_permission_doorhanger.js on e10s
authorPhil Ringnalda <philringnalda@gmail.com>
Tue, 01 Nov 2016 19:12:35 -0700
changeset 347140 561796983216c6941ac747d83c2bf79f4d5fd68b
parent 347139 4401660ffb9a42bc47a60e0370ad116efced81d7
child 347141 62fe5d16e9f36c1f99a1147d6b2501859e54f87f
push id10298
push userraliiev@mozilla.com
push dateMon, 14 Nov 2016 12:33:03 +0000
treeherdermozilla-aurora@7e29173b1641 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1314125
milestone52.0a1
backs oute69eab662c295804c8c27e1183bced3db5421efc
Backed out changeset e69eab662c29 (bug 1314125) for also being the reason for the timeouts in browser_permission_doorhanger.js on e10s CLOSED TREE
toolkit/modules/PopupNotifications.jsm
--- a/toolkit/modules/PopupNotifications.jsm
+++ b/toolkit/modules/PopupNotifications.jsm
@@ -414,17 +414,17 @@ PopupNotifications.prototype = {
 
     let existingNotification = this.getNotification(id, browser);
     if (existingNotification)
       this._remove(existingNotification);
 
     let notifications = this._getNotificationsForBrowser(browser);
     notifications.push(notification);
 
-    let isActiveBrowser = this._isActiveBrowser(browser);
+    let isActiveBrowser = browser.docShellIsActive;
     let fm = Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager);
     let isActiveWindow = fm.activeWindow == this.window;
 
     if (isActiveBrowser) {
       if (isActiveWindow) {
         // show panel now
         this._update(notifications, new Set([notification.anchorElement]), true);
       } else {
@@ -490,34 +490,34 @@ PopupNotifications.prototype = {
       }
 
       this._fireCallback(notification, NOTIFICATION_EVENT_REMOVED);
       return false;
     }, this);
 
     this._setNotificationsForBrowser(aBrowser, notifications);
 
-    if (this._isActiveBrowser(aBrowser)) {
+    if (aBrowser.docShellIsActive) {
       // get the anchor element if the browser has defined one so it will
       // _update will handle both the tabs iconBox and non-tab permission
       // anchors.
       this._update(notifications, this._getAnchorsForNotifications(notifications,
         getAnchorFromBrowser(aBrowser)));
     }
   },
 
   /**
    * Removes a Notification.
    * @param notification
    *        The Notification object to remove.
    */
   remove: function PopupNotifications_remove(notification) {
     this._remove(notification);
 
-    if (this._isActiveBrowser(notification.browser)) {
+    if (notification.browser.docShellIsActive) {
       let notifications = this._getNotificationsForBrowser(notification.browser);
       this._update(notifications);
     }
   },
 
   handleEvent: function (aEvent) {
     switch (aEvent.type) {
       case "popuphidden":
@@ -565,17 +565,17 @@ PopupNotifications.prototype = {
     let notifications = this._getNotificationsForBrowser(notification.browser);
     if (!notifications)
       return;
 
     var index = notifications.indexOf(notification);
     if (index == -1)
       return;
 
-    if (this._isActiveBrowser(notification.browser))
+    if (notification.browser.docShellIsActive)
       notification.anchorElement.removeAttribute(ICON_ATTRIBUTE_SHOWING);
 
     // remove the notification
     notifications.splice(index, 1);
     this._fireCallback(notification, NOTIFICATION_EVENT_REMOVED);
   },
 
   /**
@@ -1048,24 +1048,16 @@ PopupNotifications.prototype = {
       if (notification.anchorElement)
         anchors.add(notification.anchorElement)
     }
     if (defaultAnchor && !anchors.size)
       anchors.add(defaultAnchor);
     return anchors;
   },
 
-  _isActiveBrowser: function (browser) {
-    // Note: This helper only exists, because in e10s builds,
-    // we can't access the docShell of a browser from chrome.
-    return browser.docShell
-      ? browser.docShell.isActive
-      : (this.window.gBrowser.selectedBrowser == browser);
-  },
-
   _onIconBoxCommand: function PopupNotifications_onIconBoxCommand(event) {
     // Left click, space or enter only
     let type = event.type;
     if (type == "click" && event.button != 0)
       return;
 
     if (type == "keypress" &&
         !(event.charCode == Ci.nsIDOMKeyEvent.DOM_VK_SPACE ||