forked from mirrors/gecko-dev
		
	 b11b819e89
			
		
	
	
		b11b819e89
		
	
	
	
	
		
			
			about:newtab doesn't load aboutPrivateBrowsing.ftl and conversely about:privatebrowsing doesn't load newtab.ftl. Since permanent private browsing mode uses about:newtab as its new tab, we need to make sure we load our strings from newtab.ftl in that case. Differential Revision: https://phabricator.services.mozilla.com/D121646
		
			
				
	
	
		
			152 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* This Source Code Form is subject to the terms of the Mozilla Public
 | |
|  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 | |
|  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| function ContentSearchHandoffUIController() {
 | |
|   this._isPrivateEngine = false;
 | |
|   this._isAboutPrivateBrowsing = false;
 | |
|   this._engineIcon = null;
 | |
| 
 | |
|   window.addEventListener("ContentSearchService", this);
 | |
|   this._sendMsg("GetEngine");
 | |
|   this._sendMsg("GetHandoffSearchModePrefs");
 | |
| }
 | |
| 
 | |
| ContentSearchHandoffUIController.prototype = {
 | |
|   handleEvent(event) {
 | |
|     let methodName = "_onMsg" + event.detail.type;
 | |
|     if (methodName in this) {
 | |
|       this[methodName](event.detail.data);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   get defaultEngine() {
 | |
|     return this._defaultEngine;
 | |
|   },
 | |
| 
 | |
|   _onMsgEngine({ isPrivateEngine, isAboutPrivateBrowsing, engine }) {
 | |
|     this._isPrivateEngine = isPrivateEngine;
 | |
|     this._isAboutPrivateBrowsing = isAboutPrivateBrowsing;
 | |
|     this._updateEngine(engine);
 | |
|   },
 | |
| 
 | |
|   _onMsgCurrentEngine(engine) {
 | |
|     if (!this._isPrivateEngine) {
 | |
|       this._updateEngine(engine);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   _onMsgCurrentPrivateEngine(engine) {
 | |
|     if (this._isPrivateEngine) {
 | |
|       this._updateEngine(engine);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   _onMsgHandoffSearchModePrefs(pref) {
 | |
|     this._shouldHandOffToSearchMode = pref;
 | |
|     this._updatel10nIds();
 | |
|   },
 | |
| 
 | |
|   _updateEngine(engine) {
 | |
|     this._defaultEngine = engine;
 | |
|     if (this._engineIcon) {
 | |
|       URL.revokeObjectURL(this._engineIcon);
 | |
|     }
 | |
| 
 | |
|     // We only show the engines icon for app provided engines, otherwise show
 | |
|     // a default. xref https://bugzilla.mozilla.org/show_bug.cgi?id=1449338#c19
 | |
|     if (!engine.isAppProvided) {
 | |
|       this._engineIcon = "chrome://global/skin/icons/search-glass.svg";
 | |
|     } else if (engine.iconData) {
 | |
|       this._engineIcon = this._getFaviconURIFromIconData(engine.iconData);
 | |
|     } else {
 | |
|       this._engineIcon = "chrome://global/skin/icons/defaultFavicon.svg";
 | |
|     }
 | |
| 
 | |
|     document.body.style.setProperty(
 | |
|       "--newtab-search-icon",
 | |
|       "url(" + this._engineIcon + ")"
 | |
|     );
 | |
|     this._updatel10nIds();
 | |
|   },
 | |
| 
 | |
|   _updatel10nIds() {
 | |
|     let engine = this._defaultEngine;
 | |
|     let fakeButton = document.querySelector(".search-handoff-button");
 | |
|     let fakeInput = document.querySelector(".fake-textbox");
 | |
|     if (!fakeButton || !fakeInput) {
 | |
|       return;
 | |
|     }
 | |
|     if (!engine || this._shouldHandOffToSearchMode) {
 | |
|       document.l10n.setAttributes(
 | |
|         fakeButton,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-search-btn"
 | |
|           : "newtab-search-box-input"
 | |
|       );
 | |
|       document.l10n.setAttributes(
 | |
|         fakeInput,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-search-placeholder"
 | |
|           : "newtab-search-box-text"
 | |
|       );
 | |
|     } else if (!engine.isAppProvided) {
 | |
|       document.l10n.setAttributes(
 | |
|         fakeButton,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-handoff-no-engine"
 | |
|           : "newtab-search-box-handoff-input-no-engine"
 | |
|       );
 | |
|       document.l10n.setAttributes(
 | |
|         fakeInput,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-handoff-text-no-engine"
 | |
|           : "newtab-search-box-handoff-text-no-engine"
 | |
|       );
 | |
|     } else {
 | |
|       document.l10n.setAttributes(
 | |
|         fakeButton,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-handoff"
 | |
|           : "newtab-search-box-handoff-input",
 | |
|         {
 | |
|           engine: engine.name,
 | |
|         }
 | |
|       );
 | |
|       document.l10n.setAttributes(
 | |
|         fakeInput,
 | |
|         this._isAboutPrivateBrowsing
 | |
|           ? "about-private-browsing-handoff-text"
 | |
|           : "newtab-search-box-handoff-text",
 | |
|         {
 | |
|           engine: engine.name,
 | |
|         }
 | |
|       );
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // If the favicon is an array buffer, convert it into a Blob URI.
 | |
|   // Otherwise just return the plain URI.
 | |
|   _getFaviconURIFromIconData(data) {
 | |
|     if (typeof data === "string") {
 | |
|       return data;
 | |
|     }
 | |
| 
 | |
|     // If typeof(data) != "string", we assume it's an ArrayBuffer
 | |
|     let blob = new Blob([data]);
 | |
|     return URL.createObjectURL(blob);
 | |
|   },
 | |
| 
 | |
|   _sendMsg(type, data = null) {
 | |
|     dispatchEvent(
 | |
|       new CustomEvent("ContentSearchClient", {
 | |
|         detail: {
 | |
|           type,
 | |
|           data,
 | |
|         },
 | |
|       })
 | |
|     );
 | |
|   },
 | |
| };
 |