forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			277 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
	
		
			7.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Any copyright is dedicated to the Public Domain.
 | 
						|
 * http://creativecommons.org/publicdomain/zero/1.0/
 | 
						|
 */
 | 
						|
"use strict";
 | 
						|
 | 
						|
const { SiteDataManager } = ChromeUtils.importESModule(
 | 
						|
  "resource:///modules/SiteDataManager.sys.mjs"
 | 
						|
);
 | 
						|
const { SiteDataTestUtils } = ChromeUtils.importESModule(
 | 
						|
  "resource://testing-common/SiteDataTestUtils.sys.mjs"
 | 
						|
);
 | 
						|
const { PermissionTestUtils } = ChromeUtils.importESModule(
 | 
						|
  "resource://testing-common/PermissionTestUtils.sys.mjs"
 | 
						|
);
 | 
						|
 | 
						|
const EXAMPLE_ORIGIN = "https://www.example.com";
 | 
						|
const EXAMPLE_ORIGIN_2 = "https://example.org";
 | 
						|
const EXAMPLE_ORIGIN_3 = "http://localhost:8000";
 | 
						|
 | 
						|
let p =
 | 
						|
  Services.scriptSecurityManager.createContentPrincipalFromOrigin(
 | 
						|
    EXAMPLE_ORIGIN
 | 
						|
  );
 | 
						|
let partitionKey = `(${p.scheme},${p.baseDomain})`;
 | 
						|
let EXAMPLE_ORIGIN_2_PARTITIONED =
 | 
						|
  Services.scriptSecurityManager.createContentPrincipal(
 | 
						|
    Services.io.newURI(EXAMPLE_ORIGIN_2),
 | 
						|
    {
 | 
						|
      partitionKey,
 | 
						|
    }
 | 
						|
  ).origin;
 | 
						|
 | 
						|
add_task(function setup() {
 | 
						|
  do_get_profile();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testGetSites() {
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo1",
 | 
						|
    value: "bar1",
 | 
						|
  });
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo2",
 | 
						|
    value: "bar2",
 | 
						|
  });
 | 
						|
 | 
						|
  // Cookie of EXAMPLE_ORIGIN_2 partitioned under EXAMPLE_ORIGIN.
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2_PARTITIONED,
 | 
						|
    name: "foo3",
 | 
						|
    value: "bar3",
 | 
						|
  });
 | 
						|
  // IndexedDB storage of EXAMPLE_ORIGIN_2 partitioned under EXAMPLE_ORIGIN.
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2,
 | 
						|
    name: "foo",
 | 
						|
    value: "bar",
 | 
						|
  });
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
 | 
						|
  await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
 | 
						|
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
 | 
						|
  let sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  let site1 = sites.find(site => site.baseDomain == "example.com");
 | 
						|
  let site2 = sites.find(site => site.baseDomain == "example.org");
 | 
						|
 | 
						|
  Assert.equal(
 | 
						|
    site1.baseDomain,
 | 
						|
    "example.com",
 | 
						|
    "Has the correct base domain for example.com"
 | 
						|
  );
 | 
						|
  // 4096 partitioned + 4096 unpartitioned.
 | 
						|
  Assert.greater(site1.usage, 4096 * 2, "Has correct usage for example.com");
 | 
						|
  Assert.equal(site1.persisted, false, "example.com is not persisted");
 | 
						|
  Assert.equal(
 | 
						|
    site1.cookies.length,
 | 
						|
    3, // 2 top level, 1 partitioned.
 | 
						|
    "Has correct number of cookies for example.com"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    typeof site1.lastAccessed.getDate == "function",
 | 
						|
    "lastAccessed for example.com is a Date"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    site1.lastAccessed > Date.now() - 60 * 1000,
 | 
						|
    "lastAccessed for example.com happened recently"
 | 
						|
  );
 | 
						|
 | 
						|
  Assert.equal(
 | 
						|
    site2.baseDomain,
 | 
						|
    "example.org",
 | 
						|
    "Has the correct base domain for example.org"
 | 
						|
  );
 | 
						|
  Assert.greater(site2.usage, 2048, "Has correct usage for example.org");
 | 
						|
  Assert.equal(site2.persisted, true, "example.org is persisted");
 | 
						|
  Assert.equal(
 | 
						|
    site2.cookies.length,
 | 
						|
    1,
 | 
						|
    "Has correct number of cookies for example.org"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    typeof site2.lastAccessed.getDate == "function",
 | 
						|
    "lastAccessed for example.org is a Date"
 | 
						|
  );
 | 
						|
  Assert.ok(
 | 
						|
    site2.lastAccessed > Date.now() - 60 * 1000,
 | 
						|
    "lastAccessed for example.org happened recently"
 | 
						|
  );
 | 
						|
 | 
						|
  await SiteDataTestUtils.clear();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testGetTotalUsage() {
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
  let sites = await SiteDataManager.getSites();
 | 
						|
  Assert.equal(sites.length, 0, "SiteDataManager is empty");
 | 
						|
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
 | 
						|
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
 | 
						|
  let usage = await SiteDataManager.getTotalUsage();
 | 
						|
 | 
						|
  Assert.greater(usage, 4096 + 2048, "Has the correct total usage.");
 | 
						|
 | 
						|
  await SiteDataTestUtils.clear();
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testRemove() {
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
 | 
						|
  let uri = Services.io.newURI(EXAMPLE_ORIGIN);
 | 
						|
  PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION);
 | 
						|
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo1",
 | 
						|
    value: "bar1",
 | 
						|
  });
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo2",
 | 
						|
    value: "bar2",
 | 
						|
  });
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2_PARTITIONED,
 | 
						|
    name: "foo3",
 | 
						|
    value: "bar3",
 | 
						|
  });
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2,
 | 
						|
    name: "foo",
 | 
						|
    value: "bar",
 | 
						|
  });
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
 | 
						|
  await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_3, 2048);
 | 
						|
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
 | 
						|
  let sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  Assert.equal(sites.length, 3, "Has three sites.");
 | 
						|
 | 
						|
  await SiteDataManager.remove("localhost");
 | 
						|
 | 
						|
  sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  Assert.equal(sites.length, 2, "Has two sites.");
 | 
						|
 | 
						|
  await SiteDataManager.remove(["www.example.com"]);
 | 
						|
 | 
						|
  sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  Assert.equal(sites.length, 1, "Has one site.");
 | 
						|
  Assert.equal(
 | 
						|
    sites[0].baseDomain,
 | 
						|
    "example.org",
 | 
						|
    "Has not cleared data for example.org"
 | 
						|
  );
 | 
						|
 | 
						|
  let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN);
 | 
						|
  Assert.equal(usage, 0, "Has cleared quota usage for example.com");
 | 
						|
 | 
						|
  let cookies = Services.cookies.countCookiesFromHost("example.com");
 | 
						|
  Assert.equal(cookies, 0, "Has cleared cookies for example.com");
 | 
						|
 | 
						|
  let perm = PermissionTestUtils.testPermission(uri, "persistent-storage");
 | 
						|
  Assert.equal(
 | 
						|
    perm,
 | 
						|
    Services.perms.UNKNOWN_ACTION,
 | 
						|
    "Cleared the persistent-storage permission."
 | 
						|
  );
 | 
						|
  perm = PermissionTestUtils.testPermission(uri, "camera");
 | 
						|
  Assert.equal(
 | 
						|
    perm,
 | 
						|
    Services.perms.ALLOW_ACTION,
 | 
						|
    "Did not clear other permissions."
 | 
						|
  );
 | 
						|
 | 
						|
  PermissionTestUtils.remove(uri, "camera");
 | 
						|
});
 | 
						|
 | 
						|
add_task(async function testRemoveSiteData() {
 | 
						|
  let uri = Services.io.newURI(EXAMPLE_ORIGIN);
 | 
						|
  PermissionTestUtils.add(uri, "camera", Services.perms.ALLOW_ACTION);
 | 
						|
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo1",
 | 
						|
    value: "bar1",
 | 
						|
  });
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN,
 | 
						|
    name: "foo2",
 | 
						|
    value: "bar2",
 | 
						|
  });
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2_PARTITIONED,
 | 
						|
    name: "foo3",
 | 
						|
    value: "bar3",
 | 
						|
  });
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2_PARTITIONED, 4096);
 | 
						|
  SiteDataTestUtils.addToCookies({
 | 
						|
    origin: EXAMPLE_ORIGIN_2,
 | 
						|
    name: "foo",
 | 
						|
    value: "bar",
 | 
						|
  });
 | 
						|
  await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN_2, 2048);
 | 
						|
  await SiteDataTestUtils.persist(EXAMPLE_ORIGIN_2);
 | 
						|
 | 
						|
  await SiteDataManager.updateSites();
 | 
						|
 | 
						|
  let sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  Assert.equal(sites.length, 2, "Has two sites.");
 | 
						|
 | 
						|
  await SiteDataManager.removeSiteData();
 | 
						|
 | 
						|
  sites = await SiteDataManager.getSites();
 | 
						|
 | 
						|
  Assert.equal(sites.length, 0, "Has no sites.");
 | 
						|
 | 
						|
  let usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN);
 | 
						|
  Assert.equal(usage, 0, "Has cleared quota usage for example.com");
 | 
						|
 | 
						|
  usage = await SiteDataTestUtils.getQuotaUsage(EXAMPLE_ORIGIN_2);
 | 
						|
  Assert.equal(usage, 0, "Has cleared quota usage for example.org");
 | 
						|
 | 
						|
  let cookies = Services.cookies.countCookiesFromHost("example.org");
 | 
						|
  Assert.equal(cookies, 0, "Has cleared cookies for example.org");
 | 
						|
 | 
						|
  let perm = PermissionTestUtils.testPermission(uri, "persistent-storage");
 | 
						|
  Assert.equal(
 | 
						|
    perm,
 | 
						|
    Services.perms.UNKNOWN_ACTION,
 | 
						|
    "Cleared the persistent-storage permission."
 | 
						|
  );
 | 
						|
  perm = PermissionTestUtils.testPermission(uri, "camera");
 | 
						|
  Assert.equal(
 | 
						|
    perm,
 | 
						|
    Services.perms.ALLOW_ACTION,
 | 
						|
    "Did not clear other permissions."
 | 
						|
  );
 | 
						|
 | 
						|
  PermissionTestUtils.remove(uri, "camera");
 | 
						|
});
 |