fune/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js

141 lines
4.3 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"
);
// Setup the private browsing VPN link.
const vpnPromoUrl = RPMGetFormatURLPref(
"browser.privatebrowsing.vpnpromourl"
);
if (vpnPromoUrl) {
document
.getElementById("private-browsing-vpn-link")
.setAttribute("href", vpnPromoUrl);
} else {
// If the link is undefined, remove the promo completely
document.querySelectorAll(".vpn-promo").forEach(vpnEl => vpnEl.remove());
}
// Check ShouldShowVPNPromo
RPMSendQuery("ShouldShowVPNPromo", {}).then(shouldShow => {
if (!shouldShow) {
document.querySelectorAll(".vpn-promo").forEach(vpnEl => vpnEl.remove());
}
});
// Set up the private search banner.
const privateSearchBanner = document.getElementById("search-banner");
RPMSendQuery("ShouldShowSearchBanner", {}).then(engineName => {
if (engineName) {
document.l10n.setAttributes(
document.getElementById("about-private-browsing-search-banner-title"),
"about-private-browsing-search-banner-title",
{ 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);
});
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();
});