Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/**
* Any copyright is dedicated to the Public Domain.
*/
/* eslint-disable mozilla/no-arbitrary-setTimeout */
/**
* This test is mainly to verify that the flush operation detaches the shadow
* database in the event of early return due to error. See bug 1559029.
*/
add_task(async function testSteps() {
const principal1 = getPrincipal("http://example1.com");
const usageFile1 = getRelativeFile(
"storage/default/http+++example1.com/ls/usage"
);
const principal2 = getPrincipal("http://example2.com");
const data = {
key: "foo",
value: "bar",
};
const flushSleepTimeSec = 6;
info("Setting prefs");
Services.prefs.setBoolPref("dom.storage.next_gen", true);
info("Getting storage 1");
let storage1 = getLocalStorage(principal1);
info("Adding item");
storage1.setItem(data.key, data.value);
info("Creating usage as a directory");
// This will cause a failure during the flush for first principal.
usageFile1.create(Ci.nsIFile.DIRECTORY_TYPE, parseInt("0755", 8));
info("Getting storage 2");
let storage2 = getLocalStorage(principal2);
info("Adding item");
storage2.setItem(data.key, data.value);
// The flush for second principal shouldn't be affected by failed flush for
// first principal.
info(
"Sleeping for " +
flushSleepTimeSec +
" seconds to let all flushes " +
"finish"
);
await new Promise(function (resolve) {
setTimeout(resolve, flushSleepTimeSec * 1000);
});
info("Resetting");
// Wait for all database connections to close.
let request = reset();
await requestFinished(request);
});