diff --git a/dom/cache/test/xpcshell/head.js b/dom/cache/test/xpcshell/head.js index 1c01bdfc4cbc..cd155605b813 100644 --- a/dom/cache/test/xpcshell/head.js +++ b/dom/cache/test/xpcshell/head.js @@ -15,7 +15,10 @@ const NS_APP_USER_PROFILE_50_DIR = "ProfD"; const osWindowsName = "WINNT"; const pathDelimiter = "/"; +const persistentPersistence = "persistent"; + const storageDirName = "storage"; +const persistentPersistenceDirName = "permanent"; const defaultPersistenceDirName = "default"; function cacheClientDirName() { @@ -86,6 +89,10 @@ function initTemporaryStorage() { return Services.qms.initTemporaryStorage(); } +function initPersistentOrigin(principal) { + return Services.qms.initializePersistentOrigin(principal); +} + function initTemporaryOrigin(principal) { return Services.qms.initializeTemporaryOrigin("default", principal); } diff --git a/dom/cache/test/xpcshell/test_originInit.js b/dom/cache/test/xpcshell/test_originInit.js index 9794186a29d7..d5089d03c16a 100644 --- a/dom/cache/test/xpcshell/test_originInit.js +++ b/dom/cache/test/xpcshell/test_originInit.js @@ -31,6 +31,11 @@ async function testSteps() { `${basePath}/${originDirName}/${cacheClientDirName()}/morgue` ); + const persistentCacheDir = getRelativeFile( + `${storageDirName}/${persistentPersistenceDirName}/${originDirName}/` + + `${cacheClientDirName()}` + ); + async function createNormalCacheOrigin() { async function sandboxScript() { const cache = await caches.open("myCache"); @@ -70,6 +75,10 @@ async function testSteps() { file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o644); } + function createEmptyDirectory(dir) { + dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o0755); + } + function checkFiles( expectCachesDatabase, expectPaddingFile, @@ -163,6 +172,25 @@ async function testSteps() { await requestFinished(request); } + async function initPersistentTestOrigin() { + let request = initStorage(); + await requestFinished(request); + + request = initTemporaryStorage(); + await requestFinished(request); + + request = initPersistentOrigin(principal); + await requestFinished(request); + } + + async function clearPersistentTestOrigin() { + let request = Services.qms.clearStoragesForPrincipal( + principal, + persistentPersistence + ); + await requestFinished(request); + } + // Test all possible combinations. for (let createCachesDatabase of [false, true]) { for (let createPaddingFile of [false, true]) { @@ -178,4 +206,24 @@ async function testSteps() { } } } + + async function testPermanentCacheDir() { + info( + `Testing InitializeOrigin doesn't fail when there is a cache ` + + `directory in the ${persistentPersistenceDirName} repository` + ); + + createEmptyDirectory(persistentCacheDir); + + await initPersistentTestOrigin(); + + ok( + true, + "A persistent cache directory didn't cause InitializeOrigin to fail" + ); + + await clearPersistentTestOrigin(); + } + + await testPermanentCacheDir(); } diff --git a/dom/localstorage/test/unit/head.js b/dom/localstorage/test/unit/head.js index 7c42b82e9aab..7bf99ecfe65b 100644 --- a/dom/localstorage/test/unit/head.js +++ b/dom/localstorage/test/unit/head.js @@ -115,6 +115,10 @@ function initTemporaryStorage() { return Services.qms.initTemporaryStorage(); } +function initPersistentOrigin(principal) { + return Services.qms.initializePersistentOrigin(principal); +} + function initTemporaryOrigin(persistence, principal) { return Services.qms.initializeTemporaryOrigin(persistence, principal); } diff --git a/dom/localstorage/test/unit/test_originInit.js b/dom/localstorage/test/unit/test_originInit.js index 0980eafc2bd7..aa250ce3edd5 100644 --- a/dom/localstorage/test/unit/test_originInit.js +++ b/dom/localstorage/test/unit/test_originInit.js @@ -4,18 +4,34 @@ */ async function testSteps() { + const storageDirName = "storage"; + const persistenceTypeDefaultDirName = "default"; + const persistenceTypePersistentDirName = "permanent"; + const principal = getPrincipal("http://example.com"); + const originDirName = "http+++example.com"; + + const clientLSDirName = "ls"; + const dataFile = getRelativeFile( - "storage/default/http+++example.com/ls/data.sqlite" + `${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` + + `${clientLSDirName}/data.sqlite` ); const usageJournalFile = getRelativeFile( - "storage/default/http+++example.com/ls/usage-journal" + `${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` + + `${clientLSDirName}/usage-journal` ); const usageFile = getRelativeFile( - "storage/default/http+++example.com/ls/usage" + `${storageDirName}/${persistenceTypeDefaultDirName}/${originDirName}/` + + `${clientLSDirName}/usage` + ); + + const persistentLSDir = getRelativeFile( + `${storageDirName}/${persistenceTypePersistentDirName}/${originDirName}/` + + `${clientLSDirName}` ); const data = {}; @@ -39,7 +55,11 @@ async function testSteps() { } function createEmptyFile(file) { - file.create(Ci.nsIFile.NORMAL_FILE_TYPE, parseInt("0644", 8)); + file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 0o0644); + } + + function createEmptyDirectory(dir) { + dir.create(Ci.nsIFile.DIRECTORY_TYPE, 0o0755); } function getBinaryOutputStream(file) { @@ -95,6 +115,25 @@ async function testSteps() { await requestFinished(request); } + async function initPersistentTestOrigin() { + let request = initStorage(); + await requestFinished(request); + + request = initTemporaryStorage(); + await requestFinished(request); + + request = initPersistentOrigin(principal); + await requestFinished(request); + } + + async function clearPersistentTestOrigin() { + let request = Services.qms.clearStoragesForPrincipal( + principal, + "persistent" + ); + await requestFinished(request); + } + info("Setting prefs"); Services.prefs.setBoolPref("dom.storage.next_gen", true); @@ -299,4 +338,14 @@ async function testSteps() { await checkFiles(/* wantData */ true, /* wantUsage */ true); await clearTestOrigin(); + + info("Stage 12 - any ls directory in permanent repository exists"); + + await createEmptyDirectory(persistentLSDir); + + await initPersistentTestOrigin(); + + await clearPersistentTestOrigin(); + + ok(true, "A persistent ls directory didn't cause InitializeOrigin to fail"); }