test_SiteDataManager.js (11908B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ 3 */ 4 "use strict"; 5 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 10 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 }); 16 17 const EXAMPLE_ORIGIN = "https://www.example.com"; 18 const EXAMPLE_ORIGIN_2 = "https://example.org"; 19 const EXAMPLE_ORIGIN_3 = "http://localhost:8000"; 20 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; 33 34 add_task(function setup() { 35 do_get_profile(); 36 }); 37 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 }); 49 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); 66 67 await SiteDataManager.updateSites(); 68 69 let sites = await SiteDataManager.getSites(); 70 71 let site1 = sites.find(site => site.baseDomain == "example.com"); 72 let site2 = sites.find(site => site.baseDomain == "example.org"); 73 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.equal( 88 typeof site1.lastAccessed.getDate, 89 "function", 90 "lastAccessed for example.com is a Date" 91 ); 92 // Note: this is comparing a date and a number, and Assert.greater requires 93 // inputs to be the same type. bug 1973910 covers fixing this. 94 // eslint-disable-next-line mozilla/no-comparison-or-assignment-inside-ok 95 Assert.ok( 96 site1.lastAccessed > Date.now() - 60 * 1000, 97 "lastAccessed for example.com happened recently" 98 ); 99 100 Assert.equal( 101 site2.baseDomain, 102 "example.org", 103 "Has the correct base domain for example.org" 104 ); 105 Assert.greater(site2.usage, 2048, "Has correct usage for example.org"); 106 Assert.equal(site2.persisted, true, "example.org is persisted"); 107 Assert.equal( 108 site2.cookies.length, 109 1, 110 "Has correct number of cookies for example.org" 111 ); 112 Assert.equal( 113 typeof site2.lastAccessed.getDate, 114 "function", 115 "lastAccessed for example.org is a Date" 116 ); 117 // Note: this is comparing a date and a number, and Assert.greater requires 118 // inputs to be the same type. bug 1973910 covers fixing this. 119 // eslint-disable-next-line mozilla/no-comparison-or-assignment-inside-ok 120 Assert.ok( 121 site2.lastAccessed > Date.now() - 60 * 1000, 122 "lastAccessed for example.org happened recently" 123 ); 124 125 await SiteDataTestUtils.clear(); 126 }); 127 128 add_task(async function testGetTotalUsage() { 129 await SiteDataManager.updateSites(); 130 let sites = await SiteDataManager.getSites(); 131 Assert.equal(sites.length, 0, "SiteDataManager is empty"); 132 133 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096); 134 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048); 135 136 await SiteDataManager.updateSites(); 137 138 let usage = await SiteDataManager.getTotalUsage(); 139 140 Assert.greater(usage, 4096 + 2048, "Has the correct total usage."); 141 142 await SiteDataTestUtils.clear(); 143 }); 144 145 add_task(async function testRemove() { 146 await SiteDataManager.updateSites(); 147 148 let uri = Services.io.newURI(EXAMPLE_ORIGIN); 149 PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION); 150 151 SiteDataTestUtils.addToCookies({ 152 origin: EXAMPLE_ORIGIN, 153 name: "foo1", 154 value: "bar1", 155 }); 156 SiteDataTestUtils.addToCookies({ 157 origin: EXAMPLE_ORIGIN, 158 name: "foo2", 159 value: "bar2", 160 }); 161 SiteDataTestUtils.addToCookies({ 162 origin: EXAMPLE_ORIGIN_2_PARTITIONED, 163 name: "foo3", 164 value: "bar3", 165 }); 166 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096); 167 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096); 168 SiteDataTestUtils.addToCookies({ 169 origin: EXAMPLE_ORIGIN_2, 170 name: "foo", 171 value: "bar", 172 }); 173 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048); 174 await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2); 175 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_3, 2048); 176 177 await SiteDataManager.updateSites(); 178 179 let sites = await SiteDataManager.getSites(); 180 181 Assert.equal(sites.length, 3, "Has three sites."); 182 183 await SiteDataManager.remove("localhost"); 184 185 sites = await SiteDataManager.getSites(); 186 187 Assert.equal(sites.length, 2, "Has two sites."); 188 189 await SiteDataManager.remove(["www.example.com"]); 190 191 sites = await SiteDataManager.getSites(); 192 193 Assert.equal(sites.length, 1, "Has one site."); 194 Assert.equal( 195 sites[0].baseDomain, 196 "example.org", 197 "Has not cleared data for example.org" 198 ); 199 200 let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN); 201 Assert.equal(usage, 0, "Has cleared quota usage for example.com"); 202 203 let cookies = Services.cookies.countCookiesFromHost("example.com"); 204 Assert.equal(cookies, 0, "Has cleared cookies for example.com"); 205 206 let perm = PermissionTestUtils.testPermission(uri, "persistent-storage"); 207 Assert.equal( 208 perm, 209 Services.perms.UNKNOWN_ACTION, 210 "Cleared the persistent-storage permission." 211 ); 212 perm = PermissionTestUtils.testPermission(uri, "camera"); 213 Assert.equal( 214 perm, 215 Services.perms.ALLOW_ACTION, 216 "Did not clear other permissions." 217 ); 218 219 PermissionTestUtils.remove(uri, "camera"); 220 }); 221 222 add_task(async function testRemoveSiteData() { 223 let uri = Services.io.newURI(EXAMPLE_ORIGIN); 224 PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION); 225 226 SiteDataTestUtils.addToCookies({ 227 origin: EXAMPLE_ORIGIN, 228 name: "foo1", 229 value: "bar1", 230 }); 231 SiteDataTestUtils.addToCookies({ 232 origin: EXAMPLE_ORIGIN, 233 name: "foo2", 234 value: "bar2", 235 }); 236 SiteDataTestUtils.addToCookies({ 237 origin: EXAMPLE_ORIGIN_2_PARTITIONED, 238 name: "foo3", 239 value: "bar3", 240 }); 241 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096); 242 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096); 243 SiteDataTestUtils.addToCookies({ 244 origin: EXAMPLE_ORIGIN_2, 245 name: "foo", 246 value: "bar", 247 }); 248 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048); 249 await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2); 250 251 await SiteDataTestUtils.addCacheEntry(EXAMPLE_ORIGIN + "/", "disk"); 252 await SiteDataTestUtils.addCacheEntry(EXAMPLE_ORIGIN + "/", "memory"); 253 254 await SiteDataManager.updateSites(); 255 256 let sites = await SiteDataManager.getSites(); 257 258 Assert.equal(sites.length, 2, "Has two sites."); 259 260 await SiteDataManager.removeSiteData(); 261 262 sites = await SiteDataManager.getSites(); 263 264 Assert.equal(sites.length, 0, "Has no sites."); 265 266 let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN); 267 Assert.equal(usage, 0, "Has cleared quota usage for example.com"); 268 269 usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN_2); 270 Assert.equal(usage, 0, "Has cleared quota usage for example.org"); 271 272 let cookies = Services.cookies.countCookiesFromHost("example.org"); 273 Assert.equal(cookies, 0, "Has cleared cookies for example.org"); 274 275 // removeSiteData only clears storage and cookies, not cache. 276 Assert.equal( 277 await SiteDataTestUtils.hasCacheEntry(EXAMPLE_ORIGIN + "/", "disk"), 278 true, 279 "Has not cleared disk cache for example.com" 280 ); 281 Assert.equal( 282 await SiteDataTestUtils.hasCacheEntry(EXAMPLE_ORIGIN + "/", "memory"), 283 true, 284 "Has not cleared memory cache for example.com" 285 ); 286 287 let perm = PermissionTestUtils.testPermission(uri, "persistent-storage"); 288 Assert.equal( 289 perm, 290 Services.perms.UNKNOWN_ACTION, 291 "Cleared the persistent-storage permission." 292 ); 293 perm = PermissionTestUtils.testPermission(uri, "camera"); 294 Assert.equal( 295 perm, 296 Services.perms.ALLOW_ACTION, 297 "Did not clear other permissions." 298 ); 299 300 PermissionTestUtils.remove(uri, "camera"); 301 await SiteDataTestUtils.clear(); 302 }); 303 304 /** 305 * Tests the remove() method which clears cookies, storage and caches for a 306 * specific list of sites. This is used by the preferences site data management 307 * dialog. 308 */ 309 add_task(async function testRemove() { 310 let uri = Services.io.newURI(EXAMPLE_ORIGIN); 311 PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION); 312 313 SiteDataTestUtils.addToCookies({ 314 origin: EXAMPLE_ORIGIN, 315 name: "foo1", 316 value: "bar1", 317 }); 318 SiteDataTestUtils.addToCookies({ 319 origin: EXAMPLE_ORIGIN, 320 name: "foo2", 321 value: "bar2", 322 }); 323 SiteDataTestUtils.addToCookies({ 324 origin: EXAMPLE_ORIGIN_2_PARTITIONED, 325 name: "foo3", 326 value: "bar3", 327 }); 328 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096); 329 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096); 330 SiteDataTestUtils.addToCookies({ 331 origin: EXAMPLE_ORIGIN_2, 332 name: "foo", 333 value: "bar", 334 }); 335 await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048); 336 await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2); 337 338 await SiteDataTestUtils.addCacheEntry(EXAMPLE_ORIGIN + "/", "disk"); 339 await SiteDataTestUtils.addCacheEntry(EXAMPLE_ORIGIN + "/", "memory"); 340 341 await SiteDataManager.updateSites(); 342 343 let sites = await SiteDataManager.getSites(); 344 345 Assert.equal(sites.length, 2, "Has two sites."); 346 347 await SiteDataManager.remove(["example.com", "example.org"]); 348 349 sites = await SiteDataManager.getSites(); 350 351 Assert.equal(sites.length, 0, "Has no sites."); 352 353 let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN); 354 Assert.equal(usage, 0, "Has cleared quota usage for example.com"); 355 356 usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN_2); 357 Assert.equal(usage, 0, "Has cleared quota usage for example.org"); 358 359 let cookies = Services.cookies.countCookiesFromHost("example.org"); 360 Assert.equal(cookies, 0, "Has cleared cookies for example.org"); 361 362 Assert.equal( 363 await SiteDataTestUtils.hasCacheEntry(EXAMPLE_ORIGIN + "/", "disk"), 364 false, 365 "Has cleared disk cache for example.com" 366 ); 367 Assert.equal( 368 await SiteDataTestUtils.hasCacheEntry(EXAMPLE_ORIGIN + "/", "memory"), 369 false, 370 "Has cleared memory cache for example.com" 371 ); 372 373 let perm = PermissionTestUtils.testPermission(uri, "persistent-storage"); 374 Assert.equal( 375 perm, 376 Services.perms.UNKNOWN_ACTION, 377 "Cleared the persistent-storage permission." 378 ); 379 perm = PermissionTestUtils.testPermission(uri, "camera"); 380 Assert.equal( 381 perm, 382 Services.perms.ALLOW_ACTION, 383 "Did not clear other permissions." 384 ); 385 386 PermissionTestUtils.remove(uri, "camera"); 387 });