Index: chrome/browser/diagnostics/sqlite_diagnostics.cc |
diff --git a/chrome/browser/diagnostics/sqlite_diagnostics.cc b/chrome/browser/diagnostics/sqlite_diagnostics.cc |
index 81753a87f793d706d43d297f2ce402974e9c400a..5a53de5beba26fe7f2ac9454043a25ece01d0a73 100644 |
--- a/chrome/browser/diagnostics/sqlite_diagnostics.cc |
+++ b/chrome/browser/diagnostics/sqlite_diagnostics.cc |
@@ -49,10 +49,39 @@ class SqliteIntegrityTest : public DiagnosticsTest { |
public: |
SqliteIntegrityTest(bool critical, |
+ bool remove_if_corrupt, |
const std::string& id, |
const std::string& title, |
const base::FilePath& db_path) |
- : DiagnosticsTest(id, title), critical_(critical), db_path_(db_path) {} |
+ : DiagnosticsTest(id, title), |
+ critical_(critical), |
+ remove_if_corrupt_(remove_if_corrupt), |
+ db_path_(db_path) {} |
+ |
+ virtual bool RecoveryImpl(DiagnosticsModel::Observer* observer) OVERRIDE { |
+ int outcome_code = GetOutcomeCode(); |
+ if (remove_if_corrupt_) { |
+ switch (outcome_code) { |
+ case DIAG_SQLITE_ERROR_HANDLER_CALLED: |
+ case DIAG_SQLITE_CANNOT_OPEN_DB: |
+ case DIAG_SQLITE_DB_LOCKED: |
+ case DIAG_SQLITE_PRAGMA_FAILED: |
+ case DIAG_SQLITE_DB_CORRUPTED: |
+ LOG(WARNING) << "Removing broken SQLite database: " |
+ << db_path_.value(); |
+ base::DeleteFile(db_path_, false); |
+ break; |
+ case DIAG_SQLITE_SUCCESS: |
+ case DIAG_SQLITE_FILE_NOT_FOUND_OK: |
+ case DIAG_SQLITE_FILE_NOT_FOUND: |
+ break; |
+ default: |
+ DCHECK(false) << "Invalid outcome code: " << outcome_code; |
+ break; |
+ } |
+ } |
+ return true; |
+ } |
virtual bool ExecuteImpl(DiagnosticsModel::Observer* observer) OVERRIDE { |
// If we're given an absolute path, use it. If not, then assume it's under |
@@ -179,6 +208,7 @@ class SqliteIntegrityTest : public DiagnosticsTest { |
}; |
bool critical_; |
+ bool remove_if_corrupt_; |
base::FilePath db_path_; |
DISALLOW_COPY_AND_ASSIGN(SqliteIntegrityTest); |
}; |
@@ -186,21 +216,24 @@ class SqliteIntegrityTest : public DiagnosticsTest { |
} // namespace |
DiagnosticsTest* MakeSqliteWebDbTest() { |
- return new SqliteIntegrityTest(true, |
+ return new SqliteIntegrityTest(true, // critical |
cpu_(ooo_6.6-7.5)
2013/07/25 19:40:56
same with these, either gone or switch to enums.
Greg Spencer (Chromium)
2013/07/26 18:51:30
Done.
|
+ false, // remove_if_corrupt |
kSQLiteIntegrityWebTest, |
"Web Database", |
base::FilePath(kWebDataFilename)); |
} |
DiagnosticsTest* MakeSqliteCookiesDbTest() { |
- return new SqliteIntegrityTest(true, |
+ return new SqliteIntegrityTest(true, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityCookieTest, |
"Cookies Database", |
base::FilePath(chrome::kCookieFilename)); |
} |
DiagnosticsTest* MakeSqliteHistoryDbTest() { |
- return new SqliteIntegrityTest(true, |
+ return new SqliteIntegrityTest(true, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityHistoryTest, |
"History Database", |
base::FilePath(chrome::kHistoryFilename)); |
@@ -208,14 +241,16 @@ DiagnosticsTest* MakeSqliteHistoryDbTest() { |
DiagnosticsTest* MakeSqliteArchivedHistoryDbTest() { |
return new SqliteIntegrityTest( |
- false, |
+ false, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityArchivedHistoryTest, |
"Archived History Database", |
base::FilePath(chrome::kArchivedHistoryFilename)); |
} |
DiagnosticsTest* MakeSqliteThumbnailsDbTest() { |
- return new SqliteIntegrityTest(false, |
+ return new SqliteIntegrityTest(false, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityThumbnailsTest, |
"Thumbnails Database", |
base::FilePath(chrome::kThumbnailsFilename)); |
@@ -225,7 +260,8 @@ DiagnosticsTest* MakeSqliteAppCacheDbTest() { |
base::FilePath appcache_dir(content::kAppCacheDirname); |
base::FilePath appcache_db = |
appcache_dir.Append(appcache::kAppCacheDatabaseName); |
- return new SqliteIntegrityTest(false, |
+ return new SqliteIntegrityTest(false, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityAppCacheTest, |
"Application Cache Database", |
appcache_db); |
@@ -235,7 +271,8 @@ DiagnosticsTest* MakeSqliteWebDatabaseTrackerDbTest() { |
base::FilePath databases_dir(webkit_database::kDatabaseDirectoryName); |
base::FilePath tracker_db = |
databases_dir.Append(webkit_database::kTrackerDatabaseFileName); |
- return new SqliteIntegrityTest(false, |
+ return new SqliteIntegrityTest(false, // critical |
+ false, // remove_if_corrupt |
kSQLiteIntegrityDatabaseTrackerTest, |
"Database Tracker Database", |
tracker_db); |
@@ -244,7 +281,8 @@ DiagnosticsTest* MakeSqliteWebDatabaseTrackerDbTest() { |
#if defined(OS_CHROMEOS) |
DiagnosticsTest* MakeSqliteNssCertDbTest() { |
base::FilePath home_dir = file_util::GetHomeDir(); |
- return new SqliteIntegrityTest(false, |
+ return new SqliteIntegrityTest(false, // critical |
+ true, // remove_if_corrupt |
kSQLiteIntegrityNSSCertTest, |
"NSS Certificate Database", |
home_dir.Append(chromeos::kNssCertDbPath)); |
@@ -252,7 +290,8 @@ DiagnosticsTest* MakeSqliteNssCertDbTest() { |
DiagnosticsTest* MakeSqliteNssKeyDbTest() { |
base::FilePath home_dir = file_util::GetHomeDir(); |
- return new SqliteIntegrityTest(false, |
+ return new SqliteIntegrityTest(false, // critical |
+ true, // remove_if_corrupt |
kSQLiteIntegrityNSSKeyTest, |
"NSS Key Database", |
home_dir.Append(chromeos::kNssKeyDbPath)); |