Bug 1106432 - Allow search bar icon to indicate when a page offers OpenSearch. ui-r=shorlander, r=florian.
☠☠ backed out by ae788545a13c ☠ ☠
authorBlake Winton <bwinton@latte.ca>
Thu, 18 Dec 2014 15:25:21 -0500
changeset 246497 ded76f782c5e5ba22ebbeb9ad1ba4a71fa536494
parent 246496 93840f9b5af8aa3f5494e8d297c776b10c54e1e0
child 246498 ae788545a13c54dd27275a145c7a983f6fcbc188
push id4489
push userraliiev@mozilla.com
push dateMon, 23 Feb 2015 15:17:55 +0000
treeherdermozilla-beta@fd7c3dc24146 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersshorlander, florian
bugs1106432
milestone37.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 1106432 - Allow search bar icon to indicate when a page offers OpenSearch. ui-r=shorlander, r=florian.
browser/base/content/browser.css
browser/base/content/browser.js
browser/base/content/urlbarBindings.xml
browser/components/search/content/search.xml
browser/themes/linux/jar.mn
browser/themes/linux/searchbar.css
browser/themes/osx/jar.mn
browser/themes/osx/searchbar.css
browser/themes/shared/search/search-indicator-badge-add.png
browser/themes/shared/search/search-indicator-badge-add@2x.png
browser/themes/windows/jar.mn
browser/themes/windows/searchbar.css
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -439,16 +439,23 @@ panel[noactions] > richlistbox > richlis
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#browser-autocomplete-result-popup");
 }
 
 #PopupSearchAutoComplete {
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#browser-search-autocomplete-result-popup");
   margin-left: -23px;
 }
 
+/* Overlay a badge on top of the icon of additional open search providers
+   in the search panel. */
+.addengine-item > .button-box > .button-icon {
+  -moz-binding: url("chrome://browser/content/urlbarBindings.xml#addengine-icon");
+  display: -moz-stack;
+}
+
 searchbar[oneoffui] {
   -moz-binding: url("chrome://browser/content/search/search.xml#searchbar-flare") !important;
 }
 
 #PopupAutoCompleteRichResult {
   -moz-binding: url("chrome://browser/content/urlbarBindings.xml#urlbar-rich-result-popup");
 }
 
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -3303,18 +3303,42 @@ const BrowserSearch = {
 
     engines.push({ uri: engine.href,
                    title: engine.title,
                    get icon() { return browser.mIconURL; }
                  });
 
     if (hidden)
       browser.hiddenEngines = engines;
+    else {
+      browser.engines = engines;
+      if (browser == gBrowser.selectedBrowser)
+        this.updateSearchButton();
+    }
+  },
+
+  /**
+   * Update the browser UI to show whether or not additional engines are
+   * available when a page is loaded or the user switches tabs to a page that
+   * has search engines.
+   */
+  updateSearchButton: function() {
+    var searchBar = this.searchBar;
+
+    // The search bar binding might not be applied even though the element is
+    // in the document (e.g. when the navigation toolbar is hidden), so check
+    // for .searchButton specifically.
+    if (!searchBar || !searchBar.searchButton)
+      return;
+
+    var engines = gBrowser.selectedBrowser.engines;
+    if (engines && engines.length > 0)
+      searchBar.setAttribute("addengines", "true");
     else
-      browser.engines = engines;
+      searchBar.removeAttribute("addengines");
   },
 
   /**
    * Gives focus to the search bar, if it is present on the toolbar, or loads
    * the default engine's search form otherwise. For Mac, opens a new window
    * or focuses an existing window, if necessary.
    */
   webSearch: function BrowserSearch_webSearch() {
@@ -4321,16 +4345,17 @@ var XULBrowserWindow = {
         // Don't make noise when the crash reporter is built but not enabled.
       }
     }
 #endif
   },
 
   asyncUpdateUI: function () {
     FeedHandler.updateFeeds();
+    BrowserSearch.updateSearchButton();
   },
 
   // Left here for add-on compatibility, see bug 752434
   hideChromeForLocation: function() {},
 
   onStatusChange: function (aWebProgress, aRequest, aStatus, aMessage) {
     this.status = aMessage;
     this.updateStatusField();
--- a/browser/base/content/urlbarBindings.xml
+++ b/browser/base/content/urlbarBindings.xml
@@ -1229,16 +1229,23 @@
                                     Ci.nsISearchEngine.DATA_XML,
                                     target.getAttribute("src"), false,
                                     installCallback);
         }
       ]]></handler>
     </handlers>
   </binding>
 
+  <!-- Used for additional open search providers in the search panel. -->
+  <binding id="addengine-icon" extends="xul:box">
+    <content>
+      <xul:image class="addengine-icon" xbl:inherits="src"/>
+      <xul:image class="addengine-badge"/>
+    </content>
+  </binding>
 
   <binding id="urlbar-rich-result-popup" extends="chrome://global/content/bindings/autocomplete.xml#autocomplete-rich-result-popup">
     <implementation>
       <field name="_maxResults">0</field>
 
       <field name="_bundle" readonly="true">
         Cc["@mozilla.org/intl/stringbundle;1"].
           getService(Ci.nsIStringBundleService).
--- a/browser/components/search/content/search.xml
+++ b/browser/components/search/content/search.xml
@@ -265,16 +265,17 @@
                     browser.engines = [];
                   browser.engines.push(browser.hiddenEngines[i]);
                   browser.hiddenEngines.splice(i, 1);
                   break;
                 }
               }
             }
           }
+          BrowserSearch.updateSearchButton();
         ]]></body>
       </method>
 
       <!-- If the engine that was just added to the searchbox list was
       autodetected on this page, move it to each browser's hidden list so it is
       no longer offered to be added. -->
       <method name="hideNewEngine">
         <parameter name="aEngine"/>
@@ -290,16 +291,17 @@
                     browser.hiddenEngines = [];
                   browser.hiddenEngines.push(browser.engines[i]);
                   browser.engines.splice(i, 1);
                   break;
                 }
               }
             }
           }
+          BrowserSearch.updateSearchButton();
         ]]></body>
       </method>
 
       <method name="setIcon">
         <parameter name="element"/>
         <parameter name="uri"/>
         <body><![CDATA[
           if (uri) {
@@ -600,16 +602,17 @@
         Empty <box> to properly position the icon within the autocomplete
         binding's anonymous children (the autocomplete binding positions <box>
         children differently)
         -->
         <xul:box>
           <xul:hbox class="searchbar-search-button-container">
             <xul:image class="searchbar-search-button"
                        anonid="searchbar-search-button"
+                       xbl:inherits="addengines"
                        tooltiptext="&searchEndCap.label;"/>
           </xul:hbox>
           <xul:button class="searchbar-engine-button"
                       type="menu"
                       anonid="searchbar-engine-button">
             <xul:image class="searchbar-engine-image" xbl:inherits="src"/>
             <xul:image class="searchbar-dropmarker-image"/>
             <xul:menupopup class="searchbar-popup"
--- a/browser/themes/linux/jar.mn
+++ b/browser/themes/linux/jar.mn
@@ -67,16 +67,17 @@ browser.jar:
   skin/classic/browser/privatebrowsing-mask.png
   skin/classic/browser/reload-stop-go.png
   skin/classic/browser/searchbar.css
   skin/classic/browser/search-pref.png                      (../shared/search/search-pref.png)
   skin/classic/browser/search-indicator.png                 (../shared/search/search-indicator.png)
   skin/classic/browser/search-indicator-add-engine.png      (../shared/search/search-indicator-add-engine.png)
   skin/classic/browser/search-engine-placeholder.png        (../shared/search/search-engine-placeholder.png)
   skin/classic/browser/badge-add-engine.png                 (../shared/search/badge-add-engine.png)
+  skin/classic/browser/search-indicator-badge-add.png       (../shared/search/search-indicator-badge-add.png)
   skin/classic/browser/Secure.png
   skin/classic/browser/Security-broken.png
   skin/classic/browser/setDesktopBackground.css
   skin/classic/browser/slowStartup-16.png
   skin/classic/browser/theme-switcher-icon.png
   skin/classic/browser/Toolbar.png
   skin/classic/browser/Toolbar-inverted.png
   skin/classic/browser/Toolbar-small.png
--- a/browser/themes/linux/searchbar.css
+++ b/browser/themes/linux/searchbar.css
@@ -77,16 +77,20 @@ menuitem[cmd="cmd_clearhistory"][disable
 }
 
 .searchbar-search-button {
   list-style-image: url("chrome://browser/skin/search-indicator.png");
   -moz-image-region: rect(0, 20px, 20px, 0);
   margin: -2px -2px;
 }
 
+.searchbar-search-button[addengines="true"] {
+  list-style-image: url("chrome://browser/skin/search-indicator-badge-add.png");
+}
+
 .searchbar-search-button:hover {
   -moz-image-region: rect(0, 40px, 20px, 20px);
 }
 
 .searchbar-search-button:hover:active {
   -moz-image-region: rect(0, 60px, 20px, 40px);
 }
 
@@ -197,20 +201,27 @@ searchbar[oneoffui] .search-go-button:-m
   border-top: 1px solid #ccc;
 }
 
 .addengine-item:hover {
   background-color: Highlight;
   color: HighlightText;
 }
 
-.addengine-item > .button-box > .button-icon {
+.addengine-icon {
   width: 16px;
 }
 
+.addengine-badge {
+  width: 16px;
+  height: 16px;
+  margin: -7px -9px 7px 9px;
+  list-style-image: url("chrome://browser/skin/badge-add-engine.png");
+}
+
 .addengine-item > .button-box > .button-text {
   -moz-box-flex: 1;
   text-align: start;
   -moz-padding-start: 10px;
 }
 
 .addengine-item:not([image]) {
   list-style-image: url("chrome://browser/skin/search-engine-placeholder.png");
--- a/browser/themes/osx/jar.mn
+++ b/browser/themes/osx/jar.mn
@@ -108,16 +108,18 @@ browser.jar:
   skin/classic/browser/search-indicator.png                    (../shared/search/search-indicator.png)
   skin/classic/browser/search-indicator@2x.png                 (../shared/search/search-indicator@2x.png)
   skin/classic/browser/search-indicator-add-engine.png         (../shared/search/search-indicator-add-engine.png)
   skin/classic/browser/search-indicator-add-engine@2x.png      (../shared/search/search-indicator-add-engine@2x.png)
   skin/classic/browser/search-engine-placeholder.png           (../shared/search/search-engine-placeholder.png)
   skin/classic/browser/search-engine-placeholder@2x.png        (../shared/search/search-engine-placeholder@2x.png)
   skin/classic/browser/badge-add-engine.png                    (../shared/search/badge-add-engine.png)
   skin/classic/browser/badge-add-engine@2x.png                 (../shared/search/badge-add-engine@2x.png)
+  skin/classic/browser/search-indicator-badge-add.png          (../shared/search/search-indicator-badge-add.png)
+  skin/classic/browser/search-indicator-badge-add@2x.png       (../shared/search/search-indicator-badge-add@2x.png)
   skin/classic/browser/Secure-Glyph.png
   skin/classic/browser/Secure-Glyph@2x.png
   skin/classic/browser/slowStartup-16.png
   skin/classic/browser/theme-switcher-icon.png
   skin/classic/browser/theme-switcher-icon@2x.png
   skin/classic/browser/Toolbar.png
   skin/classic/browser/Toolbar@2x.png
   skin/classic/browser/Toolbar-inverted.png
--- a/browser/themes/osx/searchbar.css
+++ b/browser/themes/osx/searchbar.css
@@ -58,16 +58,20 @@
 }
 
 .searchbar-search-button {
   list-style-image: url("chrome://browser/skin/search-indicator.png");
   -moz-image-region: rect(0, 20px, 20px, 0);
   margin: 0 -3px;
 }
 
+.searchbar-search-button[addengines="true"] {
+  list-style-image: url("chrome://browser/skin/search-indicator-badge-add.png");
+}
+
 .searchbar-search-button:hover {
   -moz-image-region: rect(0, 40px, 20px, 20px);
 }
 
 .searchbar-search-button:hover:active {
   -moz-image-region: rect(0, 60px, 20px, 40px);
 }
 
@@ -100,16 +104,20 @@ searchbar[oneoffui] .search-go-button:-m
   }
 
   .searchbar-search-button {
     list-style-image: url("chrome://browser/skin/search-indicator@2x.png");
     width: 20px;
     -moz-image-region: rect(0, 40px, 40px, 0);
   }
 
+  .searchbar-search-button[addengines="true"] {
+    list-style-image: url("chrome://browser/skin/search-indicator-badge-add@2x.png");
+  }
+
   .searchbar-search-button:hover {
     -moz-image-region: rect(0, 80px, 40px, 40px);
   }
 
   .searchbar-search-button:hover:active {
     -moz-image-region: rect(0, 120px, 40px, 80px);
   }
 
@@ -208,31 +216,42 @@ searchbar[oneoffui] .search-go-button:-m
   border-top: 1px solid #ccc;
 }
 
 .addengine-item:hover {
   background-color: Highlight;
   color: HighlightText;
 }
 
-.addengine-item > .button-box > .button-icon {
+.addengine-icon {
   width: 16px;
 }
 
+.addengine-badge {
+  width: 16px;
+  height: 16px;
+  margin: -7px -9px 7px 9px;
+  list-style-image: url("chrome://browser/skin/badge-add-engine.png");
+}
+
 .addengine-item > .button-box > .button-text {
   -moz-box-flex: 1;
   text-align: start;
   -moz-padding-start: 10px;
 }
 
 .addengine-item:not([image]) {
   list-style-image: url("chrome://browser/skin/search-engine-placeholder.png");
 }
 
 @media (min-resolution: 2dppx) {
+  .addengine-badge {
+    list-style-image: url("chrome://browser/skin/badge-add-engine@2x.png");
+  }
+
   .addengine-item:not([image]) {
     list-style-image: url("chrome://browser/skin/search-engine-placeholder@2x.png");
   }
 }
 
 searchbar[oneoffui] .searchbar-engine-button {
   display: none;
 }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..62bf01b3da95aa43fb8fe2f0366926f5e23425f9
GIT binary patch
literal 1000
zc$@*~0~h>>P)<h;3K|Lk000e1NJLTq002Ay000yS1^@s6(F0y7000B8Nkl<ZSi|j>
z=}S~m7{=!>XeZ4!q=i0Y(uU=LL6L2v*+R5fSrlPGWwt?m$g;i3!8VLYQkj8riL8X6
z3q{#ZMNkHoqnSA37Z<W|M&I7&cDS6mcgAK$13&n}k8_^)%slX1UhcUjQwT*wkxUj-
z&A7!19cc=q`n4bbDYdh!gC6|6L|LB_Y45vf>I#iM&O`NcdpoG4>LTrXoIq*!C#own
z`eFHbI;iN)8QNx_Ma!>8sVg-4A^Gu-N4Yta_47K~^?Hf{^xc0$M+EKX{YA%~uAmKf
z#~DB$=b`xh_WYvEvL&?i+6V*a<J_-bUS3`jqcCj(#pQB2%755s=gY|&C|TeCk&D(b
zy<cW#W)h<?Z34yVbUN;QK2Ph*#%Q2qUHrxB*Uw_HBryupCQz!XsvL!{PSet>!!=N{
zE_!{|=*Qu*84@@d7xpbJEp+tl0^0Fxk_JlFN8Zjy>zgiYHbVj@<HEkVxtaD<m}zbC
z7!8!HcUQz4{5V`TLjot`!oH!QfwmORq{WwqX`p1CRxrcYkAqo6&^jhw>YKZ|y1LV!
zPND5jCXl~EALn>cNMS7^XdM$T_03+dw|jl@cv^Ei%C8^#IG6n_e+xnDn0Tpg_INzq
z%dSMwqTHc={m{p`>}L{VjKFjBW5kB_hb!mN*2mErC|Mt@OhD_q6ig9;4St=So%OrQ
z=hAA&C=HaXcixNh@e^Z=zy?3J+g-moe>x@FhG?K<z3FDGj~@cJVvGa46i$>>U!b%{
z<26vSE~~zXR+bdF6=NL8&;H>Itt^VrK*`$i@tltz2W`a|2lC5*o=ppL25X>XeXH`6
zkKexnN8zn`{6z|FtQczmeeqU}3^H&O-kOIimQhN<NCW7Lw`ydNfmOfVj)k<qI>-R}
zdcPh=ntO4IqNw*{@z)EqPchTxhtcW^?eE^~X{5OqXSdtc|JmQ4r5z=+X;r~!b%pll
z*V9OIFV1SUs-g0qpQO|qv6PrILS3On*i?Vl5dzoBp|NLba8_DcdLY;@8F3vUaIG8~
zd!`0wHk&PIKXDx)aIG8~d!`0w85tP|Li*CuT}uerC~45dObzyfMRzSBWTT`(6BD$b
z?pi{~MoEJvW@<>EkQ^vkjCZ>L`*aaDoY2W)yxRrXr;D)RgiaRY-7dgBU4#uUbbtpD
z6K?1L4<aVq&;cGq%s}Y>5c*JW{dA#w?WYUfYd<;kep4Tn2;FCXB6Oem4b(vO<N5=|
W;9hL$UZW@g0000<MNUMnLSTY2(CcRa
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..81056248f68f799d09974104cb26e6e82f076dbe
GIT binary patch
literal 2263
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
--- a/browser/themes/windows/jar.mn
+++ b/browser/themes/windows/jar.mn
@@ -82,16 +82,17 @@ browser.jar:
         skin/classic/browser/reload-stop-go.png
         skin/classic/browser/searchbar.css
         skin/classic/browser/searchbar-dropdown-arrow.png
         skin/classic/browser/search-pref.png                         (../shared/search/search-pref.png)
         skin/classic/browser/search-indicator.png                    (../shared/search/search-indicator.png)
         skin/classic/browser/search-indicator-add-engine.png         (../shared/search/search-indicator-add-engine.png)
         skin/classic/browser/search-engine-placeholder.png           (../shared/search/search-engine-placeholder.png)
         skin/classic/browser/badge-add-engine.png                    (../shared/search/badge-add-engine.png)
+        skin/classic/browser/search-indicator-badge-add.png          (../shared/search/search-indicator-badge-add.png)
         skin/classic/browser/Secure24.png
         skin/classic/browser/setDesktopBackground.css
         skin/classic/browser/slowStartup-16.png
         skin/classic/browser/theme-switcher-icon.png
         skin/classic/browser/Toolbar.png                             (Toolbar-XP.png)
         skin/classic/browser/Toolbar-inverted.png
         skin/classic/browser/Toolbar-lunaSilver.png
         skin/classic/browser/toolbarbutton-dropdown-arrow.png        (toolbarbutton-dropdown-arrow-XPVista7.png)
@@ -533,16 +534,17 @@ browser.jar:
         skin/classic/aero/browser/reload-stop-go.png
         skin/classic/aero/browser/searchbar.css
         skin/classic/aero/browser/searchbar-dropdown-arrow.png       (searchbar-dropdown-arrow-aero.png)
         skin/classic/aero/browser/search-pref.png                    (../shared/search/search-pref.png)
         skin/classic/aero/browser/search-indicator.png               (../shared/search/search-indicator.png)
         skin/classic/aero/browser/search-indicator-add-engine.png    (../shared/search/search-indicator-add-engine.png)
         skin/classic/aero/browser/search-engine-placeholder.png      (../shared/search/search-engine-placeholder.png)
         skin/classic/aero/browser/badge-add-engine.png               (../shared/search/badge-add-engine.png)
+        skin/classic/aero/browser/search-indicator-badge-add.png     (../shared/search/search-indicator-badge-add.png)
         skin/classic/aero/browser/Secure24.png                       (Secure24-aero.png)
         skin/classic/aero/browser/setDesktopBackground.css
         skin/classic/aero/browser/slowStartup-16.png
         skin/classic/aero/browser/theme-switcher-icon.png
         skin/classic/aero/browser/theme-switcher-icon-aero.png
         skin/classic/aero/browser/Toolbar.png
         skin/classic/aero/browser/Toolbar-inverted.png
         skin/classic/aero/browser/Toolbar-aero.png
--- a/browser/themes/windows/searchbar.css
+++ b/browser/themes/windows/searchbar.css
@@ -88,16 +88,20 @@
 }
 
 .searchbar-search-button {
   list-style-image: url("chrome://browser/skin/search-indicator.png");
   -moz-image-region: rect(0, 20px, 20px, 0);
   margin: -2px -2px;
 }
 
+.searchbar-search-button[addengines="true"] {
+  list-style-image: url("chrome://browser/skin/search-indicator-badge-add.png");
+}
+
 .searchbar-search-button:hover {
   -moz-image-region: rect(0, 40px, 20px, 20px);
 }
 
 .searchbar-search-button:hover:active {
   -moz-image-region: rect(0, 60px, 20px, 40px);
 }
 
@@ -207,20 +211,27 @@ searchbar[oneoffui] .search-go-button:-m
   border-top: 1px solid #ccc;
 }
 
 .addengine-item:hover {
   background-color: Highlight;
   color: HighlightText;
 }
 
-.addengine-item > .button-box > .button-icon {
+.addengine-icon {
   width: 16px;
 }
 
+.addengine-badge {
+  width: 16px;
+  height: 16px;
+  margin: -7px -9px 7px 9px;
+  list-style-image: url("chrome://browser/skin/badge-add-engine.png");
+}
+
 .addengine-item > .button-box > .button-text {
   -moz-box-flex: 1;
   text-align: start;
   -moz-padding-start: 10px;
 }
 
 .addengine-item:not([image]) {
   list-style-image: url("chrome://browser/skin/search-engine-placeholder.png");