forked from mirrors/gecko-dev
		
	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,
 | 
						|
        },
 | 
						|
      })
 | 
						|
    );
 | 
						|
  },
 | 
						|
};
 |