summaryrefslogtreecommitdiffstats
path: root/dom/cache/test/xpcshell/test_originInit.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/cache/test/xpcshell/test_originInit.js')
-rw-r--r--dom/cache/test/xpcshell/test_originInit.js149
1 files changed, 149 insertions, 0 deletions
diff --git a/dom/cache/test/xpcshell/test_originInit.js b/dom/cache/test/xpcshell/test_originInit.js
new file mode 100644
index 0000000000..fec80594d3
--- /dev/null
+++ b/dom/cache/test/xpcshell/test_originInit.js
@@ -0,0 +1,149 @@
+/**
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+async function testSteps() {
+ // ToDo: Replace storage and default with a getter function once we expose the
+ // filenames of them to a IDL file.
+ const basePath = `${storageDirName}/${defaultPersistenceDirName}/`;
+ const principal = getPrincipal("https://example.com");
+ const originDirName = "https+++example.com";
+
+ // ToDo: Replace caches.sqlite with a getter function once we expose the
+ // filename of it to a IDL file.
+ const cachesDatabase = getRelativeFile(
+ `${basePath}/${originDirName}/${cacheClientDirName}/caches.sqlite`
+ );
+ // ToDo: Replace .padding with a getter function once we expose the filename
+ // of it to a IDL file.
+ const paddingFile = getRelativeFile(
+ `${basePath}/${originDirName}/${cacheClientDirName}/.padding`
+ );
+ // ToDo: Replace .padding-tmp with a getter function once we expose the
+ // filename of it to a IDL file.
+ const paddingTempFile = getRelativeFile(
+ `${basePath}/${originDirName}/${cacheClientDirName}/.padding-tmp`
+ );
+
+ async function createTestOrigin() {
+ async function sandboxScript() {
+ const cache = await caches.open("myCache");
+ const request = new Request("https://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;
+
+ let request = reset();
+ await requestFinished(request);
+ }
+
+ function removeFile(file) {
+ file.remove(false);
+ }
+
+ function createEmptyFile(file) {
+ file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o644);
+ }
+
+ function checkFiles(
+ expectCachesDatabase,
+ expectPaddingFile,
+ expectTempPaddingFile
+ ) {
+ let exists = cachesDatabase.exists();
+ if (expectCachesDatabase) {
+ ok(exists, "caches.sqlite does exist");
+ } else {
+ ok(!exists, "caches.sqlite doesn't exist");
+ }
+
+ exists = paddingFile.exists();
+ if (expectPaddingFile) {
+ ok(exists, ".padding does exist");
+ } else {
+ ok(!exists, ".padding doesn't exist");
+ }
+
+ exists = paddingTempFile.exists();
+ if (expectTempPaddingFile) {
+ ok(exists, ".padding-tmp does exist");
+ } else {
+ ok(!exists, ".padding-tmp doesn't exist");
+ }
+ }
+
+ async function testInitFunctionality(
+ hasCachesDatabase,
+ hasPaddingFile,
+ hasTempPaddingFile
+ ) {
+ info(
+ `Testing init cache directory when caches.sqlite ` +
+ `${hasCachesDatabase ? "exists" : "doesn't exist"}, .padding ` +
+ `${hasPaddingFile ? "exists" : "doesn't exist"}, .padding-tmp ` +
+ `${hasTempPaddingFile ? "exists" : "doesn't exist"}`
+ );
+
+ await createTestOrigin();
+
+ checkFiles(true, true, false);
+
+ if (hasTempPaddingFile) {
+ createEmptyFile(paddingTempFile);
+ }
+
+ if (!hasPaddingFile) {
+ removeFile(paddingFile);
+ }
+
+ if (!hasCachesDatabase) {
+ removeFile(cachesDatabase);
+ }
+
+ let request = initStorage();
+ await requestFinished(request);
+
+ request = initTemporaryStorage();
+ await requestFinished(request);
+
+ request = initTemporaryOrigin(principal);
+ await requestFinished(request);
+
+ // After the origin is initialized, ".padding-tmp" should have always been
+ // removed and ".padding" should only exist when "caches.sqlite" exists.
+ checkFiles(hasCachesDatabase, hasCachesDatabase, false);
+
+ request = clearOrigin(principal);
+ await requestFinished(request);
+ }
+
+ await testInitFunctionality(false, false, false);
+ // ToDo: .padding-tmp will be removed when the first cache operation is
+ // executed, but we should remove it during InitOrigin in this case.
+ //await testInitFunctionality(false, false, true);
+ // ToDo: .padding should be removed when there is no caches.sqlite.
+ //await testInitFunctionality(false, true, false);
+ // ToDo: In this case, padding size should be counted as zero because there is
+ // no database, but we don't.
+ //await testInitFunctionality(false, true, true);
+ await testInitFunctionality(true, false, false);
+ await testInitFunctionality(true, false, true);
+ await testInitFunctionality(true, true, false);
+ await testInitFunctionality(true, true, true);
+}