tor-browser

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

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 });