forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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();
 | |
| });
 | 
