зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1395102 - P4 - Reuse the code for MaybeUpgradeClients() in the upgrade helpers; r=janv
This patch moves MaybeUpgradeClients to RepositoryOperationBase class from UpgradeStorageFrom1_0To2_0Helper and UpgradeStorageFrom2_0To2_1Helper so that lines of code can be reused. --HG-- extra : rebase_source : 1131ed8b01ed91b7bc5b362a7b1aaf15aa681a95
This commit is contained in:
Родитель
7e3170879c
Коммит
b75ea7ded2
|
@ -83,7 +83,7 @@
|
||||||
|
|
||||||
#define UNKNOWN_FILE_WARNING(_leafName) \
|
#define UNKNOWN_FILE_WARNING(_leafName) \
|
||||||
QM_WARNING("Something (%s) in the directory that doesn't belong!", \
|
QM_WARNING("Something (%s) in the directory that doesn't belong!", \
|
||||||
NS_ConvertUTF16toUTF8(leafName).get())
|
NS_ConvertUTF16toUTF8(_leafName).get())
|
||||||
|
|
||||||
// The amount of time, in milliseconds, that our IO thread will stay alive
|
// The amount of time, in milliseconds, that our IO thread will stay alive
|
||||||
// after the last event it processes.
|
// after the last event it processes.
|
||||||
|
@ -1817,6 +1817,11 @@ protected:
|
||||||
virtual ~RepositoryOperationBase()
|
virtual ~RepositoryOperationBase()
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
template<typename UpgradeMethod>
|
||||||
|
nsresult
|
||||||
|
MaybeUpgradeClients(const OriginProps& aOriginsProps,
|
||||||
|
UpgradeMethod aMethod);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual nsresult
|
virtual nsresult
|
||||||
PrepareOriginDirectory(OriginProps& aOriginProps, bool* aRemoved) = 0;
|
PrepareOriginDirectory(OriginProps& aOriginProps, bool* aRemoved) = 0;
|
||||||
|
@ -1872,7 +1877,7 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsresult
|
nsresult
|
||||||
MaybeUpgradeClients(const OriginProps& aOriginProps);
|
MaybeRemoveMorgueDirectory(const OriginProps& aOriginProps);
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
MaybeRemoveAppsData(const OriginProps& aOriginProps,
|
MaybeRemoveAppsData(const OriginProps& aOriginProps,
|
||||||
|
@ -1899,9 +1904,6 @@ public:
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nsresult
|
|
||||||
MaybeUpgradeClients(const OriginProps& aOriginProps);
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
PrepareOriginDirectory(OriginProps& aOriginProps, bool* aRemoved) override;
|
PrepareOriginDirectory(OriginProps& aOriginProps, bool* aRemoved) override;
|
||||||
|
|
||||||
|
@ -8855,6 +8857,76 @@ RepositoryOperationBase::ProcessRepository()
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename UpgradeMethod>
|
||||||
|
nsresult
|
||||||
|
RepositoryOperationBase::MaybeUpgradeClients(const OriginProps& aOriginProps,
|
||||||
|
UpgradeMethod aMethod)
|
||||||
|
{
|
||||||
|
AssertIsOnIOThread();
|
||||||
|
MOZ_ASSERT(aOriginProps.mDirectory);
|
||||||
|
MOZ_ASSERT(aMethod);
|
||||||
|
|
||||||
|
QuotaManager* quotaManager = QuotaManager::Get();
|
||||||
|
MOZ_ASSERT(quotaManager);
|
||||||
|
|
||||||
|
nsCOMPtr<nsIDirectoryEnumerator> entries;
|
||||||
|
nsresult rv =
|
||||||
|
aOriginProps.mDirectory->GetDirectoryEntries(getter_AddRefs(entries));
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
nsCOMPtr<nsIFile> file;
|
||||||
|
rv = entries->GetNextFile(getter_AddRefs(file));
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isDirectory;
|
||||||
|
rv = file->IsDirectory(&isDirectory);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsString leafName;
|
||||||
|
rv = file->GetLeafName(leafName);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isDirectory) {
|
||||||
|
// Unknown files during upgrade are allowed. Just warn if we find them.
|
||||||
|
if (!IsOriginMetadata(leafName) &&
|
||||||
|
!IsTempMetadata(leafName)) {
|
||||||
|
UNKNOWN_FILE_WARNING(leafName);
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Client::Type clientType;
|
||||||
|
rv = Client::TypeFromText(leafName, clientType);
|
||||||
|
if (NS_FAILED(rv)) {
|
||||||
|
UNKNOWN_FILE_WARNING(leafName);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Client* client = quotaManager->GetClient(clientType);
|
||||||
|
MOZ_ASSERT(client);
|
||||||
|
|
||||||
|
rv = (client->*aMethod)(file);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
CreateOrUpgradeDirectoryMetadataHelper::MaybeUpgradeOriginDirectory(
|
CreateOrUpgradeDirectoryMetadataHelper::MaybeUpgradeOriginDirectory(
|
||||||
nsIFile* aDirectory)
|
nsIFile* aDirectory)
|
||||||
|
@ -9185,77 +9257,41 @@ UpgradeStorageFrom0_0To1_0Helper::ProcessOriginDirectory(
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
UpgradeStorageFrom1_0To2_0Helper::MaybeUpgradeClients(
|
UpgradeStorageFrom1_0To2_0Helper::MaybeRemoveMorgueDirectory(
|
||||||
const OriginProps& aOriginProps)
|
const OriginProps& aOriginProps)
|
||||||
{
|
{
|
||||||
AssertIsOnIOThread();
|
AssertIsOnIOThread();
|
||||||
MOZ_ASSERT(aOriginProps.mDirectory);
|
MOZ_ASSERT(aOriginProps.mDirectory);
|
||||||
|
|
||||||
QuotaManager* quotaManager = QuotaManager::Get();
|
|
||||||
MOZ_ASSERT(quotaManager);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIDirectoryEnumerator> entries;
|
|
||||||
nsresult rv =
|
|
||||||
aOriginProps.mDirectory->GetDirectoryEntries(getter_AddRefs(entries));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIFile> file;
|
|
||||||
while (NS_SUCCEEDED((rv = entries->GetNextFile(getter_AddRefs(file)))) && file) {
|
|
||||||
bool isDirectory;
|
|
||||||
rv = file->IsDirectory(&isDirectory);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsString leafName;
|
|
||||||
rv = file->GetLeafName(leafName);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isDirectory) {
|
|
||||||
// Unknown files during upgrade are allowed. Just warn if we find them.
|
|
||||||
if (!IsOriginMetadata(leafName) &&
|
|
||||||
!IsTempMetadata(leafName)) {
|
|
||||||
UNKNOWN_FILE_WARNING(leafName);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// The Cache API was creating top level morgue directories by accident for
|
// The Cache API was creating top level morgue directories by accident for
|
||||||
// a short time in nightly. This unfortunately prevents all storage from
|
// a short time in nightly. This unfortunately prevents all storage from
|
||||||
// working. So recover these profiles permanently by removing these corrupt
|
// working. So recover these profiles permanently by removing these corrupt
|
||||||
// directories as part of this upgrade.
|
// directories as part of this upgrade.
|
||||||
if (leafName.EqualsLiteral("morgue")) {
|
|
||||||
|
nsCOMPtr<nsIFile> morgueDir;
|
||||||
|
nsresult rv = aOriginProps.mDirectory->Clone(getter_AddRefs(morgueDir));
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
rv = morgueDir->Append(NS_LITERAL_STRING("morgue"));
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool exists;
|
||||||
|
rv = morgueDir->Exists(&exists);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (exists) {
|
||||||
QM_WARNING("Deleting accidental morgue directory!");
|
QM_WARNING("Deleting accidental morgue directory!");
|
||||||
|
|
||||||
rv = file->Remove(/* recursive */ true);
|
rv = morgueDir->Remove(/* recursive */ true);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Client::Type clientType;
|
|
||||||
rv = Client::TypeFromText(leafName, clientType);
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
UNKNOWN_FILE_WARNING(leafName);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Client* client = quotaManager->GetClient(clientType);
|
|
||||||
MOZ_ASSERT(client);
|
|
||||||
|
|
||||||
rv = client->UpgradeStorageFrom1_0To2_0(file);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
|
@ -9368,7 +9404,13 @@ UpgradeStorageFrom1_0To2_0Helper::PrepareOriginDirectory(
|
||||||
MOZ_ASSERT(aOriginProps.mDirectory);
|
MOZ_ASSERT(aOriginProps.mDirectory);
|
||||||
MOZ_ASSERT(aRemoved);
|
MOZ_ASSERT(aRemoved);
|
||||||
|
|
||||||
nsresult rv = MaybeUpgradeClients(aOriginProps);
|
nsresult rv = MaybeRemoveMorgueDirectory(aOriginProps);
|
||||||
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
rv = MaybeUpgradeClients(aOriginProps,
|
||||||
|
&Client::UpgradeStorageFrom1_0To2_0);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
@ -9456,68 +9498,6 @@ UpgradeStorageFrom1_0To2_0Helper::ProcessOriginDirectory(
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
nsresult
|
|
||||||
UpgradeStorageFrom2_0To2_1Helper::MaybeUpgradeClients(
|
|
||||||
const OriginProps& aOriginProps)
|
|
||||||
{
|
|
||||||
AssertIsOnIOThread();
|
|
||||||
MOZ_ASSERT(aOriginProps.mDirectory);
|
|
||||||
|
|
||||||
QuotaManager* quotaManager = QuotaManager::Get();
|
|
||||||
MOZ_ASSERT(quotaManager);
|
|
||||||
|
|
||||||
nsCOMPtr<nsIDirectoryEnumerator> entries;
|
|
||||||
nsresult rv =
|
|
||||||
aOriginProps.mDirectory->GetDirectoryEntries(getter_AddRefs(entries));
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsCOMPtr<nsIFile> file;
|
|
||||||
while (NS_SUCCEEDED((rv = entries->GetNextFile(getter_AddRefs(file)))) && file) {
|
|
||||||
bool isDirectory;
|
|
||||||
rv = file->IsDirectory(&isDirectory);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsString leafName;
|
|
||||||
rv = file->GetLeafName(leafName);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isDirectory) {
|
|
||||||
// Unknown files during upgrade are allowed. Just warn if we find them.
|
|
||||||
if (!IsOriginMetadata(leafName) &&
|
|
||||||
!IsTempMetadata(leafName)) {
|
|
||||||
UNKNOWN_FILE_WARNING(leafName);
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Client::Type clientType;
|
|
||||||
rv = Client::TypeFromText(leafName, clientType);
|
|
||||||
if (NS_FAILED(rv)) {
|
|
||||||
UNKNOWN_FILE_WARNING(leafName);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Client* client = quotaManager->GetClient(clientType);
|
|
||||||
MOZ_ASSERT(client);
|
|
||||||
|
|
||||||
rv = client->UpgradeStorageFrom2_0To2_1(file);
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NS_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsresult
|
nsresult
|
||||||
UpgradeStorageFrom2_0To2_1Helper::PrepareOriginDirectory(
|
UpgradeStorageFrom2_0To2_1Helper::PrepareOriginDirectory(
|
||||||
OriginProps& aOriginProps,
|
OriginProps& aOriginProps,
|
||||||
|
@ -9527,7 +9507,8 @@ UpgradeStorageFrom2_0To2_1Helper::PrepareOriginDirectory(
|
||||||
MOZ_ASSERT(aOriginProps.mDirectory);
|
MOZ_ASSERT(aOriginProps.mDirectory);
|
||||||
MOZ_ASSERT(aRemoved);
|
MOZ_ASSERT(aRemoved);
|
||||||
|
|
||||||
nsresult rv = MaybeUpgradeClients(aOriginProps);
|
nsresult rv = MaybeUpgradeClients(aOriginProps,
|
||||||
|
&Client::UpgradeStorageFrom2_0To2_1);
|
||||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче