Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/* Any copyright is dedicated to the Public Domain.
"use strict";
// Each task reopens about:preferences, whose Lit-based controls render very
// slowly under the ChaosMode passes of test-verify on macOS. Give the file
// extra headroom for those passes; normal runs finish in a couple of seconds.
requestLongerTimeout(3);
const CAT_PREF = "browser.contentblocking.category";
const TP_PREF = "privacy.trackingprotection.enabled";
const TP_PBM_PREF = "privacy.trackingprotection.pbmode.enabled";
const EMAIL_TP_PREF = "privacy.trackingprotection.emailtracking.enabled";
const EMAIL_TP_PBM_PREF =
"privacy.trackingprotection.emailtracking.pbmode.enabled";
const STP_PREF = "privacy.trackingprotection.socialtracking.enabled";
const STP_COOKIES_PREF = "privacy.socialtracking.block_cookies.enabled";
add_task(async function test_custom_tracking_protection_controls() {
await SpecialPowers.pushPrefEnv({
set: [
[CAT_PREF, "custom"],
[TP_PREF, false],
[TP_PBM_PREF, true],
[EMAIL_TP_PREF, false],
[EMAIL_TP_PBM_PREF, true],
[STP_PREF, false],
[STP_COOKIES_PREF, true],
],
});
let { doc } = await openEtpCustomizePage();
let tpToggle = getControl(doc, "etpCustomTrackingProtectionEnabled");
let tpContext = getControl(doc, "etpCustomTrackingProtectionEnabledContext");
ok(tpToggle.pressed, "Tracking protection toggle starts enabled");
let prefChange = TestUtils.waitForPrefChange(
TP_PBM_PREF,
value => value === false
);
synthesizeClick(tpToggle.buttonEl);
await prefChange;
ok(!tpToggle.pressed, "Tracking protection toggle reflects disabled state");
ok(
!Services.prefs.getBoolPref(TP_PREF),
"All-windows tracking protection pref remains false"
);
// the toggle off, it must be disabled in both contexts.
ok(
!Services.prefs.getBoolPref(EMAIL_TP_PREF),
"All-windows email tracking protection disabled when toggle is off"
);
ok(
!Services.prefs.getBoolPref(EMAIL_TP_PBM_PREF),
"Private-windows email tracking protection disabled when toggle is off"
);
// Social tracking protection follows all-windows tracking protection
ok(
!Services.prefs.getBoolPref(STP_PREF),
"Social tracking protection disabled when toggle is off"
);
prefChange = TestUtils.waitForPrefChange(
TP_PBM_PREF,
value => value === true
);
synthesizeClick(tpToggle.buttonEl);
await prefChange;
ok(tpToggle.pressed, "Tracking protection toggle enabled again");
ok(
!Services.prefs.getBoolPref(TP_PREF),
"All-windows tracking protection pref still false after re-enabling toggle"
);
ok(
!Services.prefs.getBoolPref(EMAIL_TP_PREF),
"All-windows email tracking protection stays disabled for private-only TP"
);
ok(
Services.prefs.getBoolPref(EMAIL_TP_PBM_PREF),
"Private-windows email tracking protection enabled with the toggle"
);
ok(
!Services.prefs.getBoolPref(STP_PREF),
"Social tracking protection stays disabled for private-only TP"
);
info("Switch context to protect all windows");
await changeMozSelectValue(tpContext, "all");
ok(
Services.prefs.getBoolPref(TP_PREF),
"Tracking protection pref enabled for all windows"
);
ok(
Services.prefs.getBoolPref(TP_PBM_PREF),
"Tracking protection PBM pref stays enabled"
);
ok(
Services.prefs.getBoolPref(EMAIL_TP_PREF),
"All-windows email tracking protection enabled for all windows"
);
ok(
Services.prefs.getBoolPref(EMAIL_TP_PBM_PREF),
"Private-windows email tracking protection enabled for all windows"
);
ok(
Services.prefs.getBoolPref(STP_PREF),
"Social tracking protection enabled for all windows"
);
info("Switch back to private windows only");
await changeMozSelectValue(tpContext, "pbmOnly");
ok(
!Services.prefs.getBoolPref(TP_PREF),
"All windows pref disabled when choosing private only"
);
ok(
Services.prefs.getBoolPref(TP_PBM_PREF),
"Private windows pref stays enabled"
);
ok(
!Services.prefs.getBoolPref(EMAIL_TP_PREF),
"All-windows email tracking protection disabled when choosing private only"
);
ok(
Services.prefs.getBoolPref(EMAIL_TP_PBM_PREF),
"Private-windows email tracking protection stays enabled"
);
ok(
!Services.prefs.getBoolPref(STP_PREF),
"Social tracking protection disabled when choosing private only"
);
gBrowser.removeCurrentTab();
});
// Opening the pane must not write the social tracking pref; it is only written
add_task(async function test_social_tracking_not_written_on_load() {
await SpecialPowers.pushPrefEnv({
set: [
[CAT_PREF, "custom"],
[TP_PREF, false],
[TP_PBM_PREF, true],
[STP_COOKIES_PREF, true],
],
});
Services.prefs.clearUserPref(STP_PREF);
ok(
!Services.prefs.prefHasUserValue(STP_PREF),
"Social tracking pref has no user value before opening the pane"
);
await openEtpCustomizePage();
getControl(
gBrowser.contentDocument,
"etpCustomTrackingProtectionEnabledContext"
);
ok(
!Services.prefs.prefHasUserValue(STP_PREF),
"Opening the ETP customize pane does not write the social tracking pref"
);
gBrowser.removeCurrentTab();
});
// When the user isn't blocking social tracking cookies, choosing all windows
add_task(async function test_social_tracking_gated_on_block_cookies() {
await SpecialPowers.pushPrefEnv({
set: [
[CAT_PREF, "custom"],
[TP_PREF, false],
[TP_PBM_PREF, true],
[STP_PREF, false],
[STP_COOKIES_PREF, false],
],
});
let { doc } = await openEtpCustomizePage();
let tpContext = getControl(doc, "etpCustomTrackingProtectionEnabledContext");
info("Switch context to protect all windows with cookie blocking off");
await changeMozSelectValue(tpContext, "all");
ok(
Services.prefs.getBoolPref(TP_PREF),
"Tracking protection pref enabled for all windows"
);
ok(
!Services.prefs.getBoolPref(STP_PREF),
"Social tracking protection stays disabled when not blocking social cookies"
);
gBrowser.removeCurrentTab();
});