1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
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",
17 const EXAMPLE_ORIGIN = "https://www.example.com";
18 const EXAMPLE_ORIGIN_2 = "https://example.org";
19 const EXAMPLE_ORIGIN_3 = "http://localhost:8000";
22 Services.scriptSecurityManager.createContentPrincipalFromOrigin(
25 let partitionKey = `(${p.scheme},${p.baseDomain})`;
26 let EXAMPLE_ORIGIN_2_PARTITIONED =
27 Services.scriptSecurityManager.createContentPrincipal(
28 Services.io.newURI(EXAMPLE_ORIGIN_2),
34 add_task(function setup() {
38 add_task(async function testGetSites() {
39 SiteDataTestUtils.addToCookies({
40 origin: EXAMPLE_ORIGIN,
44 SiteDataTestUtils.addToCookies({
45 origin: EXAMPLE_ORIGIN,
50 // Cookie of EXAMPLE_ORIGIN_2 partitioned under EXAMPLE_ORIGIN.
51 SiteDataTestUtils.addToCookies({
52 origin: EXAMPLE_ORIGIN_2_PARTITIONED,
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,
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");
77 "Has the correct base domain for example.com"
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");
84 3, // 2 top level, 1 partitioned.
85 "Has correct number of cookies for example.com"
88 typeof site1.lastAccessed.getDate == "function",
89 "lastAccessed for example.com is a Date"
92 site1.lastAccessed > Date.now() - 60 * 1000,
93 "lastAccessed for example.com happened recently"
99 "Has the correct base domain for example.org"
101 Assert.greater(site2.usage, 2048, "Has correct usage for example.org");
102 Assert.equal(site2.persisted, true, "example.org is persisted");
104 site2.cookies.length,
106 "Has correct number of cookies for example.org"
109 typeof site2.lastAccessed.getDate == "function",
110 "lastAccessed for example.org is a Date"
113 site2.lastAccessed > Date.now() - 60 * 1000,
114 "lastAccessed for example.org happened recently"
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,
148 SiteDataTestUtils.addToCookies({
149 origin: EXAMPLE_ORIGIN,
153 SiteDataTestUtils.addToCookies({
154 origin: EXAMPLE_ORIGIN_2_PARTITIONED,
158 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
159 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
160 SiteDataTestUtils.addToCookies({
161 origin: EXAMPLE_ORIGIN_2,
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.");
189 "Has not cleared data for example.org"
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");
201 Services.perms.UNKNOWN_ACTION,
202 "Cleared the persistent-storage permission."
204 perm = PermissionTestUtils.testPermission(uri, "camera");
207 Services.perms.ALLOW_ACTION,
208 "Did not clear other permissions."
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,
223 SiteDataTestUtils.addToCookies({
224 origin: EXAMPLE_ORIGIN,
228 SiteDataTestUtils.addToCookies({
229 origin: EXAMPLE_ORIGIN_2_PARTITIONED,
233 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
234 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
235 SiteDataTestUtils.addToCookies({
236 origin: EXAMPLE_ORIGIN_2,
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");
267 Services.perms.UNKNOWN_ACTION,
268 "Cleared the persistent-storage permission."
270 perm = PermissionTestUtils.testPermission(uri, "camera");
273 Services.perms.ALLOW_ACTION,
274 "Did not clear other permissions."
277 PermissionTestUtils.remove(uri, "camera");