tor-browser

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

browser_privacy_syncDataClearing.js (9416B)


      1 /* Any copyright is dedicated to the Public Domain.
      2 * http://creativecommons.org/publicdomain/zero/1.0/ */
      3 
      4 /*
      5 * With no custom cleaning categories set and sanitizeOnShutdown disabled,
      6 * the checkboxes "alwaysClear" and "deleteOnClose" should share the same state.
      7 * The state of the cleaning categories cookies, cache and offlineApps should be in the state of the "deleteOnClose" box.
      8 */
      9 add_setup(async function () {
     10  await SpecialPowers.pushPrefEnv({
     11    set: [["privacy.sanitize.useOldClearHistoryDialog", true]],
     12  });
     13 });
     14 
     15 add_task(async function test_syncWithoutCustomPrefs() {
     16  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
     17    leaveOpen: true,
     18  });
     19 
     20  let document = gBrowser.contentDocument;
     21  let deleteOnCloseBox = document.getElementById("deleteOnClose");
     22  let alwaysClearBox = document.getElementById("alwaysClear");
     23 
     24  ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected");
     25  ok(!alwaysClearBox.checked, "AlwaysClear initial state is deselected");
     26 
     27  deleteOnCloseBox.click();
     28 
     29  // Wait for UI to update.
     30  await new Promise(resolve => requestAnimationFrame(resolve));
     31 
     32  ok(deleteOnCloseBox.checked, "DeleteOnClose is selected");
     33  is(
     34    deleteOnCloseBox.checked,
     35    alwaysClearBox.checked,
     36    "DeleteOnClose sets alwaysClear in the same state, selected"
     37  );
     38  ok(
     39    Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
     40    "Cookie cleaning pref is set"
     41  );
     42  ok(
     43    Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"),
     44    "Cache cleaning pref is set"
     45  );
     46  ok(
     47    Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
     48    "OfflineApps cleaning pref is set"
     49  );
     50  ok(
     51    !Services.prefs.getBoolPref("privacy.clearOnShutdown.downloads"),
     52    "Downloads cleaning pref is not set"
     53  );
     54 
     55  deleteOnCloseBox.click();
     56 
     57  // Wait for UI to update.
     58  await new Promise(resolve => requestAnimationFrame(resolve));
     59 
     60  ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected");
     61  is(
     62    deleteOnCloseBox.checked,
     63    alwaysClearBox.checked,
     64    "DeleteOnclose sets alwaysClear in the same state, deselected"
     65  );
     66 
     67  ok(
     68    !Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
     69    "Cookie cleaning pref is reset"
     70  );
     71  ok(
     72    !Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"),
     73    "Cache cleaning pref is reset"
     74  );
     75  ok(
     76    !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
     77    "OfflineApps cleaning pref is reset"
     78  );
     79  ok(
     80    !Services.prefs.getBoolPref("privacy.clearOnShutdown.downloads"),
     81    "Downloads cleaning pref is not set"
     82  );
     83 
     84  BrowserTestUtils.removeTab(gBrowser.selectedTab);
     85  Services.prefs.clearUserPref("privacy.clearOnShutdown.downloads");
     86  Services.prefs.clearUserPref("privacy.clearOnShutdown.offlineApps");
     87  Services.prefs.clearUserPref("privacy.clearOnShutdown.cache");
     88  Services.prefs.clearUserPref("privacy.clearOnShutdown.cookies");
     89  Services.prefs.clearUserPref("privacy.sanitize.sanitizeOnShutdown");
     90 });
     91 
     92 /*
     93 * With custom cleaning category already set and SanitizeOnShutdown enabled,
     94 * deselecting "deleteOnClose" should not change the state of "alwaysClear".
     95 * The state of the cleaning categories cookies, cache and offlineApps should be in the state of the "deleteOnClose" box.
     96 */
     97 add_task(async function test_syncWithCustomPrefs() {
     98  await SpecialPowers.pushPrefEnv({
     99    set: [
    100      ["privacy.clearOnShutdown.history", true],
    101      ["privacy.sanitize.sanitizeOnShutdown", true],
    102    ],
    103  });
    104 
    105  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    106    leaveOpen: true,
    107  });
    108 
    109  let document = gBrowser.contentDocument;
    110  let deleteOnCloseBox = document.getElementById("deleteOnClose");
    111  let alwaysClearBox = document.getElementById("alwaysClear");
    112 
    113  ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected");
    114  ok(alwaysClearBox.checked, "AlwaysClear initial state is selected");
    115 
    116  deleteOnCloseBox.click();
    117 
    118  ok(deleteOnCloseBox.checked, "DeleteOnClose is selected");
    119  is(
    120    deleteOnCloseBox.checked,
    121    alwaysClearBox.checked,
    122    "AlwaysClear and deleteOnClose are in the same state, selected"
    123  );
    124  ok(
    125    Services.prefs.getBoolPref("privacy.clearOnShutdown.history"),
    126    "History cleaning pref is still set"
    127  );
    128 
    129  ok(
    130    Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
    131    "Cookie cleaning pref is set"
    132  );
    133  ok(
    134    Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"),
    135    "Cache cleaning pref is set"
    136  );
    137  ok(
    138    Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
    139    "OfflineApps cleaning pref is set"
    140  );
    141 
    142  deleteOnCloseBox.click();
    143 
    144  ok(!deleteOnCloseBox.checked, "DeleteOnClose is deselected");
    145  is(
    146    !deleteOnCloseBox.checked,
    147    alwaysClearBox.checked,
    148    "AlwaysClear is not synced with deleteOnClose, only deleteOnClose is deselected"
    149  );
    150 
    151  ok(
    152    !Services.prefs.getBoolPref("privacy.clearOnShutdown.cookies"),
    153    "Cookie cleaning pref is reset"
    154  );
    155  ok(
    156    !Services.prefs.getBoolPref("privacy.clearOnShutdown.cache"),
    157    "Cache cleaning pref is reset"
    158  );
    159  ok(
    160    !Services.prefs.getBoolPref("privacy.clearOnShutdown.offlineApps"),
    161    "OfflineApps cleaning pref is reset"
    162  );
    163  ok(
    164    Services.prefs.getBoolPref("privacy.clearOnShutdown.history"),
    165    "History cleaning pref is still set"
    166  );
    167 
    168  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    169  await SpecialPowers.popPrefEnv();
    170 });
    171 
    172 /*
    173 * Setting/resetting cleaning prefs for cookies, cache, offline apps
    174 * and selecting/deselecting the "alwaysClear" Box, also selects/deselects
    175 * the "deleteOnClose" box.
    176 */
    177 
    178 add_task(async function test_syncWithCustomPrefs() {
    179  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    180    leaveOpen: true,
    181  });
    182 
    183  let document = gBrowser.contentDocument;
    184  let deleteOnCloseBox = document.getElementById("deleteOnClose");
    185  let alwaysClearBox = document.getElementById("alwaysClear");
    186 
    187  ok(!deleteOnCloseBox.checked, "DeleteOnClose initial state is deselected");
    188  ok(!alwaysClearBox.checked, "AlwaysClear initial state is deselected");
    189 
    190  await SpecialPowers.pushPrefEnv({
    191    set: [
    192      ["privacy.clearOnShutdown.cookies", true],
    193      ["privacy.clearOnShutdown.cache", true],
    194      ["privacy.clearOnShutdown.offlineApps", true],
    195      ["privacy.sanitize.sanitizeOnShutdown", true],
    196      // Make sure custom is selected so the depending checkboxes are visible.
    197      ["privacy.history.custom", true],
    198    ],
    199  });
    200 
    201  ok(alwaysClearBox.checked, "AlwaysClear is selected");
    202  is(
    203    deleteOnCloseBox.checked,
    204    alwaysClearBox.checked,
    205    "AlwaysClear and deleteOnClose are in the same state, selected"
    206  );
    207 
    208  alwaysClearBox.click();
    209 
    210  // Wait for UI to update.
    211  await new Promise(resolve => requestAnimationFrame(resolve));
    212 
    213  ok(!alwaysClearBox.checked, "AlwaysClear is deselected");
    214  is(
    215    deleteOnCloseBox.checked,
    216    alwaysClearBox.checked,
    217    "AlwaysClear and deleteOnClose are in the same state, deselected"
    218  );
    219 
    220  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    221  await SpecialPowers.popPrefEnv();
    222 });
    223 
    224 /*
    225 * On loading the page, the ClearOnClose box should be set according to the pref selection
    226 */
    227 add_task(async function test_initialState() {
    228  await SpecialPowers.pushPrefEnv({
    229    set: [
    230      ["privacy.clearOnShutdown.cookies", true],
    231      ["privacy.clearOnShutdown.cache", true],
    232      ["privacy.clearOnShutdown.offlineApps", true],
    233      ["privacy.sanitize.sanitizeOnShutdown", true],
    234    ],
    235  });
    236 
    237  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    238    leaveOpen: true,
    239  });
    240 
    241  let document = gBrowser.contentDocument;
    242  let deleteOnCloseBox = document.getElementById("deleteOnClose");
    243 
    244  ok(
    245    deleteOnCloseBox.checked,
    246    "DeleteOnClose is set accordingly to the prefs, selected"
    247  );
    248 
    249  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    250 
    251  await SpecialPowers.pushPrefEnv({
    252    set: [
    253      ["privacy.clearOnShutdown.cookies", false],
    254      ["privacy.clearOnShutdown.cache", false],
    255      ["privacy.clearOnShutdown.offlineApps", false],
    256      ["privacy.sanitize.sanitizeOnShutdown", true],
    257      ["privacy.clearOnShutdown.history", true],
    258    ],
    259  });
    260 
    261  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    262    leaveOpen: true,
    263  });
    264 
    265  document = gBrowser.contentDocument;
    266  deleteOnCloseBox = document.getElementById("deleteOnClose");
    267 
    268  ok(
    269    !deleteOnCloseBox.checked,
    270    "DeleteOnClose is set accordingly to the prefs, deselected"
    271  );
    272 
    273  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    274 
    275  // When private browsing mode autostart is selected, the deleteOnClose Box is selected always
    276  await SpecialPowers.pushPrefEnv({
    277    set: [
    278      ["privacy.clearOnShutdown.cookies", false],
    279      ["privacy.clearOnShutdown.cache", false],
    280      ["privacy.clearOnShutdown.offlineApps", false],
    281      ["privacy.sanitize.sanitizeOnShutdown", false],
    282      ["browser.privatebrowsing.autostart", true],
    283    ],
    284  });
    285 
    286  await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
    287    leaveOpen: true,
    288  });
    289 
    290  document = gBrowser.contentDocument;
    291  deleteOnCloseBox = document.getElementById("deleteOnClose");
    292 
    293  ok(
    294    deleteOnCloseBox.checked,
    295    "DeleteOnClose is set accordingly to the private Browsing autostart pref, selected"
    296  );
    297 
    298  // Reset history mode
    299  await SpecialPowers.popPrefEnv();
    300  gBrowser.contentWindow.Preferences.getSetting("historyMode").value =
    301    "remember";
    302  BrowserTestUtils.removeTab(gBrowser.selectedTab);
    303 });