Index: components/webdata/common/web_database_backend.cc |
diff --git a/components/webdata/common/web_database_backend.cc b/components/webdata/common/web_database_backend.cc |
index 7cb343e62f02e5a76ba03a4fff2f999a07a33491..cbd8ac7ce3c29127c7271e171a0d74f4ac7495b2 100644 |
--- a/components/webdata/common/web_database_backend.cc |
+++ b/components/webdata/common/web_database_backend.cc |
@@ -4,6 +4,7 @@ |
#include "components/webdata/common/web_database_backend.h" |
+#include <algorithm> |
#include <utility> |
#include "base/bind.h" |
@@ -35,7 +36,7 @@ void WebDatabaseBackend::AddTable(std::unique_ptr<WebDatabaseTable> table) { |
void WebDatabaseBackend::InitDatabase() { |
LoadDatabaseIfNecessary(); |
if (delegate_) { |
- delegate_->DBLoaded(init_status_); |
+ delegate_->DBLoaded(init_status_, db_diagnostics_); |
} |
} |
@@ -46,14 +47,29 @@ sql::InitStatus WebDatabaseBackend::LoadDatabaseIfNecessary() { |
init_complete_ = true; |
db_.reset(new WebDatabase()); |
- for (ScopedVector<WebDatabaseTable>::iterator it = tables_.begin(); |
- it != tables_.end(); ++it) { |
- db_->AddTable(*it); |
- } |
+ for (const auto& table : tables_) |
+ db_->AddTable(table); |
init_status_ = db_->Init(db_path_); |
if (init_status_ != sql::INIT_OK) { |
LOG(ERROR) << "Cannot initialize the web database: " << init_status_; |
+ db_diagnostics_ = db_->GetDiagnosticMap(); |
+ std::vector<base::FilePath::StringType> path_components; |
+ db_path_.GetComponents(&path_components); |
+ |
+#if defined(OS_WIN) |
+ const base::FilePath::StringType default_dir(L"Default"); |
+#else |
+ const base::FilePath::StringType default_dir("Default"); |
+#endif // defined(OS_WIN) |
+ |
+ auto itr = |
+ std::find(path_components.begin(), path_components.end(), default_dir); |
+ const std::string corrupted_file_name = |
+ db_path_.BaseName().AsUTF8Unsafe() + (itr != path_components.end() |
+ ? " [Default profile]" |
+ : " [User profile]"); |
+ db_diagnostics_["Corrupted file"] = corrupted_file_name; |
db_.reset(NULL); |
return init_status_; |
} |