Bug 727370 - Recover correctly from a Reset during an update. r=dcamp

This commit is contained in:
Gian-Carlo Pascutto 2012-09-28 18:31:19 +02:00
Родитель 44872d00c9
Коммит abb9245bcc
3 изменённых файлов: 28 добавлений и 15 удалений

Просмотреть файл

@ -149,6 +149,28 @@ Classifier::SetupPathNames()
return NS_OK;
}
nsresult
Classifier::CreateStoreDirectory()
{
// Ensure the safebrowsing directory exists.
bool storeExists;
nsresult rv = mStoreDirectory->Exists(&storeExists);
NS_ENSURE_SUCCESS(rv, rv);
if (!storeExists) {
rv = mStoreDirectory->Create(nsIFile::DIRECTORY_TYPE, 0755);
NS_ENSURE_SUCCESS(rv, rv);
} else {
bool storeIsDir;
rv = mStoreDirectory->IsDirectory(&storeIsDir);
NS_ENSURE_SUCCESS(rv, rv);
if (!storeIsDir)
return NS_ERROR_FILE_DESTINATION_NOT_DIR;
}
return NS_OK;
}
nsresult
Classifier::Open(nsIFile& aCacheDirectory)
{
@ -169,22 +191,10 @@ Classifier::Open(nsIFile& aCacheDirectory)
rv = RecoverBackups();
NS_ENSURE_SUCCESS(rv, rv);
// Ensure the safebrowsing directory exists.
bool storeExists;
rv = mStoreDirectory->Exists(&storeExists);
// Make sure the main store directory exists.
rv = CreateStoreDirectory();
NS_ENSURE_SUCCESS(rv, rv);
if (!storeExists) {
rv = mStoreDirectory->Create(nsIFile::DIRECTORY_TYPE, 0755);
NS_ENSURE_SUCCESS(rv, rv);
} else {
bool storeIsDir;
rv = mStoreDirectory->IsDirectory(&storeIsDir);
NS_ENSURE_SUCCESS(rv, rv);
if (!storeIsDir)
return NS_ERROR_FILE_DESTINATION_NOT_DIR;
}
mCryptoHash = do_CreateInstance(NS_CRYPTO_HASH_CONTRACTID, &rv);
NS_ENSURE_SUCCESS(rv, rv);
@ -219,6 +229,8 @@ Classifier::Reset()
mBackupDirectory->Remove(true);
mToDeleteDirectory->Remove(true);
CreateStoreDirectory();
mTableFreshness.Clear();
RegenActiveTables();
}

Просмотреть файл

@ -71,6 +71,7 @@ public:
PrefixArray* aNoiseEntries);
private:
void DropStores();
nsresult CreateStoreDirectory();
nsresult SetupPathNames();
nsresult RecoverBackups();
nsresult CleanToDelete();

Просмотреть файл

@ -454,7 +454,7 @@ function run_test()
testValidForwardMAC,
testInvalidForwardMAC,
testNoForwardMAC,
testRekey,
testRekey
]);
}