fune/browser/base/content/test/sanitize/browser_sanitize-offlineData.js
Kris Maglione a7b308c3a2 Bug 1456686: Part 1 - Fix unused and shadowed explicit imports. r=standard8
These issues were previously ignored due to the nature of our global import
rules. They need to be fixed before that rule can be updated.

MozReview-Commit-ID: DCChktTc5TW

--HG--
extra : rebase_source : cffb1c9762191c579d1397c8169e6e7635d229da
extra : histedit_source : dea59ddd2daaae52069c5faceae9149a4f08dd73
2018-04-24 20:18:09 -07:00

163 lines
5.7 KiB
JavaScript

// Bug 380852 - Delete permission manager entries in Clear Recent History
ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const {Sanitizer} = ChromeUtils.import("resource:///modules/Sanitizer.jsm", {});
const {SiteDataTestUtils} = ChromeUtils.import("resource://testing-common/SiteDataTestUtils.jsm", {});
const {PromiseTestUtils} = ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", {});
XPCOMUtils.defineLazyServiceGetter(this, "sas",
"@mozilla.org/storage/activity-service;1",
"nsIStorageActivityService");
XPCOMUtils.defineLazyServiceGetter(this, "swm",
"@mozilla.org/serviceworkers/manager;1",
"nsIServiceWorkerManager");
const oneHour = 3600000000;
const fiveHours = oneHour * 5;
const itemsToClear = [ "cookies", "offlineApps" ];
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);
};
});
}
function waitForUnregister(host) {
return new Promise(resolve => {
let listener = {
onUnregister: registration => {
if (registration.principal.URI.host != host) {
return;
}
swm.removeListener(listener);
resolve(registration);
}
};
swm.addListener(listener);
});
}
async function createData(host) {
let origin = "https://" + host;
let dummySWURL = getRootDirectory(gTestPath).replace("chrome://mochitests/content", origin) + "dummy.js";
await SiteDataTestUtils.addToIndexedDB(origin);
await SiteDataTestUtils.addServiceWorker(dummySWURL);
}
function moveOriginInTime(principals, endDate, host) {
for (let i = 0; i < principals.length; ++i) {
let principal = principals.queryElementAt(i, Ci.nsIPrincipal);
if (principal.URI.host == host) {
sas.moveOriginInTime(principal, endDate - fiveHours);
return true;
}
}
return false;
}
add_task(async function testWithRange() {
// We have intermittent occurrences of NS_ERROR_ABORT being
// thrown at closing database instances when using Santizer.sanitize().
// This does not seem to impact cleanup, since our tests run fine anyway.
PromiseTestUtils.whitelistRejectionsGlobally(/NS_ERROR_ABORT/);
await SpecialPowers.pushPrefEnv({"set": [
["dom.serviceWorkers.enabled", true],
["dom.serviceWorkers.exemptFromPerDomainMax", true],
["dom.serviceWorkers.testing.enabled", true]
]});
// The service may have picked up activity from prior tests in this run.
// Clear it.
sas.testOnlyReset();
let endDate = Date.now() * 1000;
let principals = sas.getActiveOrigins(endDate - oneHour, endDate);
is(principals.length, 0, "starting from clear activity state");
info("sanitize: " + itemsToClear.join(", "));
await Sanitizer.sanitize(itemsToClear, {ignoreTimespan: false});
await createData("example.org");
await createData("example.com");
endDate = Date.now() * 1000;
principals = sas.getActiveOrigins(endDate - oneHour, endDate);
ok(!!principals, "We have an active origin.");
ok(principals.length >= 2, "We have an active origin.");
let found = 0;
for (let i = 0; i < principals.length; ++i) {
let principal = principals.queryElementAt(i, Ci.nsIPrincipal);
if (principal.URI.host == "example.org" ||
principal.URI.host == "example.com") {
found++;
}
}
is(found, 2, "Our origins are active.");
ok(await hasIndexedDB("https://example.org"),
"We have indexedDB data for example.org");
ok(SiteDataTestUtils.hasServiceWorkers("https://example.org"),
"We have serviceWorker data for example.org");
ok(await hasIndexedDB("https://example.com"),
"We have indexedDB data for example.com");
ok(SiteDataTestUtils.hasServiceWorkers("https://example.com"),
"We have serviceWorker data for example.com");
// Let's move example.com in the past.
ok(moveOriginInTime(principals, endDate, "example.com"), "Operation completed!");
let p = waitForUnregister("example.org");
// Clear it
info("sanitize: " + itemsToClear.join(", "));
await Sanitizer.sanitize(itemsToClear, {ignoreTimespan: false});
await p;
ok(!(await hasIndexedDB("https://example.org")),
"We don't have indexedDB data for example.org");
ok(!SiteDataTestUtils.hasServiceWorkers("https://example.org"),
"We don't have serviceWorker data for example.org");
ok(await hasIndexedDB("https://example.com"),
"We still have indexedDB data for example.com");
ok(SiteDataTestUtils.hasServiceWorkers("https://example.com"),
"We still have serviceWorker data for example.com");
// We have to move example.com in the past because how we check IDB triggers
// a storage activity.
ok(moveOriginInTime(principals, endDate, "example.com"), "Operation completed!");
// Let's call the clean up again.
info("sanitize again to ensure clearing doesn't expand the activity scope");
await Sanitizer.sanitize(itemsToClear, {ignoreTimespan: false});
ok(await hasIndexedDB("https://example.com"),
"We still have indexedDB data for example.com");
ok(SiteDataTestUtils.hasServiceWorkers("https://example.com"),
"We still have serviceWorker data for example.com");
ok(!(await hasIndexedDB("https://example.org")),
"We don't have indexedDB data for example.org");
ok(!SiteDataTestUtils.hasServiceWorkers("https://example.org"),
"We don't have serviceWorker data for example.org");
sas.testOnlyReset();
// Clean up.
await Sanitizer.sanitize(itemsToClear);
});