Mypal68/browser/modules/test/unit/test_SiteDataManager.js
2024-11-25 17:24:41 +02:00

228 lines
6.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
"use strict";
const EXAMPLE_ORIGIN = "https://www.example.com";
const EXAMPLE_ORIGIN_2 = "https://example.org";
const EXAMPLE_ORIGIN_3 = "http://localhost:8000";
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { SiteDataManager } = ChromeUtils.import(
"resource:///modules/SiteDataManager.jsm"
);
const { SiteDataTestUtils } = ChromeUtils.import(
"resource://testing-common/SiteDataTestUtils.jsm"
);
const { PermissionTestUtils } = ChromeUtils.import(
"resource://testing-common/PermissionTestUtils.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"setTimeout",
"resource://gre/modules/Timer.jsm"
);
ChromeUtils.defineModuleGetter(
this,
"TestUtils",
"resource://testing-common/TestUtils.jsm"
);
add_task(function setup() {
do_get_profile();
});
add_task(async function testGetSites() {
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN, "foo1", "bar1");
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN, "foo2", "bar2");
await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN_2, "foo", "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"
);
Assert.equal(
site1.host,
"www.example.com",
"Has the correct host for example.com"
);
Assert.greater(site1.usage, 4096, "Has correct usage for example.com");
Assert.equal(site1.persisted, false, "example.com is not persisted");
Assert.equal(
site1.cookies.length,
2,
"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.equal(
site2.host,
"example.org",
"Has the correct host 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(EXAMPLE_ORIGIN, "foo1", "bar1");
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN, "foo2", "bar2");
await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN_2, "foo", "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].host,
"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(EXAMPLE_ORIGIN, "foo1", "bar1");
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN, "foo2", "bar2");
await SiteDataTestUtils.addToIndexedDB(EXAMPLE_ORIGIN, 4096);
SiteDataTestUtils.addToCookies(EXAMPLE_ORIGIN_2, "foo", "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");
});