tor-browser

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

test_ext_browsingData_settings.js (3775B)


      1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
      2 /* vim: set sts=2 sw=2 et tw=80: */
      3 "use strict";
      4 
      5 ChromeUtils.defineESModuleGetters(this, {
      6  Preferences: "resource://gre/modules/Preferences.sys.mjs",
      7  Sanitizer: "resource:///modules/Sanitizer.sys.mjs",
      8 });
      9 
     10 const PREF_DOMAIN = "privacy.cpd.";
     11 const SETTINGS_LIST = [
     12  "cache",
     13  "cookies",
     14  "history",
     15  "formData",
     16  "downloads",
     17 ].sort();
     18 
     19 add_task(async function testSettingsProperties() {
     20  function background() {
     21    browser.test.onMessage.addListener(() => {
     22      browser.browsingData.settings().then(settings => {
     23        browser.test.sendMessage("settings", settings);
     24      });
     25    });
     26  }
     27 
     28  let extension = ExtensionTestUtils.loadExtension({
     29    background,
     30    manifest: {
     31      permissions: ["browsingData"],
     32    },
     33  });
     34 
     35  await extension.startup();
     36 
     37  extension.sendMessage("settings");
     38  let settings = await extension.awaitMessage("settings");
     39 
     40  // Verify that we get the keys back we expect.
     41  deepEqual(
     42    Object.keys(settings.dataToRemove).sort(),
     43    SETTINGS_LIST,
     44    "dataToRemove contains expected properties."
     45  );
     46  deepEqual(
     47    Object.keys(settings.dataRemovalPermitted).sort(),
     48    SETTINGS_LIST,
     49    "dataToRemove contains expected properties."
     50  );
     51 
     52  let dataTypeSet = settings.dataToRemove;
     53  for (let key of Object.keys(dataTypeSet)) {
     54    equal(
     55      Preferences.get(`${PREF_DOMAIN}${key.toLowerCase()}`),
     56      dataTypeSet[key],
     57      `${key} property of dataToRemove matches the expected pref.`
     58    );
     59  }
     60 
     61  dataTypeSet = settings.dataRemovalPermitted;
     62  for (let key of Object.keys(dataTypeSet)) {
     63    equal(
     64      true,
     65      dataTypeSet[key],
     66      `${key} property of dataRemovalPermitted is true.`
     67    );
     68  }
     69 
     70  // Explicitly set a pref to both true and false and then check.
     71  const SINGLE_OPTION = "cache";
     72  const SINGLE_PREF = "privacy.cpd.cache";
     73 
     74  registerCleanupFunction(() => {
     75    Preferences.reset(SINGLE_PREF);
     76  });
     77 
     78  Preferences.set(SINGLE_PREF, true);
     79 
     80  extension.sendMessage("settings");
     81  settings = await extension.awaitMessage("settings");
     82  equal(
     83    settings.dataToRemove[SINGLE_OPTION],
     84    true,
     85    "Preference that was set to true returns true."
     86  );
     87 
     88  Preferences.set(SINGLE_PREF, false);
     89 
     90  extension.sendMessage("settings");
     91  settings = await extension.awaitMessage("settings");
     92  equal(
     93    settings.dataToRemove[SINGLE_OPTION],
     94    false,
     95    "Preference that was set to false returns false."
     96  );
     97 
     98  await extension.unload();
     99 });
    100 
    101 add_task(async function testSettingsSince() {
    102  const TIMESPAN_PREF = "privacy.sanitize.timeSpan";
    103  const TEST_DATA = {
    104    TIMESPAN_5MIN: Date.now() - 5 * 60 * 1000,
    105    TIMESPAN_HOUR: Date.now() - 60 * 60 * 1000,
    106    TIMESPAN_2HOURS: Date.now() - 2 * 60 * 60 * 1000,
    107    TIMESPAN_EVERYTHING: 0,
    108  };
    109 
    110  function background() {
    111    browser.test.onMessage.addListener(() => {
    112      browser.browsingData.settings().then(settings => {
    113        browser.test.sendMessage("settings", settings);
    114      });
    115    });
    116  }
    117 
    118  let extension = ExtensionTestUtils.loadExtension({
    119    background,
    120    manifest: {
    121      permissions: ["browsingData"],
    122    },
    123  });
    124 
    125  await extension.startup();
    126 
    127  registerCleanupFunction(() => {
    128    Preferences.reset(TIMESPAN_PREF);
    129  });
    130 
    131  for (let timespan in TEST_DATA) {
    132    Preferences.set(TIMESPAN_PREF, Sanitizer[timespan]);
    133 
    134    extension.sendMessage("settings");
    135    let settings = await extension.awaitMessage("settings");
    136 
    137    // Because it is based on the current timestamp, we cannot know the exact
    138    // value to expect for since, so allow a 10s variance.
    139    Assert.less(
    140      Math.abs(settings.options.since - TEST_DATA[timespan]),
    141      10000,
    142      "settings.options contains the expected since value."
    143    );
    144  }
    145 
    146  await extension.unload();
    147 });