1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
|
/* 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"
);
}
|