fune/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js
Jim Porter 9c55da7d77 Bug 1529969 - Only request info about the current engine to the parent; r=adw,Mardak
This patch adds a new ContentSearchHandoffUI class to be used when search
handoff is enabled in the newtab page, avoiding the much more complex
ContentSearchUI. This also reduces the amount of unnecessary information being
sent across processes.

Differential Revision: https://phabricator.services.mozilla.com/D48776

--HG--
extra : moz-landing-system : lando
2019-12-17 21:02:52 +00:00

122 lines
3.8 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/. */
/* eslint-env mozilla/frame-script */
document.addEventListener("DOMContentLoaded", function() {
if (!RPMIsWindowPrivate()) {
document.documentElement.classList.remove("private");
document.documentElement.classList.add("normal");
document
.getElementById("startPrivateBrowsing")
.addEventListener("click", function() {
RPMSendAsyncMessage("OpenPrivateWindow");
});
return;
}
// Setup the private browsing myths link.
document
.getElementById("private-browsing-myths")
.setAttribute(
"href",
RPMGetFormatURLPref("app.support.baseURL") + "private-browsing-myths"
);
// Set up the private search banner.
const privateSearchBanner = document.getElementById("search-banner");
RPMAddMessageListener("ShowSearchBanner", msg => {
if (msg.data.show) {
document.l10n.setAttributes(
document.getElementById("about-private-browsing-search-banner-title"),
"about-private-browsing-search-banner-title",
{ engineName: msg.data.engineName }
);
privateSearchBanner.removeAttribute("hidden");
document.body.classList.add("showBanner");
}
// We set this attribute so that tests know when we are done.
document.documentElement.setAttribute("SearchBannerInitialized", true);
});
RPMSendAsyncMessage("ShouldShowSearchBanner");
function hideSearchBanner() {
privateSearchBanner.setAttribute("hidden", "true");
document.body.classList.remove("showBanner");
RPMSendAsyncMessage("SearchBannerDismissed");
}
document
.getElementById("search-banner-close-button")
.addEventListener("click", () => {
hideSearchBanner();
});
let openSearchOptions = document.getElementById(
"about-private-browsing-search-banner-description"
);
let openSearchOptionsEvtHandler = evt => {
if (
evt.target.id == "open-search-options-link" &&
(evt.keyCode == evt.DOM_VK_RETURN || evt.type == "click")
) {
RPMSendAsyncMessage("OpenSearchPreferences");
hideSearchBanner();
}
};
openSearchOptions.addEventListener("click", openSearchOptionsEvtHandler);
openSearchOptions.addEventListener("keypress", openSearchOptionsEvtHandler);
// Setup the search hand-off box.
let btn = document.getElementById("search-handoff-button");
let editable = document.getElementById("fake-editable");
let HIDE_SEARCH_TOPIC = "HideSearch";
let SHOW_SEARCH_TOPIC = "ShowSearch";
let SEARCH_HANDOFF_TOPIC = "SearchHandoff";
function showSearch() {
btn.classList.remove("focused");
btn.classList.remove("hidden");
RPMRemoveMessageListener(SHOW_SEARCH_TOPIC, showSearch);
}
function hideSearch() {
btn.classList.add("hidden");
}
function handoffSearch(text) {
RPMSendAsyncMessage(SEARCH_HANDOFF_TOPIC, { text });
RPMAddMessageListener(SHOW_SEARCH_TOPIC, showSearch);
if (text) {
hideSearch();
} else {
btn.classList.add("focused");
RPMAddMessageListener(HIDE_SEARCH_TOPIC, hideSearch);
}
}
btn.addEventListener("focus", function() {
handoffSearch();
});
btn.addEventListener("click", function() {
handoffSearch();
});
// Hand-off any text that gets dropped or pasted
editable.addEventListener("drop", function(ev) {
ev.preventDefault();
let text = ev.dataTransfer.getData("text");
if (text) {
handoffSearch(text);
}
});
editable.addEventListener("paste", function(ev) {
ev.preventDefault();
handoffSearch(ev.clipboardData.getData("Text"));
});
// Load contentSearchUI so it sets the search engine icon for us.
new window.ContentSearchHandoffUIController();
});