Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1093)

Unified Diff: chrome/browser/diagnostics/sqlite_diagnostics.cc

Issue 16948012: This adds a recovery mode to the diagnostics (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698