forked from mirrors/gecko-dev
113 lines
3.7 KiB
JavaScript
113 lines
3.7 KiB
JavaScript
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
const {Sanitizer} = ChromeUtils.import("resource:///modules/Sanitizer.jsm", {});
|
|
const {SiteDataTestUtils} = ChromeUtils.import("resource://testing-common/SiteDataTestUtils.jsm", {});
|
|
|
|
function hasIndexedDB(origin) {
|
|
return new Promise(resolve => {
|
|
let hasData = true;
|
|
let uri = Services.io.newURI(origin);
|
|
let principal = Services.scriptSecurityManager.createCodebasePrincipal(uri, {});
|
|
let request = indexedDB.openForPrincipal(principal, "TestDatabase", 1);
|
|
request.onupgradeneeded = function(e) {
|
|
hasData = false;
|
|
};
|
|
request.onsuccess = function(e) {
|
|
resolve(hasData);
|
|
};
|
|
});
|
|
}
|
|
|
|
async function createData(host) {
|
|
let origin = "https://" + host;
|
|
await SiteDataTestUtils.addToIndexedDB(origin);
|
|
}
|
|
|
|
add_task(async function deleteAllOnShutdown() {
|
|
// Let's force the session-only cookie pref.
|
|
await SpecialPowers.pushPrefEnv({"set": [
|
|
["network.cookie.lifetimePolicy", Ci.nsICookieService.ACCEPT_SESSION],
|
|
]});
|
|
|
|
// Let's create a tab with some IDB data.
|
|
await createData("example.org");
|
|
ok(await hasIndexedDB("https://example.org"),
|
|
"We have indexedDB data for example.org");
|
|
|
|
// Cleaning up.
|
|
await Sanitizer.runSanitizeOnShutdown();
|
|
|
|
// All gone!
|
|
ok(!(await hasIndexedDB("https://example.org")),
|
|
"We don't have indexedDB data for example.org");
|
|
|
|
// Clean up.
|
|
await Sanitizer.sanitize([ "cookies", "offlineApps" ]);
|
|
});
|
|
|
|
add_task(async function deleteAllWithCustomPermission() {
|
|
// Let's force the session-only cookie pref.
|
|
await SpecialPowers.pushPrefEnv({"set": [
|
|
["network.cookie.lifetimePolicy", Ci.nsICookieService.ACCEPT_SESSION],
|
|
]});
|
|
|
|
let uri = Services.io.newURI("https://example.com");
|
|
Services.perms.add(uri, "cookie", Ci.nsICookiePermission.ACCESS_ALLOW);
|
|
|
|
// Let's create a couple of tabs with some IDB data.
|
|
await createData("example.org");
|
|
ok(await hasIndexedDB("https://example.org"),
|
|
"We have indexedDB data for example.org");
|
|
await createData("example.com");
|
|
ok(await hasIndexedDB("https://example.com"),
|
|
"We have indexedDB data for example.com");
|
|
|
|
// Cleaning up.
|
|
await Sanitizer.runSanitizeOnShutdown();
|
|
|
|
// All gone!
|
|
ok(!(await hasIndexedDB("https://example.org")),
|
|
"We don't have indexedDB data for example.org");
|
|
ok(await hasIndexedDB("https://example.com"),
|
|
"We do have indexedDB data for example.com");
|
|
|
|
// Clean up.
|
|
await Sanitizer.sanitize([ "cookies", "offlineApps" ]);
|
|
|
|
// Remove custom permission
|
|
uri = Services.io.newURI("https://example.com");
|
|
Services.perms.remove(uri, "cookie");
|
|
});
|
|
|
|
add_task(async function deleteOnlyCustomPermission() {
|
|
// Let's force the session-only cookie pref.
|
|
await SpecialPowers.pushPrefEnv({"set": [
|
|
["network.cookie.lifetimePolicy", Ci.nsICookieService.ACCEPT_NORMALLY],
|
|
]});
|
|
|
|
let uri = Services.io.newURI("https://example.com");
|
|
Services.perms.add(uri, "cookie", Ci.nsICookiePermission.ACCESS_SESSION);
|
|
|
|
// Let's create a couple of tabs with some IDB data.
|
|
await createData("example.org");
|
|
ok(await hasIndexedDB("https://example.org"),
|
|
"We have indexedDB data for example.org");
|
|
await createData("example.com");
|
|
ok(await hasIndexedDB("https://example.com"),
|
|
"We have indexedDB data for example.com");
|
|
|
|
// Cleaning up.
|
|
await Sanitizer.runSanitizeOnShutdown();
|
|
|
|
// All gone!
|
|
ok(await hasIndexedDB("https://example.org"),
|
|
"We do have indexedDB data for example.org");
|
|
ok(!await hasIndexedDB("https://example.com"),
|
|
"We don't have indexedDB data for example.com");
|
|
|
|
// Clean up.
|
|
await Sanitizer.sanitize([ "cookies", "offlineApps" ]);
|
|
|
|
// Remove custom permission
|
|
uri = Services.io.newURI("https://example.com");
|
|
Services.perms.remove(uri, "cookie");
|
|
});
|