fune/browser/components/privatebrowsing/content/aboutPrivateBrowsing.js
Ricky Rosario bbd0796d2c Bug 1508364 - New UI for Private Browsing with Search r=andreio
MozReview-Commit-ID: 4WSGpL5Gvde

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

--HG--
extra : moz-landing-system : lando
2019-01-21 20:14:26 +00:00

107 lines
3.6 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 */
const TP_PB_ENABLED_PREF = "privacy.trackingprotection.pbmode.enabled";
const PB_SEARCH_UI_ENABLED_PREF = "browser.privatebrowsing.searchUI";
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;
}
document.getElementById("startTour").addEventListener("click", function() {
RPMSendAsyncMessage("DontShowIntroPanelAgain");
});
let introURL = RPMGetFormatURLPref("privacy.trackingprotection.introURL");
// Variation 1 is specific to the Content Blocking UI.
let variation = "?variation=1";
document.getElementById("startTour").setAttribute("href", introURL + variation);
document.getElementById("learnMore").setAttribute("href",
RPMGetFormatURLPref("app.support.baseURL") + "private-browsing");
let tpEnabled = RPMGetBoolPref(TP_PB_ENABLED_PREF);
if (!tpEnabled) {
document.getElementById("tpSubHeader").remove();
document.getElementById("tpSection").remove();
}
let searchUIEnabled = RPMGetBoolPref(PB_SEARCH_UI_ENABLED_PREF);
if (searchUIEnabled) {
setupSearchUI();
}
});
function setupSearchUI() {
// Show the new search UI and hide the old one.
document.documentElement.classList.remove("no-search-ui");
document.documentElement.classList.add("search-ui");
// Setup the private browsing myths link.
document.getElementById("private-browsing-myths").setAttribute("href",
RPMGetFormatURLPref("app.support.baseURL") + "private-browsing-myths");
// 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.
// TODO: FIXME. We should eventually refector contentSearchUI to do only what
// we need and have it do the common search handoff work for
// about:newtab and about:privatebrowsing.
let input = document.getElementById("dummy-input");
new window.ContentSearchUIController(input, input.parentNode, "aboutprivatebrowsing", "aboutprivatebrowsing");
}