From 7e3170879c4d50d913a220c4ec459799fbc2ac9c Mon Sep 17 00:00:00 2001 From: Tom Tung Date: Wed, 17 Oct 2018 15:37:16 +0200 Subject: [PATCH] Bug 1395102 - P3 - Reuse the code for QuotaManager::UpgradeStorageFromxxToxx(); r=janv This patch adds a new function QM::UpgradeStorage() to reuse lines of code in QM:UpgradeStorageFrom0_0To1_0(), QM:UpgradeStorageFrom1_0To2_0(), and QM:UpgradeStorageFrom2_0To2_1(). --HG-- extra : rebase_source : 7b1cba884d375e0609f5c622a798c9c0f8129b90 --- dom/quota/ActorsParent.cpp | 198 +++++++++++++------------------------ dom/quota/QuotaManager.h | 6 ++ 2 files changed, 77 insertions(+), 127 deletions(-) diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp index 196a275d9347..6dcfe50cd622 100644 --- a/dom/quota/ActorsParent.cpp +++ b/dom/quota/ActorsParent.cpp @@ -4588,6 +4588,65 @@ QuotaManager::MaybeRemoveOldDirectories() return NS_OK; } +template +nsresult +QuotaManager::UpgradeStorage(const int32_t aOldVersion, + const int32_t aNewVersion, + mozIStorageConnection* aConnection) +{ + AssertIsOnIOThread(); + MOZ_ASSERT(aNewVersion > aOldVersion); + MOZ_ASSERT(aNewVersion <= kStorageVersion); + MOZ_ASSERT(aConnection); + + nsresult rv; + + for (const PersistenceType persistenceType : kAllPersistenceTypes) { + nsCOMPtr directory; + rv = NS_NewLocalFile(GetStoragePath(persistenceType), false, + getter_AddRefs(directory)); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + bool exists; + rv = directory->Exists(&exists); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + if (!exists) { + continue; + } + + bool persistent = persistenceType == PERSISTENCE_TYPE_PERSISTENT; + RefPtr helper = new Helper(directory, persistent); + rv = helper->ProcessRepository(); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + } + +#ifdef DEBUG + { + int32_t storageVersion; + rv = aConnection->GetSchemaVersion(&storageVersion); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + MOZ_ASSERT(storageVersion == aOldVersion); + } +#endif + + rv = aConnection->SetSchemaVersion(aNewVersion); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + return NS_OK; +} + nsresult QuotaManager::UpgradeStorageFrom0_0To1_0(mozIStorageConnection* aConnection) { @@ -4609,47 +4668,10 @@ QuotaManager::UpgradeStorageFrom0_0To1_0(mozIStorageConnection* aConnection) return rv; } - for (const PersistenceType persistenceType : kAllPersistenceTypes) { - nsCOMPtr directory; - rv = NS_NewLocalFile(GetStoragePath(persistenceType), false, - getter_AddRefs(directory)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - bool exists; - rv = directory->Exists(&exists); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - if (!exists) { - continue; - } - - bool persistent = persistenceType == PERSISTENCE_TYPE_PERSISTENT; - RefPtr helper = - new UpgradeStorageFrom0_0To1_0Helper(directory, persistent); - - rv = helper->ProcessRepository(); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - } - -#ifdef DEBUG - { - int32_t storageVersion; - rv = aConnection->GetSchemaVersion(&storageVersion); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - MOZ_ASSERT(storageVersion == 0); - } -#endif - - rv = aConnection->SetSchemaVersion(MakeStorageVersion(1, 0)); + rv = + UpgradeStorage(0, + MakeStorageVersion(1, 0), + aConnection); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } @@ -4730,49 +4752,10 @@ QuotaManager::UpgradeStorageFrom1_0To2_0(mozIStorageConnection* aConnection) // manager directories without the ".files" suffix then prevent current // Firefox from initializing and using the storage. - nsresult rv; - - for (const PersistenceType persistenceType : kAllPersistenceTypes) { - nsCOMPtr directory; - rv = NS_NewLocalFile(GetStoragePath(persistenceType), false, - getter_AddRefs(directory)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - bool exists; - rv = directory->Exists(&exists); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - if (!exists) { - continue; - } - - bool persistent = persistenceType == PERSISTENCE_TYPE_PERSISTENT; - RefPtr helper = - new UpgradeStorageFrom1_0To2_0Helper(directory, persistent); - - rv = helper->ProcessRepository(); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - } - -#ifdef DEBUG - { - int32_t storageVersion; - rv = aConnection->GetSchemaVersion(&storageVersion); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - MOZ_ASSERT(storageVersion == MakeStorageVersion(1, 0)); - } -#endif - - rv = aConnection->SetSchemaVersion(MakeStorageVersion(2, 0)); + nsresult rv = + UpgradeStorage(MakeStorageVersion(1, 0), + MakeStorageVersion(2, 0), + aConnection); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } @@ -4789,49 +4772,10 @@ QuotaManager::UpgradeStorageFrom2_0To2_1(mozIStorageConnection* aConnection) // The upgrade is mainly to create a directory padding file in DOM Cache // directory to record the overall padding size of an origin. - nsresult rv; - - for (const PersistenceType persistenceType : kAllPersistenceTypes) { - nsCOMPtr directory; - rv = NS_NewLocalFile(GetStoragePath(persistenceType), false, - getter_AddRefs(directory)); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - bool exists; - rv = directory->Exists(&exists); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - if (!exists) { - continue; - } - - bool persistent = persistenceType == PERSISTENCE_TYPE_PERSISTENT; - RefPtr helper = - new UpgradeStorageFrom2_0To2_1Helper(directory, persistent); - - rv = helper->ProcessRepository(); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - } - -#ifdef DEBUG - { - int32_t storageVersion; - rv = aConnection->GetSchemaVersion(&storageVersion); - if (NS_WARN_IF(NS_FAILED(rv))) { - return rv; - } - - MOZ_ASSERT(storageVersion == MakeStorageVersion(2, 0)); - } -#endif - - rv = aConnection->SetSchemaVersion(MakeStorageVersion(2, 1)); + nsresult rv = + UpgradeStorage(MakeStorageVersion(2, 0), + MakeStorageVersion(2, 1), + aConnection); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } diff --git a/dom/quota/QuotaManager.h b/dom/quota/QuotaManager.h index c1d0b865aa1e..7085aa9a0a2b 100644 --- a/dom/quota/QuotaManager.h +++ b/dom/quota/QuotaManager.h @@ -477,6 +477,12 @@ private: nsresult MaybeRemoveOldDirectories(); + template + nsresult + UpgradeStorage(const int32_t aOldVersion, + const int32_t aNewVersion, + mozIStorageConnection* aConnection); + nsresult UpgradeStorageFrom0_0To1_0(mozIStorageConnection* aConnection);