Bug 1390055 - should highlight library and addons at toolbar if exist;r=gijs draft
authorgasolin <gasolin@gmail.com>
Thu, 17 Aug 2017 12:59:02 +0800
changeset 648624 07475863b109630c586ce1777f5754e4e7f835a3
parent 648573 a6a1f5c1d971dbee67ba6eec7ead7902351ddca2
child 726883 93d40dd90c8eee341744646b6650f7c1c89fdc82
push id74821
push userbmo:gasolin@mozilla.com
push dateFri, 18 Aug 2017 02:48:39 +0000
reviewersgijs
bugs1390055
milestone57.0a1
Bug 1390055 - should highlight library and addons at toolbar if exist;r=gijs MozReview-Commit-ID: Ijarh8qp0D9
browser/base/content/browser.xul
browser/components/uitour/UITour.jsm
browser/components/uitour/test/browser_UITour5.js
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -916,16 +916,17 @@
                        removable="true"
                        cui-areatype="toolbar"
                        tooltip="dynamic-shortcut-tooltip"/>
 
         <toolbarbutton id="library-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
                        removable="true"
                        oncommand="PanelUI.showSubView('appMenu-libraryView', this, null, event);"
                        closemenu="none"
+                       cui-areatype="toolbar"
                        label="&places.library.title;">
           <box class="toolbarbutton-animatable-box">
             <image class="toolbarbutton-animatable-image"/>
           </box>
         </toolbarbutton>
 
       </hbox>
 
--- a/browser/components/uitour/UITour.jsm
+++ b/browser/components/uitour/UITour.jsm
@@ -110,17 +110,23 @@ this.UITour = {
         return aDocument.getAnonymousElementByAttribute(statusButton,
                                                         "class",
                                                         "toolbarbutton-icon");
       },
       // This is a fake widgetName starting with the "appMenu-" prefix so we know
       // to automatically open the appMenu when annotating this target.
       widgetName: "appMenu-fxa-label",
     }],
-    ["addons",      {query: "#appMenu-addons-button"}],
+    ["addons",      {
+      query: (aDocument) => {
+        // select toolbar icon if exist, fallback to appMenu item
+        let node = aDocument.getElementById("add-ons-button");
+        return node ? node : aDocument.getElementById("appMenu-addons-button");
+      },
+    }],
     ["appMenu",     {
       addTargetListener: (aDocument, aCallback) => {
         let panelPopup = aDocument.defaultView.PanelUI.panel;
         panelPopup.addEventListener("popupshown", aCallback);
       },
       query: "#PanelUI-button",
       removeTargetListener: (aDocument, aCallback) => {
         let panelPopup = aDocument.defaultView.PanelUI.panel;
@@ -144,17 +150,23 @@ this.UITour = {
     }],
     ["forget", {
       allowAdd: true,
       query: "#panic-button",
       widgetName: "panic-button",
     }],
     ["help",        {query: "#appMenu-help-button"}],
     ["home",        {query: "#home-button"}],
-    ["library",     {query: "#appMenu-library-button"}],
+    ["library",     {
+      query: (aDocument) => {
+        // select toolbar icon if exist, fallback to appMenu item
+        let node = aDocument.getElementById("library-button");
+        return node ? node : aDocument.getElementById("appMenu-library-button");
+      },
+    }],
     ["pocket", {
       allowAdd: true,
       query: "#pocket-button",
     }],
     ["privateWindow", {query: "#appMenu-private-window-button"}],
     ["quit",        {query: "#appMenu-quit-button"}],
     ["readerMode-urlBar", {query: "#reader-mode-button"}],
     ["search",      {
--- a/browser/components/uitour/test/browser_UITour5.js
+++ b/browser/components/uitour/test/browser_UITour5.js
@@ -1,17 +1,51 @@
 "use strict";
 
 var gTestTab;
 var gContentAPI;
 var gContentWindow;
 
 add_task(setup_UITourTest);
 
+add_UITour_task(async function test_highlight_library_icon_in_toolbar() {
+  let highlight = document.getElementById("UITourHighlight");
+  is_element_hidden(highlight, "Highlight should initially be hidden");
+
+  // Test highlighting the library button
+  let highlightVisiblePromise = elementVisiblePromise(highlight, "Should show highlight");
+  gContentAPI.showHighlight("library");
+  await highlightVisiblePromise;
+  UITour.getTarget(window, "library").then((target) => {
+    is("library-button", target.node.id, "Should highlight the right target");
+  });
+});
+
+add_UITour_task(async function test_highlight_addons_icon_in_toolbar() {
+  CustomizableUI.addWidgetToArea("add-ons-button", CustomizableUI.AREA_NAVBAR, 0);
+  ok(!UITour.availableTargetsCache.has(window),
+     "Targets should be evicted from cache after widget change");
+  let highlight = document.getElementById("UITourHighlight");
+  is_element_hidden(highlight, "Highlight should initially be hidden");
+
+  // Test highlighting the addons button on toolbar
+  let highlightVisiblePromise = elementVisiblePromise(highlight, "Should show highlight");
+  gContentAPI.showHighlight("addons");
+  await highlightVisiblePromise;
+  UITour.getTarget(window, "addons").then((target) => {
+    is("add-ons-button", target.node.id, "Should highlight the right target");
+    CustomizableUI.removeWidgetFromArea("add-ons-button");
+  });
+});
+
 add_UITour_task(async function test_highlight_library_and_show_library_subview() {
+  CustomizableUI.removeWidgetFromArea("library-button");
+
+  ok(!UITour.availableTargetsCache.has(window),
+     "Targets should be evicted from cache after widget change");
   let highlight = document.getElementById("UITourHighlight");
   is_element_hidden(highlight, "Highlight should initially be hidden");
 
   // Test highlighting the library button
   let appMenu = PanelUI.panel;
   let appMenuShownPromise = promisePanelElementShown(window, appMenu);
   let highlightVisiblePromise = elementVisiblePromise(highlight, "Should show highlight");
   gContentAPI.showHighlight("library");
@@ -32,10 +66,11 @@ add_UITour_task(async function test_high
   is(PanelUI.multiView.current.id, "appMenu-libraryView", "Should show the library subview");
   is(appMenu.state, "open", "Should still open the app menu for the library subview");
 
   // Clean up
   let appMenuHiddenPromise = promisePanelElementHidden(window, appMenu);
   gContentAPI.hideMenu("appMenu");
   await appMenuHiddenPromise;
   is(appMenu.state, "closed", "Should close the app menu");
+  CustomizableUI.addWidgetToArea("library", CustomizableUI.AREA_NAVBAR, 0);
 });