Bug 1890689 Don't pretend to pre-buffer with DynamicResampler r=pehrsons
[gecko.git] / browser / modules / test / unit / test_SiteDataManager.js
blob87bb511d1d3b9371ac0501e31c0dfbb01470b3bc
1 /* Any copyright is dedicated to the Public Domain.
2  * http://creativecommons.org/publicdomain/zero/1.0/
3  */
4 "use strict";
6 // We intend to add tests that add real quota manager data to test
7 // data size fetching in the new clear history dialog.
8 // Bug 1874387 - Add a test to SiteDataManager to test data size display in the new clear
9 // history dialog using real quota manager data
11 ChromeUtils.defineESModuleGetters(this, {
12   SiteDataManager: "resource:///modules/SiteDataManager.sys.mjs",
13   SiteDataTestUtils: "resource://testing-common/SiteDataTestUtils.sys.mjs",
14   PermissionTestUtils: "resource://testing-common/PermissionTestUtils.sys.mjs",
15 });
17 const EXAMPLE_ORIGIN = "https://www.example.com";
18 const EXAMPLE_ORIGIN_2 = "https://example.org";
19 const EXAMPLE_ORIGIN_3 = "http://localhost:8000";
21 let p =
22   Services.scriptSecurityManager.createContentPrincipalFromOrigin(
23     EXAMPLE_ORIGIN
24   );
25 let partitionKey = `(${p.scheme},${p.baseDomain})`;
26 let EXAMPLE_ORIGIN_2_PARTITIONED =
27   Services.scriptSecurityManager.createContentPrincipal(
28     Services.io.newURI(EXAMPLE_ORIGIN_2),
29     {
30       partitionKey,
31     }
32   ).origin;
34 add_task(function setup() {
35   do_get_profile();
36 });
38 add_task(async function testGetSites() {
39   SiteDataTestUtils.addToCookies({
40     origin: EXAMPLE_ORIGIN,
41     name: "foo1",
42     value: "bar1",
43   });
44   SiteDataTestUtils.addToCookies({
45     origin: EXAMPLE_ORIGIN,
46     name: "foo2",
47     value: "bar2",
48   });
50   // Cookie of EXAMPLE_ORIGIN_2 partitioned under EXAMPLE_ORIGIN.
51   SiteDataTestUtils.addToCookies({
52     origin: EXAMPLE_ORIGIN_2_PARTITIONED,
53     name: "foo3",
54     value: "bar3",
55   });
56   // IndexedDB storage of EXAMPLE_ORIGIN_2 partitioned under EXAMPLE_ORIGIN.
57   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
58   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
59   SiteDataTestUtils.addToCookies({
60     origin: EXAMPLE_ORIGIN_2,
61     name: "foo",
62     value: "bar",
63   });
64   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
65   await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
67   await SiteDataManager.updateSites();
69   let sites = await SiteDataManager.getSites();
71   let site1 = sites.find(site => site.baseDomain == "example.com");
72   let site2 = sites.find(site => site.baseDomain == "example.org");
74   Assert.equal(
75     site1.baseDomain,
76     "example.com",
77     "Has the correct base domain for example.com"
78   );
79   // 4096 partitioned + 4096 unpartitioned.
80   Assert.greater(site1.usage, 4096 * 2, "Has correct usage for example.com");
81   Assert.equal(site1.persisted, false, "example.com is not persisted");
82   Assert.equal(
83     site1.cookies.length,
84     3, // 2 top level, 1 partitioned.
85     "Has correct number of cookies for example.com"
86   );
87   Assert.ok(
88     typeof site1.lastAccessed.getDate == "function",
89     "lastAccessed for example.com is a Date"
90   );
91   Assert.ok(
92     site1.lastAccessed > Date.now() - 60 * 1000,
93     "lastAccessed for example.com happened recently"
94   );
96   Assert.equal(
97     site2.baseDomain,
98     "example.org",
99     "Has the correct base domain for example.org"
100   );
101   Assert.greater(site2.usage, 2048, "Has correct usage for example.org");
102   Assert.equal(site2.persisted, true, "example.org is persisted");
103   Assert.equal(
104     site2.cookies.length,
105     1,
106     "Has correct number of cookies for example.org"
107   );
108   Assert.ok(
109     typeof site2.lastAccessed.getDate == "function",
110     "lastAccessed for example.org is a Date"
111   );
112   Assert.ok(
113     site2.lastAccessed > Date.now() - 60 * 1000,
114     "lastAccessed for example.org happened recently"
115   );
117   await SiteDataTestUtils.clear();
120 add_task(async function testGetTotalUsage() {
121   await SiteDataManager.updateSites();
122   let sites = await SiteDataManager.getSites();
123   Assert.equal(sites.length, 0, "SiteDataManager is empty");
125   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
126   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
128   await SiteDataManager.updateSites();
130   let usage = await SiteDataManager.getTotalUsage();
132   Assert.greater(usage, 4096 + 2048, "Has the correct total usage.");
134   await SiteDataTestUtils.clear();
137 add_task(async function testRemove() {
138   await SiteDataManager.updateSites();
140   let uri = Services.io.newURI(EXAMPLE_ORIGIN);
141   PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION);
143   SiteDataTestUtils.addToCookies({
144     origin: EXAMPLE_ORIGIN,
145     name: "foo1",
146     value: "bar1",
147   });
148   SiteDataTestUtils.addToCookies({
149     origin: EXAMPLE_ORIGIN,
150     name: "foo2",
151     value: "bar2",
152   });
153   SiteDataTestUtils.addToCookies({
154     origin: EXAMPLE_ORIGIN_2_PARTITIONED,
155     name: "foo3",
156     value: "bar3",
157   });
158   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
159   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
160   SiteDataTestUtils.addToCookies({
161     origin: EXAMPLE_ORIGIN_2,
162     name: "foo",
163     value: "bar",
164   });
165   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
166   await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
167   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_3, 2048);
169   await SiteDataManager.updateSites();
171   let sites = await SiteDataManager.getSites();
173   Assert.equal(sites.length, 3, "Has three sites.");
175   await SiteDataManager.remove("localhost");
177   sites = await SiteDataManager.getSites();
179   Assert.equal(sites.length, 2, "Has two sites.");
181   await SiteDataManager.remove(["www.example.com"]);
183   sites = await SiteDataManager.getSites();
185   Assert.equal(sites.length, 1, "Has one site.");
186   Assert.equal(
187     sites[0].baseDomain,
188     "example.org",
189     "Has not cleared data for example.org"
190   );
192   let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN);
193   Assert.equal(usage, 0, "Has cleared quota usage for example.com");
195   let cookies = Services.cookies.countCookiesFromHost("example.com");
196   Assert.equal(cookies, 0, "Has cleared cookies for example.com");
198   let perm = PermissionTestUtils.testPermission(uri, "persistent-storage");
199   Assert.equal(
200     perm,
201     Services.perms.UNKNOWN_ACTION,
202     "Cleared the persistent-storage permission."
203   );
204   perm = PermissionTestUtils.testPermission(uri, "camera");
205   Assert.equal(
206     perm,
207     Services.perms.ALLOW_ACTION,
208     "Did not clear other permissions."
209   );
211   PermissionTestUtils.remove(uri, "camera");
214 add_task(async function testRemoveSiteData() {
215   let uri = Services.io.newURI(EXAMPLE_ORIGIN);
216   PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION);
218   SiteDataTestUtils.addToCookies({
219     origin: EXAMPLE_ORIGIN,
220     name: "foo1",
221     value: "bar1",
222   });
223   SiteDataTestUtils.addToCookies({
224     origin: EXAMPLE_ORIGIN,
225     name: "foo2",
226     value: "bar2",
227   });
228   SiteDataTestUtils.addToCookies({
229     origin: EXAMPLE_ORIGIN_2_PARTITIONED,
230     name: "foo3",
231     value: "bar3",
232   });
233   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
234   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
235   SiteDataTestUtils.addToCookies({
236     origin: EXAMPLE_ORIGIN_2,
237     name: "foo",
238     value: "bar",
239   });
240   await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
241   await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
243   await SiteDataManager.updateSites();
245   let sites = await SiteDataManager.getSites();
247   Assert.equal(sites.length, 2, "Has two sites.");
249   await SiteDataManager.removeSiteData();
251   sites = await SiteDataManager.getSites();
253   Assert.equal(sites.length, 0, "Has no sites.");
255   let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN);
256   Assert.equal(usage, 0, "Has cleared quota usage for example.com");
258   usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN_2);
259   Assert.equal(usage, 0, "Has cleared quota usage for example.org");
261   let cookies = Services.cookies.countCookiesFromHost("example.org");
262   Assert.equal(cookies, 0, "Has cleared cookies for example.org");
264   let perm = PermissionTestUtils.testPermission(uri, "persistent-storage");
265   Assert.equal(
266     perm,
267     Services.perms.UNKNOWN_ACTION,
268     "Cleared the persistent-storage permission."
269   );
270   perm = PermissionTestUtils.testPermission(uri, "camera");
271   Assert.equal(
272     perm,
273     Services.perms.ALLOW_ACTION,
274     "Did not clear other permissions."
275   );
277   PermissionTestUtils.remove(uri, "camera");