diff options
Diffstat (limited to 'browser/components/privatebrowsing/content/aboutPrivateBrowsing.js')
-rw-r--r-- | browser/components/privatebrowsing/content/aboutPrivateBrowsing.js | 141 |
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(); +}); |