summaryrefslogtreecommitdiffstats
path: root/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/privatebrowsing/content/aboutPrivateBrowsing.js')
-rw-r--r--browser/components/privatebrowsing/content/aboutPrivateBrowsing.js141
1 files changed, 141 insertions, 0 deletions
diff --git a/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js
new file mode 100644
index 0000000000..5d9b78b902
--- /dev/null
+++ b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js
@@ -0,0 +1,141 @@
+/* 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();
+});