tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 });