Bug 1348396 - Only show a badge on PanelUI while in fullscreen r=enndeakin+6102
☠☠ backed out by bc086e9044e6 ☠ ☠
authorDoug Thayer <dothayer@mozilla.com>
Mon, 10 Apr 2017 11:11:45 -0700
changeset 352434 a9fb56b87d01
parent 352433 bb0c3ac25762
child 352435 26b7053440a5
push id40527
push userneil@mozilla.com
push dateTue, 11 Apr 2017 23:45:40 +0000
treeherderautoland@a9fb56b87d01 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersenndeakin
bugs1348396
milestone55.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 1348396 - Only show a badge on PanelUI while in fullscreen r=enndeakin+6102 Previously we were showing a doorhanger when the user moused to the top of the screen while in fullscreen mode. However, the doorhanger would disappear before the user had a chance to interact with it. We decided it's best anyway to simply display a badge when the user is in fullscreen, and to reshow the doorhanger when the user exits fullscreen. MozReview-Commit-ID: ENRtXC4wqvZ
browser/components/customizableui/content/panelUI.js
browser/components/customizableui/test/browser_panelUINotifications.js
--- a/browser/components/customizableui/content/panelUI.js
+++ b/browser/components/customizableui/content/panelUI.js
@@ -680,18 +680,24 @@ const PanelUI = {
       // since we don't want their doorhangers competing for attention
       doorhangers.forEach(n => { n.dismissed = true; })
       this._hidePopup();
       this._clearBadge();
       if (!this.notifications[0].options.badgeOnly) {
         this._showMenuItem(this.notifications[0]);
       }
     } else if (doorhangers.length > 0) {
-      this._clearBadge();
-      this._showNotificationPanel(doorhangers[0]);
+      if (window.fullScreen) {
+        this._hidePopup();
+        this._showBadge(doorhangers[0]);
+        this._showMenuItem(doorhangers[0]);
+      } else {
+        this._clearBadge();
+        this._showNotificationPanel(doorhangers[0]);
+      }
     } else {
       this._hidePopup();
       this._showBadge(this.notifications[0]);
       this._showMenuItem(this.notifications[0]);
     }
   },
 
   _showNotificationPanel(notification) {
--- a/browser/components/customizableui/test/browser_panelUINotifications.js
+++ b/browser/components/customizableui/test/browser_panelUINotifications.js
@@ -298,8 +298,45 @@ add_task(function* testMultipleNonBadges
     isnot(PanelUI.menuButton.getAttribute("badge-status"), "update-manual", "update-manual badge is hidden on PanelUI button.");
     menuItem = doc.getElementById("PanelUI-update-manual-menu-item");
     is(menuItem.hidden, false, "update-manual menu item is showing.");
 
     menuItem.click();
     ok(updateManualAction.called, "update-manual main action callback was called");
   });
 });
+
+add_task(function* testFullscreen() {
+  let doc = document;
+
+  is(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is closed.");
+  let mainActionCalled = false;
+  let mainAction = {
+    callback: () => { mainActionCalled = true; }
+  };
+  PanelUI.showNotification("update-manual", mainAction);
+
+  isnot(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is showing.");
+  let notifications = [...PanelUI.notificationPanel.children].filter(n => !n.hidden);
+  is(notifications.length, 1, "PanelUI doorhanger is only displaying one notification.");
+  let doorhanger = notifications[0];
+  is(doorhanger.id, "PanelUI-update-manual-notification", "PanelUI is displaying the update-manual notification.");
+
+  let popuphiddenPromise = BrowserTestUtils.waitForEvent(PanelUI.notificationPanel, "popuphidden");
+  EventUtils.synthesizeKey("VK_F11", {});
+  yield popuphiddenPromise;
+  is(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is closed.");
+
+  window.FullScreen.showNavToolbox();
+  is(PanelUI.menuButton.getAttribute("badge-status"), "update-manual", "Badge is displaying on PanelUI button.");
+
+  let popupshownPromise = BrowserTestUtils.waitForEvent(PanelUI.notificationPanel, "popupshown");
+  EventUtils.synthesizeKey("VK_F11", {});
+  yield popupshownPromise;
+  isnot(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is showing.");
+  isnot(PanelUI.menuButton.getAttribute("badge-status"), "update-manual", "Badge is not displaying on PanelUI button.");
+
+  let mainActionButton = doc.getAnonymousElementByAttribute(doorhanger, "anonid", "button");
+  mainActionButton.click();
+  ok(mainActionCalled, "Main action callback was called");
+  is(PanelUI.notificationPanel.state, "closed", "update-manual doorhanger is closed.");
+  is(PanelUI.menuButton.hasAttribute("badge-status"), false, "Should not have a badge status");
+});