176 lines
4.6 KiB
JavaScript
176 lines
4.6 KiB
JavaScript
/**
|
|
* 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`);
|
|
}
|
|
}
|