Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/**
* Any copyright is dedicated to the Public Domain.
*/
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`);
}
}