diff options
Diffstat (limited to 'dom/cache/test/xpcshell/test_originInit.js')
-rw-r--r-- | dom/cache/test/xpcshell/test_originInit.js | 149 |
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); +} |