зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1470020 - Part 2 - Add specific states for when the user has added a TP exception to the TP section of the identity popup. r=florian
We used to give this all the same "tracking-loaded" state, but now we want to differentiate between: - Tracking loaded because TP is off - Tracking loaded because of an exception - Tracking not loaded but the site has an exception, which we want to allow the user to remove (if TP is on) MozReview-Commit-ID: E9j0Roq1bsH --HG-- extra : rebase_source : 70992e27b91bfed3cce0b868b63ce3a8c0afc5d0
This commit is contained in:
Родитель
eea47c667c
Коммит
e338329576
|
@ -144,11 +144,25 @@ var TrackingProtection = {
|
|||
let isBlocking = state & Ci.nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT;
|
||||
let isAllowing = state & Ci.nsIWebProgressListener.STATE_LOADED_TRACKING_CONTENT;
|
||||
|
||||
// Check whether the user has added an exception for this site.
|
||||
let hasException = false;
|
||||
if (PrivateBrowsingUtils.isBrowserPrivate(gBrowser.selectedBrowser)) {
|
||||
hasException = PrivateBrowsingUtils.existsInTrackingAllowlist(this._baseURIForChannelClassifier);
|
||||
} else {
|
||||
hasException = Services.perms.testExactPermission(this._baseURIForChannelClassifier,
|
||||
"trackingprotection") == Services.perms.ALLOW_ACTION;
|
||||
}
|
||||
|
||||
if (hasException) {
|
||||
this.content.setAttribute("hasException", "true");
|
||||
} else {
|
||||
this.content.removeAttribute("hasException");
|
||||
}
|
||||
|
||||
if (isBlocking && this.enabled) {
|
||||
this.icon.setAttribute("tooltiptext", this.activeTooltipText);
|
||||
this.icon.setAttribute("state", "blocked-tracking-content");
|
||||
this.content.setAttribute("state", "blocked-tracking-content");
|
||||
this.content.removeAttribute("hasException");
|
||||
|
||||
// Open the tracking protection introduction panel, if applicable.
|
||||
if (this.enabledGlobally) {
|
||||
|
@ -162,21 +176,6 @@ var TrackingProtection = {
|
|||
|
||||
this.shieldHistogramAdd(2);
|
||||
} else if (isAllowing) {
|
||||
// Check whether the user has added an exception for this site.
|
||||
let hasException = false;
|
||||
if (PrivateBrowsingUtils.isBrowserPrivate(gBrowser.selectedBrowser)) {
|
||||
hasException = PrivateBrowsingUtils.existsInTrackingAllowlist(this._baseURIForChannelClassifier);
|
||||
} else {
|
||||
hasException = Services.perms.testExactPermission(this._baseURIForChannelClassifier,
|
||||
"trackingprotection") == Services.perms.ALLOW_ACTION;
|
||||
}
|
||||
|
||||
if (hasException) {
|
||||
this.content.setAttribute("hasException", "true");
|
||||
} else {
|
||||
this.content.removeAttribute("hasException");
|
||||
}
|
||||
|
||||
// Only show the shield when TP is enabled for now.
|
||||
if (this.enabled) {
|
||||
this.icon.setAttribute("tooltiptext", this.disabledTooltipText);
|
||||
|
@ -194,7 +193,6 @@ var TrackingProtection = {
|
|||
this.icon.removeAttribute("tooltiptext");
|
||||
this.icon.removeAttribute("state");
|
||||
this.content.removeAttribute("state");
|
||||
this.content.removeAttribute("hasException");
|
||||
|
||||
// We didn't show the shield
|
||||
this.shieldHistogramAdd(0);
|
||||
|
|
|
@ -50,6 +50,7 @@ function testTrackingPage(window) {
|
|||
// Make sure that the blocked tracking elements message appears
|
||||
ok(hidden("#tracking-not-detected"), "labelNoTracking is hidden");
|
||||
ok(hidden("#tracking-loaded"), "labelTrackingLoaded is hidden");
|
||||
ok(hidden("#tracking-loaded-exception"), "labelTrackingLoadedException is hidden");
|
||||
ok(!hidden("#tracking-blocked"), "labelTrackingBlocked is visible");
|
||||
}
|
||||
|
||||
|
@ -67,7 +68,7 @@ function testTrackingPageUnblocked() {
|
|||
|
||||
// Make sure that the blocked tracking elements message appears
|
||||
ok(hidden("#tracking-not-detected"), "labelNoTracking is hidden");
|
||||
ok(!hidden("#tracking-loaded"), "labelTrackingLoaded is visible");
|
||||
ok(!hidden("#tracking-loaded-exception"), "labelTrackingLoadedException is visible");
|
||||
ok(hidden("#tracking-blocked"), "labelTrackingBlocked is hidden");
|
||||
}
|
||||
|
||||
|
|
|
@ -65,6 +65,27 @@ function testBenignPage() {
|
|||
ok(hidden("#tracking-blocked"), "labelTrackingBlocked is hidden");
|
||||
}
|
||||
|
||||
function testBenignPageWithException() {
|
||||
info("Non-tracking content must not be blocked");
|
||||
ok(!TrackingProtection.container.hidden, "The container is visible");
|
||||
ok(!TrackingProtection.content.hasAttribute("state"), "content: no state");
|
||||
ok(!TrackingProtection.icon.hasAttribute("state"), "icon: no state");
|
||||
ok(!TrackingProtection.icon.hasAttribute("tooltiptext"), "icon: no tooltip");
|
||||
|
||||
ok(hidden("#tracking-protection-icon"), "icon is hidden");
|
||||
is(!hidden("#tracking-action-block"), TrackingProtection.enabled,
|
||||
"blockButton is visible if TP is on");
|
||||
ok(hidden("#tracking-action-unblock"), "unblockButton is hidden");
|
||||
ok(!hidden("#tracking-protection-preferences-button"), "preferences button is visible");
|
||||
|
||||
is(!hidden("#tracking-not-detected-exception"), TrackingProtection.enabled,
|
||||
"labelNoTrackingException is visible if TP is on");
|
||||
is(hidden("#tracking-not-detected"), TrackingProtection.enabled,
|
||||
"labelNoTracking is visible if TP is off");
|
||||
ok(hidden("#tracking-loaded"), "labelTrackingLoaded is hidden");
|
||||
ok(hidden("#tracking-blocked"), "labelTrackingBlocked is hidden");
|
||||
}
|
||||
|
||||
function testTrackingPage(window) {
|
||||
info("Tracking content must be blocked");
|
||||
ok(!TrackingProtection.container.hidden, "The container is visible");
|
||||
|
@ -91,6 +112,7 @@ function testTrackingPage(window) {
|
|||
// Make sure that the blocked tracking elements message appears
|
||||
ok(hidden("#tracking-not-detected"), "labelNoTracking is hidden");
|
||||
ok(hidden("#tracking-loaded"), "labelTrackingLoaded is hidden");
|
||||
ok(hidden("#tracking-loaded-exception"), "labelTrackingLoadedException is hidden");
|
||||
ok(!hidden("#tracking-blocked"), "labelTrackingBlocked is visible");
|
||||
}
|
||||
|
||||
|
@ -113,15 +135,38 @@ function testTrackingPageUnblocked() {
|
|||
|
||||
// Make sure that the blocked tracking elements message appears
|
||||
ok(hidden("#tracking-not-detected"), "labelNoTracking is hidden");
|
||||
ok(!hidden("#tracking-loaded"), "labelTrackingLoaded is visible");
|
||||
is(hidden("#tracking-loaded"), TrackingProtection.enabled,
|
||||
"labelTrackingLoaded is visible if TP is off");
|
||||
is(!hidden("#tracking-loaded-exception"), TrackingProtection.enabled,
|
||||
"labelTrackingLoadedException is visible if TP is on");
|
||||
ok(hidden("#tracking-blocked"), "labelTrackingBlocked is hidden");
|
||||
}
|
||||
|
||||
async function testTrackingProtectionEnabled(tab) {
|
||||
info("Testing with Tracking Protection ENABLED.");
|
||||
|
||||
info("Load a test page not containing tracking elements");
|
||||
await promiseTabLoadEvent(tab, BENIGN_PAGE);
|
||||
testBenignPage();
|
||||
|
||||
info("Load a test page not containing tracking elements which has an exception.");
|
||||
let isPrivateBrowsing = PrivateBrowsingUtils.isWindowPrivate(tab.ownerGlobal);
|
||||
let uri = Services.io.newURI("https://example.org/");
|
||||
if (isPrivateBrowsing) {
|
||||
PrivateBrowsingUtils.addToTrackingAllowlist(uri);
|
||||
} else {
|
||||
Services.perms.add(uri, "trackingprotection", Services.perms.ALLOW_ACTION);
|
||||
}
|
||||
|
||||
await promiseTabLoadEvent(tab, uri.spec);
|
||||
testBenignPageWithException();
|
||||
|
||||
if (isPrivateBrowsing) {
|
||||
PrivateBrowsingUtils.removeFromTrackingAllowlist(uri);
|
||||
} else {
|
||||
Services.perms.remove(uri, "trackingprotection");
|
||||
}
|
||||
|
||||
info("Load a test page containing tracking elements");
|
||||
await promiseTabLoadEvent(tab, TRACKING_PAGE);
|
||||
testTrackingPage(tab.ownerGlobal);
|
||||
|
@ -140,10 +185,19 @@ async function testTrackingProtectionEnabled(tab) {
|
|||
}
|
||||
|
||||
async function testTrackingProtectionDisabled(tab) {
|
||||
info("Testing with Tracking Protection DISABLED.");
|
||||
|
||||
info("Load a test page not containing tracking elements");
|
||||
await promiseTabLoadEvent(tab, BENIGN_PAGE);
|
||||
testBenignPage();
|
||||
|
||||
info("Load a test page not containing tracking elements which has an exception.");
|
||||
let uri = Services.io.newURI("https://example.org/");
|
||||
Services.perms.add(uri, "trackingprotection", Services.perms.ALLOW_ACTION);
|
||||
await promiseTabLoadEvent(tab, uri.spec);
|
||||
testBenignPageWithException();
|
||||
Services.perms.remove(uri, "trackingprotection");
|
||||
|
||||
info("Load a test page containing tracking elements");
|
||||
await promiseTabLoadEvent(tab, TRACKING_PAGE);
|
||||
testTrackingPageUnblocked();
|
||||
|
@ -158,7 +212,7 @@ add_task(async function testNormalBrowsing() {
|
|||
TrackingProtection = gBrowser.ownerGlobal.TrackingProtection;
|
||||
ok(TrackingProtection, "TP is attached to the browser window");
|
||||
is(TrackingProtection.enabled, Services.prefs.getBoolPref(PREF),
|
||||
"TP.enabled is based on the original pref value");
|
||||
"TP.enabled is based on the original pref value");
|
||||
|
||||
Services.prefs.setBoolPref(PREF, true);
|
||||
ok(TrackingProtection.enabled, "TP is enabled after setting the pref");
|
||||
|
@ -179,7 +233,7 @@ add_task(async function testPrivateBrowsing() {
|
|||
TrackingProtection = tabbrowser.ownerGlobal.TrackingProtection;
|
||||
ok(TrackingProtection, "TP is attached to the private window");
|
||||
is(TrackingProtection.enabled, Services.prefs.getBoolPref(PB_PREF),
|
||||
"TP.enabled is based on the pb pref value");
|
||||
"TP.enabled is based on the pb pref value");
|
||||
|
||||
Services.prefs.setBoolPref(PB_PREF, true);
|
||||
ok(TrackingProtection.enabled, "TP is enabled after setting the pref");
|
||||
|
|
|
@ -78,6 +78,10 @@
|
|||
crop="end">&trackingProtection.detectedNotBlocked4;</description>
|
||||
<description id="tracking-not-detected"
|
||||
crop="end">&trackingProtection.notDetected4;</description>
|
||||
<description id="tracking-loaded-exception"
|
||||
crop="end">&trackingProtection.detectedException;</description>
|
||||
<description id="tracking-not-detected-exception"
|
||||
crop="end">&trackingProtection.notDetectedException;</description>
|
||||
<description id="tracking-reload-required"
|
||||
crop="end">&trackingProtection.reloadRequired;</description>
|
||||
|
||||
|
|
|
@ -909,6 +909,9 @@ you can use these alternative items. Otherwise, their values should be empty. -
|
|||
<!ENTITY trackingProtection.detectedBlocked3 "&brandShortName; is blocking parts of the page that may track your browsing.">
|
||||
<!ENTITY trackingProtection.detectedNotBlocked4 "Trackers have been detected on this webpage.">
|
||||
<!ENTITY trackingProtection.notDetected4 "No trackers detected on this page.">
|
||||
<!ENTITY trackingProtection.detectedException "&brandShortName; has detected elements that may track your browsing. You have disabled protection for this site.">
|
||||
<!ENTITY trackingProtection.notDetectedException "No tracking elements detected on this page. You have disabled protection for this site.">
|
||||
|
||||
<!ENTITY trackingProtection.reloadRequired "You have enabled Tracking Protection. To block all trackers please reload the current webpage.">
|
||||
<!-- LOCALIZATION NOTE (trackingProtection.unblock.label, trackingProtection.unblock.accesskey):
|
||||
The associated button with this label and accesskey is only shown when opening the control
|
||||
|
|
|
@ -341,7 +341,8 @@ description#identity-popup-content-verifier,
|
|||
/* Show the right tracking descriptions and buttons for the corresponding state. */
|
||||
|
||||
/* Default state / Tracking not detected */
|
||||
#tracking-protection-content:not([state]) > #tracking-not-detected,
|
||||
#tracking-protection-content:not([state]):-moz-any([enabled="false"], :not([hasException])) > #tracking-not-detected,
|
||||
#tracking-protection-content:not([state])[enabled="true"][hasException] > #tracking-not-detected-exception,
|
||||
/* Blocking tracking, offer buttons to unblock (depending on PBM). */
|
||||
#tracking-protection-content[state="blocked-tracking-content"] > #tracking-blocked,
|
||||
#main-window:not([privatebrowsingmode]) #tracking-protection-content[state="blocked-tracking-content"] > #tracking-action-unblock,
|
||||
|
@ -349,8 +350,9 @@ description#identity-popup-content-verifier,
|
|||
/* Enabled and no exception but trackers loaded, probably needs a reload */
|
||||
#tracking-protection-content[enabled="true"]:not([hasException])[state="loaded-tracking-content"] > #tracking-reload-required,
|
||||
#tracking-protection-content[enabled="true"]:not([hasException])[state="loaded-tracking-content"] > #tracking-action-reload,
|
||||
/* Disabled or has an exception, offer to block the site. */
|
||||
#tracking-protection-content[state="loaded-tracking-content"]:-moz-any([enabled="false"],[hasException]) > #tracking-loaded,
|
||||
/* Tracking Loaded */
|
||||
#tracking-protection-content[state="loaded-tracking-content"][enabled="false"] > #tracking-loaded,
|
||||
#tracking-protection-content[state="loaded-tracking-content"][enabled="true"][hasException] > #tracking-loaded-exception,
|
||||
/* Has an exception, offer to block the site again. */
|
||||
#tracking-protection-content[enabled="true"][hasException] > #tracking-action-block {
|
||||
display: -moz-box;
|
||||
|
|
Загрузка…
Ссылка в новой задаче