/**
* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/
*/
loadScript(
"dom/quota/test/common/file.js");
async
function testSteps() {
const principal = getPrincipal(
"http://example.com");
const repoRelativePath =
"storage/default";
const originRelativePath = `${repoRelativePath}/http+++example.com`;
let unknownFileCounter = 1;
let unknownDirCounter = 1;
function createUnknownFileIn(dirRelativePath, recursive) {
const dir = getRelativeFile(dirRelativePath);
let file = dir.clone();
file.append(
"foo" + unknownFileCounter +
".bar");
const ostream = Cc[
"@mozilla.org/network/file-output-stream;1"
].createInstance(Ci.nsIFileOutputStream);
ostream.init(file, -1, parseInt(
"0644", 8), 0);
ostream.write(
"x".repeat(unknownFileCounter), unknownFileCounter);
ostream.close();
unknownFileCounter++;
if (recursive) {
const entries = dir.directoryEntries;
while ((file = entries.nextFile)) {
if (file.isDirectory()) {
createUnknownFileIn(dirRelativePath +
"/" + file.leafName);
}
}
}
}
function createUnknownDirectoryIn(dirRelativePath) {
createUnknownFileIn(dirRelativePath +
"/foo" + unknownDirCounter++);
}
// storage.sqlite and storage/ls-archive.sqlite
{
const request = init();
await requestFinished(request);
}
// Unknown file in the repository
{
createUnknownFileIn(repoRelativePath);
}
// Unknown file and unknown directory in the origin directory
{
let request = init();
await requestFinished(request);
request = initTemporaryStorage();
await requestFinished(request);
request = initTemporaryOrigin(
"default", principal);
await requestFinished(request);
Assert.strictEqual(
request.result,
true,
"The origin directory was created"
);
createUnknownFileIn(originRelativePath);
createUnknownDirectoryIn(originRelativePath);
}
// Unknown files in idb client directory and its subdirectories and unknown
// directory in .files directory
{
const request = indexedDB.openForPrincipal(principal,
"myIndexedDB");
await openDBRequestUpgradeNeeded(request);
const database = request.result;
const objectStore = database.createObjectStore(
"Blobs", {});
objectStore.add(getNullBlob(200), 42);
await openDBRequestSucceeded(request);
database.close();
createUnknownFileIn(`${originRelativePath}/idb`);
createUnknownFileIn(
`${originRelativePath}/idb/2320029346mByDIdnedxe.files`
);
createUnknownDirectoryIn(
`${originRelativePath}/idb/2320029346mByDIdnedxe.files`
);
createUnknownFileIn(
`${originRelativePath}/idb/2320029346mByDIdnedxe.files/journals`
);
}
// Unknown files in cache client directory and its subdirectories
{
async
function sandboxScript() {
const cache = await caches.open(
"myCache");
const request =
new Request(
"http://example.com/index.html");
const response =
new Response(
"hello world");
await cache.put(request, response);
}
const sandbox =
new Cu.Sandbox(principal, {
wantGlobalProperties: [
"caches",
"fetch"],
});
const promise =
new Promise(
function (resolve, reject) {
sandbox.resolve = resolve;
sandbox.reject = reject;
});
Cu.evalInSandbox(
sandboxScript.toSource() +
" sandboxScript().then(resolve, reject);",
sandbox
);
await promise;
createUnknownFileIn(`${originRelativePath}/cache`);
createUnknownFileIn(
`${originRelativePath}/cache/morgue`,
/* recursive */ true
);
}
// Unknown file and unknown directory in sdb client directory
{
const database = getSimpleDatabase(principal);
let request = database.open(
"mySimpleDB");
await requestFinished(request);
request = database.write(getBuffer(100));
await requestFinished(request);
request = database.close();
await requestFinished(request);
createUnknownFileIn(`${originRelativePath}/sdb`);
createUnknownDirectoryIn(`${originRelativePath}/sdb`);
}
// Unknown file and unknown directory in ls client directory
{
Services.prefs.setBoolPref(
"dom.storage.testing",
true);
Services.prefs.setBoolPref(
"dom.storage.client_validation",
false);
const storage = Services.domStorageManager.createStorage(
null,
principal,
principal,
""
);
storage.setItem(
"foo",
"bar");
storage.close();
createUnknownFileIn(`${originRelativePath}/ls`);
createUnknownDirectoryIn(`${originRelativePath}/ls`);
}
}