browser_etp_customize_2.js (6632B)
1 /* Any copyright is dedicated to the Public Domain. 2 * https://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 const CAT_PREF = "browser.contentblocking.category"; 7 const COOKIE_BEHAVIOR_PREF = "network.cookie.cookieBehavior"; 8 const TP_PREF = "privacy.trackingprotection.enabled"; 9 const TP_PBM_PREF = "privacy.trackingprotection.pbmode.enabled"; 10 const CRYPTOMINING_PREF = "privacy.trackingprotection.cryptomining.enabled"; 11 const FINGERPRINTING_PREF = "privacy.trackingprotection.fingerprinting.enabled"; 12 const SUSPECT_FP_PREF = "privacy.fingerprintingProtection"; 13 const SUSPECT_FP_PBM_PREF = "privacy.fingerprintingProtection.pbmode"; 14 15 add_setup(async function () { 16 await SpecialPowers.pushPrefEnv({ 17 set: [["browser.settings-redesign.enabled", true]], 18 }); 19 }); 20 21 // Checks tracking protection toggle and scope dropdown interactions. 22 add_task(async function test_custom_cookie_controls() { 23 let defaults = Services.prefs.getDefaultBranch(""); 24 let defaultCookieBehavior = defaults.getIntPref(COOKIE_BEHAVIOR_PREF); 25 26 await SpecialPowers.pushPrefEnv({ 27 set: [ 28 [CAT_PREF, "custom"], 29 [COOKIE_BEHAVIOR_PREF, Ci.nsICookieService.BEHAVIOR_ACCEPT], 30 ], 31 }); 32 33 let { doc } = await openEtpCustomizePage(); 34 let cookieToggle = getControl(doc, "etpCustomCookiesEnabled"); 35 let cookieSelect = getControl(doc, "cookieBehavior"); 36 37 ok( 38 !cookieToggle.pressed, 39 "Cookie toggle starts disabled when behavior is accept" 40 ); 41 42 let prefChange = waitForAndAssertPrefState( 43 COOKIE_BEHAVIOR_PREF, 44 defaultCookieBehavior, 45 "Enabling cookie toggle restores default behavior" 46 ); 47 synthesizeClick(cookieToggle.buttonEl); 48 await prefChange; 49 50 ok(cookieToggle.pressed, "Cookie toggle is pressed when enabled"); 51 52 info("Select a stricter cookie behavior through the dropdown"); 53 let newBehavior = Ci.nsICookieService.BEHAVIOR_REJECT_FOREIGN.toString(); 54 await changeMozSelectValue(cookieSelect, newBehavior); 55 is( 56 Services.prefs.getIntPref(COOKIE_BEHAVIOR_PREF), 57 Ci.nsICookieService.BEHAVIOR_REJECT_FOREIGN, 58 "Cookie behavior pref updated from moz-select" 59 ); 60 61 prefChange = waitForAndAssertPrefState( 62 COOKIE_BEHAVIOR_PREF, 63 Ci.nsICookieService.BEHAVIOR_ACCEPT, 64 "Disabling cookie toggle accepts all cookies" 65 ); 66 synthesizeClick(cookieToggle.buttonEl); 67 await prefChange; 68 69 ok(!cookieToggle.pressed, "Cookie toggle reflects disabled state"); 70 71 gBrowser.removeCurrentTab(); 72 }); 73 74 add_task(async function test_custom_tracking_protection_controls() { 75 await SpecialPowers.pushPrefEnv({ 76 set: [ 77 [CAT_PREF, "custom"], 78 [TP_PREF, false], 79 [TP_PBM_PREF, true], 80 ], 81 }); 82 83 let { doc } = await openEtpCustomizePage(); 84 let tpToggle = getControl(doc, "etpCustomTrackingProtectionEnabled"); 85 let tpContext = getControl(doc, "etpCustomTrackingProtectionEnabledContext"); 86 87 ok(tpToggle.pressed, "Tracking protection toggle starts enabled"); 88 89 let prefChange = TestUtils.waitForPrefChange( 90 TP_PBM_PREF, 91 value => value === false 92 ); 93 synthesizeClick(tpToggle.buttonEl); 94 await prefChange; 95 96 ok(!tpToggle.pressed, "Tracking protection toggle reflects disabled state"); 97 ok( 98 !Services.prefs.getBoolPref(TP_PREF), 99 "All-windows tracking protection pref remains false" 100 ); 101 102 prefChange = TestUtils.waitForPrefChange( 103 TP_PBM_PREF, 104 value => value === true 105 ); 106 synthesizeClick(tpToggle.buttonEl); 107 await prefChange; 108 ok(tpToggle.pressed, "Tracking protection toggle enabled again"); 109 ok( 110 !Services.prefs.getBoolPref(TP_PREF), 111 "All-windows tracking protection pref still false after re-enabling toggle" 112 ); 113 114 info("Switch context to protect all windows"); 115 await changeMozSelectValue(tpContext, "all"); 116 ok( 117 Services.prefs.getBoolPref(TP_PREF), 118 "Tracking protection pref enabled for all windows" 119 ); 120 ok( 121 Services.prefs.getBoolPref(TP_PBM_PREF), 122 "Tracking protection PBM pref stays enabled" 123 ); 124 125 info("Switch back to private windows only"); 126 await changeMozSelectValue(tpContext, "pbmOnly"); 127 ok( 128 !Services.prefs.getBoolPref(TP_PREF), 129 "All windows pref disabled when choosing private only" 130 ); 131 ok( 132 Services.prefs.getBoolPref(TP_PBM_PREF), 133 "Private windows pref stays enabled" 134 ); 135 136 gBrowser.removeCurrentTab(); 137 }); 138 139 // Covers cryptomining/fingerprinting toggles and suspect protection context behavior. 140 add_task(async function test_custom_fingerprinting_controls() { 141 await SpecialPowers.pushPrefEnv({ 142 set: [ 143 [CAT_PREF, "custom"], 144 [CRYPTOMINING_PREF, false], 145 [FINGERPRINTING_PREF, false], 146 [SUSPECT_FP_PREF, false], 147 [SUSPECT_FP_PBM_PREF, false], 148 ], 149 }); 150 151 let { doc } = await openEtpCustomizePage(); 152 let cryptoToggle = getControl(doc, "etpCustomCryptominingProtectionEnabled"); 153 let knownFpToggle = getControl( 154 doc, 155 "etpCustomKnownFingerprintingProtectionEnabled" 156 ); 157 let suspectFpToggle = getControl( 158 doc, 159 "etpCustomSuspectFingerprintingProtectionEnabled" 160 ); 161 let suspectContext = getControl( 162 doc, 163 "etpCustomSuspectFingerprintingProtectionEnabledContext" 164 ); 165 166 info("Enable cryptomining protection"); 167 let prefChange = waitForAndAssertPrefState( 168 CRYPTOMINING_PREF, 169 true, 170 "Cryptomining pref enabled" 171 ); 172 synthesizeClick(cryptoToggle.buttonEl); 173 await prefChange; 174 175 info("Enable known fingerprinting protection"); 176 prefChange = waitForAndAssertPrefState( 177 FINGERPRINTING_PREF, 178 true, 179 "Fingerprinting pref enabled" 180 ); 181 synthesizeClick(knownFpToggle.buttonEl); 182 await prefChange; 183 184 info("Enable suspect fingerprinting protection"); 185 prefChange = TestUtils.waitForPrefChange( 186 SUSPECT_FP_PBM_PREF, 187 value => value === true 188 ); 189 synthesizeClick(suspectFpToggle.buttonEl); 190 await prefChange; 191 ok( 192 !Services.prefs.getBoolPref(SUSPECT_FP_PREF), 193 "All-windows suspect fingerprinting pref remains false after toggle" 194 ); 195 196 info("Switch suspect protection context to all windows"); 197 await changeMozSelectValue(suspectContext, "all"); 198 ok( 199 Services.prefs.getBoolPref(SUSPECT_FP_PREF), 200 "All-windows suspect fingerprinting pref enabled" 201 ); 202 ok( 203 Services.prefs.getBoolPref(SUSPECT_FP_PBM_PREF), 204 "PBM suspect fingerprinting pref remains enabled" 205 ); 206 207 info("Disable suspect protection through the toggle"); 208 prefChange = TestUtils.waitForPrefChange( 209 SUSPECT_FP_PBM_PREF, 210 value => value === false 211 ); 212 synthesizeClick(suspectFpToggle.buttonEl); 213 await prefChange; 214 ok( 215 !Services.prefs.getBoolPref(SUSPECT_FP_PREF), 216 "All-window suspect pref disabled after toggle off" 217 ); 218 219 gBrowser.removeCurrentTab(); 220 });