Bug 1231757 - Notification on first activation of Tracking Protection in normal mode. r=past
--- a/browser/base/content/browser-trackingprotection.js
+++ b/browser/base/content/browser-trackingprotection.js
@@ -1,14 +1,15 @@
/* 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/. */
var TrackingProtection = {
- MAX_INTROS: 0,
+ // If the user ignores the doorhanger, we stop showing it after some time.
+ MAX_INTROS: 20,
PREF_ENABLED_GLOBALLY: "privacy.trackingprotection.enabled",
PREF_ENABLED_IN_PRIVATE_WINDOWS: "privacy.trackingprotection.pbmode.enabled",
enabledGlobally: false,
enabledInPrivateWindows: false,
container: null,
content: null,
icon: null,
activeTooltipText: null,
@@ -101,21 +102,23 @@ var TrackingProtection = {
let isAllowing = state & Ci.nsIWebProgressListener.STATE_LOADED_TRACKING_CONTENT;
if (isBlocking) {
this.icon.setAttribute("tooltiptext", this.activeTooltipText);
this.icon.setAttribute("state", "blocked-tracking-content");
this.content.setAttribute("state", "blocked-tracking-content");
// Open the tracking protection introduction panel, if applicable.
- let introCount = gPrefService.getIntPref("privacy.trackingprotection.introCount");
- if (introCount < TrackingProtection.MAX_INTROS) {
- gPrefService.setIntPref("privacy.trackingprotection.introCount", ++introCount);
- gPrefService.savePrefFile(null);
- this.showIntroPanel();
+ if (this.enabledGlobally) {
+ let introCount = gPrefService.getIntPref("privacy.trackingprotection.introCount");
+ if (introCount < TrackingProtection.MAX_INTROS) {
+ gPrefService.setIntPref("privacy.trackingprotection.introCount", ++introCount);
+ gPrefService.savePrefFile(null);
+ this.showIntroPanel();
+ }
}
this.shieldHistogramAdd(2);
} else if (isAllowing) {
this.icon.setAttribute("tooltiptext", this.disabledTooltipText);
this.icon.setAttribute("state", "loaded-tracking-content");
this.content.setAttribute("state", "loaded-tracking-content");
@@ -178,29 +181,37 @@ var TrackingProtection = {
this.eventsHistogramAdd(2);
// Hide the control center.
document.getElementById("identity-popup").hidePopup();
BrowserReload();
},
+ dontShowIntroPanelAgain() {
+ // This function may be called in private windows, but it does not change
+ // any preference unless Tracking Protection is enabled globally.
+ if (this.enabledGlobally) {
+ gPrefService.setIntPref("privacy.trackingprotection.introCount",
+ this.MAX_INTROS);
+ gPrefService.savePrefFile(null);
+ }
+ },
+
showIntroPanel: Task.async(function*() {
let brandBundle = document.getElementById("bundle_brand");
let brandShortName = brandBundle.getString("brandShortName");
let openStep2 = () => {
// When the user proceeds in the tour, adjust the counter to indicate that
// the user doesn't need to see the intro anymore.
- gPrefService.setIntPref("privacy.trackingprotection.introCount",
- this.MAX_INTROS);
- gPrefService.savePrefFile(null);
+ this.dontShowIntroPanelAgain();
let nextURL = Services.urlFormatter.formatURLPref("privacy.trackingprotection.introURL") +
- "#step2";
+ "?step=2&newtab=true";
switchToTabHavingURI(nextURL, true, {
// Ignore the fragment in case the intro is shown on the tour page
// (e.g. if the user manually visited the tour or clicked the link from
// about:privatebrowsing) so we can avoid a reload.
ignoreFragment: true,
});
};
@@ -215,13 +226,14 @@ var TrackingProtection = {
style: "primary",
},
];
let panelTarget = yield UITour.getTarget(window, "trackingProtection");
UITour.initForBrowser(gBrowser.selectedBrowser, window);
UITour.showInfo(window, panelTarget,
gNavigatorBundle.getString("trackingProtection.intro.title"),
- gNavigatorBundle.getFormattedString("trackingProtection.intro.description",
+ gNavigatorBundle.getFormattedString("trackingProtection.intro.description2",
[brandShortName]),
- undefined, buttons);
+ undefined, buttons,
+ { closeButtonCallback: () => this.dontShowIntroPanelAgain() });
}),
};
--- a/browser/components/uitour/test/browser_trackingProtection.js
+++ b/browser/components/uitour/test/browser_trackingProtection.js
@@ -47,17 +47,17 @@ add_task(function* test_trackingPages()
yield new Promise((resolve, reject) => {
waitForPopupAtAnchor(TOOLTIP_PANEL, TOOLTIP_ANCHOR, resolve,
"Intro panel should appear");
});
is(Services.prefs.getIntPref(PREF_INTRO_COUNT), TrackingProtection.MAX_INTROS, "Check intro count increased");
let step2URL = Services.urlFormatter.formatURLPref("privacy.trackingprotection.introURL") +
- "#step2";
+ "?step=2&newtab=true";
let buttons = document.getElementById("UITourTooltipButtons");
info("Click the step text and nothing should happen");
let tabCount = gBrowser.tabs.length;
yield EventUtils.synthesizeMouseAtCenter(buttons.children[0], {});
is(gBrowser.tabs.length, tabCount, "Same number of tabs should be open");
info("Resetting count to test that viewing the tour prevents future panels");
--- a/browser/locales/en-US/chrome/browser/browser.properties
+++ b/browser/locales/en-US/chrome/browser/browser.properties
@@ -327,18 +327,20 @@ offlineApps.manageUsageAccessKey=S
identity.identified.verifier=Verified by: %S
identity.identified.verified_by_you=You have added a security exception for this site.
identity.identified.state_and_country=%S, %S
identity.unknown.tooltip=This website does not supply identity information.
trackingProtection.intro.title=How Tracking Protection works
-# LOCALIZATION NOTE (trackingProtection.intro.description): %S is brandShortName
-trackingProtection.intro.description=When the shield is visible, that means Firefox is actively blocking content that tracks you.
+# LOCALIZATION NOTE (trackingProtection.intro.description2):
+# %S is brandShortName. This string should match the one from Step 1 of the tour
+# when it starts from the button shown when a new private window is opened.
+trackingProtection.intro.description2=When you see the shield, %S is blocking some parts of the page that could track your browsing activity.
# LOCALIZATION NOTE (trackingProtection.intro.step1of3): Indicates that the intro panel is step one of three in a tour.
trackingProtection.intro.step1of3=1 of 3
trackingProtection.intro.nextButton.label=Next
trackingProtection.icon.activeTooltip=Tracking attempts blocked
trackingProtection.icon.disabledTooltip=Tracking content detected
# Edit Bookmark UI