summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js
blob: a065c26c8215a473012e8cbe86adb16cb9093843 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";

ChromeUtils.defineESModuleGetters(this, {
  Preferences: "resource://gre/modules/Preferences.sys.mjs",
  Sanitizer: "resource:///modules/Sanitizer.sys.mjs",
});

const PREF_DOMAIN = "privacy.cpd.";
const SETTINGS_LIST = [
  "cache",
  "cookies",
  "history",
  "formData",
  "downloads",
].sort();

add_task(async function testSettingsProperties() {
  function background() {
    browser.test.onMessage.addListener(msg => {
      browser.browsingData.settings().then(settings => {
        browser.test.sendMessage("settings", settings);
      });
    });
  }

  let extension = ExtensionTestUtils.loadExtension({
    background,
    manifest: {
      permissions: ["browsingData"],
    },
  });

  await extension.startup();

  extension.sendMessage("settings");
  let settings = await extension.awaitMessage("settings");

  // Verify that we get the keys back we expect.
  deepEqual(
    Object.keys(settings.dataToRemove).sort(),
    SETTINGS_LIST,
    "dataToRemove contains expected properties."
  );
  deepEqual(
    Object.keys(settings.dataRemovalPermitted).sort(),
    SETTINGS_LIST,
    "dataToRemove contains expected properties."
  );

  let dataTypeSet = settings.dataToRemove;
  for (let key of Object.keys(dataTypeSet)) {
    equal(
      Preferences.get(`${PREF_DOMAIN}${key.toLowerCase()}`),
      dataTypeSet[key],
      `${key} property of dataToRemove matches the expected pref.`
    );
  }

  dataTypeSet = settings.dataRemovalPermitted;
  for (let key of Object.keys(dataTypeSet)) {
    equal(
      true,
      dataTypeSet[key],
      `${key} property of dataRemovalPermitted is true.`
    );
  }

  // Explicitly set a pref to both true and false and then check.
  const SINGLE_OPTION = "cache";
  const SINGLE_PREF = "privacy.cpd.cache";

  registerCleanupFunction(() => {
    Preferences.reset(SINGLE_PREF);
  });

  Preferences.set(SINGLE_PREF, true);

  extension.sendMessage("settings");
  settings = await extension.awaitMessage("settings");
  equal(
    settings.dataToRemove[SINGLE_OPTION],
    true,
    "Preference that was set to true returns true."
  );

  Preferences.set(SINGLE_PREF, false);

  extension.sendMessage("settings");
  settings = await extension.awaitMessage("settings");
  equal(
    settings.dataToRemove[SINGLE_OPTION],
    false,
    "Preference that was set to false returns false."
  );

  await extension.unload();
});

add_task(async function testSettingsSince() {
  const TIMESPAN_PREF = "privacy.sanitize.timeSpan";
  const TEST_DATA = {
    TIMESPAN_5MIN: Date.now() - 5 * 60 * 1000,
    TIMESPAN_HOUR: Date.now() - 60 * 60 * 1000,
    TIMESPAN_2HOURS: Date.now() - 2 * 60 * 60 * 1000,
    TIMESPAN_EVERYTHING: 0,
  };

  function background() {
    browser.test.onMessage.addListener(msg => {
      browser.browsingData.settings().then(settings => {
        browser.test.sendMessage("settings", settings);
      });
    });
  }

  let extension = ExtensionTestUtils.loadExtension({
    background,
    manifest: {
      permissions: ["browsingData"],
    },
  });

  await extension.startup();

  registerCleanupFunction(() => {
    Preferences.reset(TIMESPAN_PREF);
  });

  for (let timespan in TEST_DATA) {
    Preferences.set(TIMESPAN_PREF, Sanitizer[timespan]);

    extension.sendMessage("settings");
    let settings = await extension.awaitMessage("settings");

    // Because it is based on the current timestamp, we cannot know the exact
    // value to expect for since, so allow a 10s variance.
    ok(
      Math.abs(settings.options.since - TEST_DATA[timespan]) < 10000,
      "settings.options contains the expected since value."
    );
  }

  await extension.unload();
});