Bug 1449338 - Show currently selected engine in newtabs search input. r=mikedeboer draft
authorDale Harvey <dale@arandomurl.com>
Tue, 17 Apr 2018 13:30:54 +0100
changeset 784865 260266a713d9b88c374f6e3d0f3086727fd8cd54
parent 784385 8306e1afdb9b05a6764100999c6c33e9ff18c40d
push id107062
push userbmo:dharvey@mozilla.com
push dateThu, 19 Apr 2018 08:43:32 +0000
reviewersmikedeboer
bugs1449338
milestone61.0a1
Bug 1449338 - Show currently selected engine in newtabs search input. r=mikedeboer MozReview-Commit-ID: GTsx9dReoxS
browser/base/content/contentSearchUI.js
browser/modules/ContentSearch.jsm
browser/modules/test/browser/browser_ContentSearch.js
--- a/browser/base/content/contentSearchUI.js
+++ b/browser/base/content/contentSearchUI.js
@@ -4,16 +4,17 @@
 
 "use strict";
 
 this.ContentSearchUIController = (function() {
 
 const MAX_DISPLAYED_SUGGESTIONS = 6;
 const SUGGESTION_ID_PREFIX = "searchSuggestion";
 const ONE_OFF_ID_PREFIX = "oneOff";
+const DEFAULT_INPUT_ICON = "chrome://browser/skin/search-glass.svg";
 
 const HTML_NS = "http://www.w3.org/1999/xhtml";
 
 /**
  * Creates a new object that manages search suggestions and their UI for a text
  * box.
  *
  * The UI consists of an html:table that's inserted into the DOM after the given
@@ -86,16 +87,17 @@ ContentSearchUIController.prototype = {
     } else {
       icon = "chrome://mozapps/skin/places/defaultFavicon.svg";
     }
     this._defaultEngine = {
       name: engine.name,
       icon,
     };
     this._updateDefaultEngineHeader();
+    this._updateDefaultEngineIcon();
 
     if (engine && document.activeElement == this.input) {
       this._speculativeConnect();
     }
   },
 
   get engines() {
     return this._engines;
@@ -604,16 +606,24 @@ ContentSearchUIController.prototype = {
   _onMsgStrings(strings) {
     this._strings = strings;
     this._updateDefaultEngineHeader();
     this._updateSearchWithHeader();
     document.getElementById("contentSearchSettingsButton").textContent =
       this._strings.searchSettings;
   },
 
+  _updateDefaultEngineIcon() {
+    let eng = this._engines.find(engine => engine.name === this.defaultEngine.name);
+    // We only show the engines icon for default engines, otherwise show
+    // a default; default engines have an identifier
+    let icon = eng.identifier ? this.defaultEngine.icon : DEFAULT_INPUT_ICON;
+    document.body.style.setProperty("--newtab-search-icon", "url(" + icon + ")");
+  },
+
   _updateDefaultEngineHeader() {
     let header = document.getElementById("contentSearchDefaultEngineHeader");
     header.firstChild.setAttribute("src", this.defaultEngine.icon);
     if (!this._strings) {
       return;
     }
     while (header.firstChild.nextSibling) {
       header.firstChild.nextSibling.remove();
--- a/browser/modules/ContentSearch.jsm
+++ b/browser/modules/ContentSearch.jsm
@@ -334,16 +334,17 @@ var ContentSearch = {
       let iconBuffer = uri;
       if (!uriFlag) {
         iconBuffer = await this._arrayBufferFromDataURI(uri);
       }
       state.engines.push({
         name: engine.name,
         iconBuffer,
         hidden: hiddenList.includes(engine.name),
+        identifier: engine.identifier
       });
     }
     return state;
   },
 
   _processEventQueue() {
     if (this._currentEventPromise || !this._eventQueue.length) {
       return;
--- a/browser/modules/test/browser/browser_ContentSearch.js
+++ b/browser/modules/test/browser/browser_ContentSearch.js
@@ -367,16 +367,17 @@ var currentStateObj = async function() {
     currentEngine: await currentEngineObj(),
   };
   for (let engine of Services.search.getVisibleEngines()) {
     let uri = engine.getIconURLBySize(16, 16);
     state.engines.push({
       name: engine.name,
       iconBuffer: await arrayBufferFromDataURI(uri),
       hidden: false,
+      identifier: engine.identifier,
     });
   }
   return state;
 };
 
 var currentEngineObj = async function() {
   let engine = Services.search.currentEngine;
   let uriFavicon = engine.getIconURLBySize(16, 16);