Chromium Code Reviews| 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)); |