Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
/**
* Any copyright is dedicated to the Public Domain.
*/
/* exported testSteps */
async function testSteps() {
info("Creating databases");
for (let originIndex = 0; originIndex < 3; originIndex++) {
const principal = getPrincipal(
);
for (let databaseIndex = 0; databaseIndex < 5; databaseIndex++) {
const dbName = "foo-" + databaseIndex;
const request = indexedDB.openForPrincipal(principal, dbName, 1);
{
const event = await expectingUpgrade(request);
const database = event.target.result;
const objectStore = database.createObjectStore("foo");
// Add lots of data...
for (let i = 0; i < 100; i++) {
objectStore.add("abcdefghijklmnopqrstuvwxyz0123456789", i);
}
// And then clear it so that maintenance has some space to reclaim.
objectStore.clear();
}
const event = await expectingSuccess(request);
const database = event.target.result;
database.close();
}
}
info("Starting idle maintenance");
const indexedDatabaseManager = Cc[
"@mozilla.org/dom/indexeddb/manager;1"
].getService(Ci.nsIIndexedDatabaseManager);
const maintenancePromise = indexedDatabaseManager.doMaintenance();
info("Getting databases");
// Getting databases while idle daily maintenance is running should be delayed
// and only processed after the maintenance is done.
const completePromises = (function () {
let promises = [];
for (let index = 0; index < 10; index++) {
async function sandboxScript() {
await indexedDB.databases();
}
const sandbox = new Cu.Sandbox(
{
wantGlobalProperties: ["indexedDB"],
}
);
const promise = new Promise(function (resolve, reject) {
sandbox.resolve = resolve;
sandbox.reject = reject;
});
Cu.evalInSandbox(
sandboxScript.toSource() + " sandboxScript().then(resolve, reject);",
sandbox
);
promises.push(promise);
}
return promises;
})();
info("Waiting for maintenance to finish");
await maintenancePromise;
info("Waiting for databases operation to finish");
await Promise.all(completePromises);
}