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

Unified Diff: components/offline_pages/offline_page_metadata_store_sql.cc

Issue 2497703002: [Offline pages] Resetting offline page metadata store to handle LOAD/INIT failures (Closed)
Patch Set: Addressing STORE_INIT_FAILED Created 4 years, 1 month 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: components/offline_pages/offline_page_metadata_store_sql.cc
diff --git a/components/offline_pages/offline_page_metadata_store_sql.cc b/components/offline_pages/offline_page_metadata_store_sql.cc
index 80061980d55d58f742b9bfecc9923f93021f6c6b..5941d553b524c8e6b296706354118aaad85a0e38 100644
--- a/components/offline_pages/offline_page_metadata_store_sql.cc
+++ b/components/offline_pages/offline_page_metadata_store_sql.cc
@@ -267,7 +267,7 @@ void NotifyLoadResult(scoped_refptr<base::SingleThreadTaskRunner> runner,
} else {
DVLOG(1) << "Offline pages database loading failed: " << status;
}
- runner->PostTask(FROM_HERE, base::Bind(callback, status, result));
+ runner->PostTask(FROM_HERE, base::Bind(callback, result));
}
void OpenConnectionSync(sql::Connection* db,
@@ -434,8 +434,12 @@ void ResetSync(sql::Connection* db,
scoped_refptr<base::SingleThreadTaskRunner> runner,
const base::Callback<void(StoreState)>& callback) {
// This method deletes the content of the whole store and reinitializes it.
- bool success = db->Raze();
- db->Close();
+ bool success = true;
+ if (db) {
+ success = db->Raze();
+ db->Close();
+ }
+ success = base::DeleteFile(db_file_path, true /*recursive*/) && success;
StoreState state;
if (success) {
state = InitDatabase(db, db_file_path) ? StoreState::LOADED
@@ -455,7 +459,6 @@ OfflinePageMetadataStoreSQL::OfflinePageMetadataStoreSQL(
db_file_path_(path.AppendASCII("OfflinePages.db")),
state_(StoreState::NOT_LOADED),
weak_ptr_factory_(this) {
- OpenConnection();
}
OfflinePageMetadataStoreSQL::~OfflinePageMetadataStoreSQL() {
@@ -465,10 +468,21 @@ OfflinePageMetadataStoreSQL::~OfflinePageMetadataStoreSQL() {
}
}
+void OfflinePageMetadataStoreSQL::Initialize(
+ const InitializeCallback& callback) {
+ DCHECK(!db_);
+ db_.reset(new sql::Connection());
+ background_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&OpenConnectionSync, db_.get(),
+ base::ThreadTaskRunnerHandle::Get(), db_file_path_,
+ base::Bind(&OfflinePageMetadataStoreSQL::OnOpenConnectionDone,
+ weak_ptr_factory_.GetWeakPtr(), callback)));
+}
+
void OfflinePageMetadataStoreSQL::GetOfflinePages(
const LoadCallback& callback) {
- if (!CheckDb(base::Bind(
- callback, STORE_INIT_FAILED, std::vector<OfflinePageItem>()))) {
+ if (!CheckDb(base::Bind(callback, std::vector<OfflinePageItem>()))) {
return;
}
@@ -523,15 +537,12 @@ void OfflinePageMetadataStoreSQL::RemoveOfflinePages(
base::ThreadTaskRunnerHandle::Get(), callback));
}
-void OfflinePageMetadataStoreSQL::Reset(const ResetCallback& callback) {
- if (!CheckDb(base::Bind(callback, false)))
- return;
-
+void OfflinePageMetadataStoreSQL::Reset(const InitializeCallback& callback) {
background_task_runner_->PostTask(
FROM_HERE,
base::Bind(&ResetSync, db_.get(), db_file_path_,
base::ThreadTaskRunnerHandle::Get(),
- base::Bind(&OfflinePageMetadataStoreSQL::OnResetDone,
+ base::Bind(&OfflinePageMetadataStoreSQL::OnOpenConnectionDone,
weak_ptr_factory_.GetWeakPtr(), callback)));
}
@@ -546,34 +557,18 @@ void OfflinePageMetadataStoreSQL::SetStateForTesting(StoreState state,
db_.reset(nullptr);
}
-void OfflinePageMetadataStoreSQL::OpenConnection() {
- DCHECK(!db_);
- db_.reset(new sql::Connection());
- background_task_runner_->PostTask(
- FROM_HERE,
- base::Bind(&OpenConnectionSync, db_.get(),
- base::ThreadTaskRunnerHandle::Get(), db_file_path_,
- base::Bind(&OfflinePageMetadataStoreSQL::OnOpenConnectionDone,
- weak_ptr_factory_.GetWeakPtr())));
-}
-
-void OfflinePageMetadataStoreSQL::OnOpenConnectionDone(StoreState state) {
+void OfflinePageMetadataStoreSQL::OnOpenConnectionDone(
+ const InitializeCallback& callback,
+ StoreState state) {
DCHECK(db_.get());
state_ = state;
// Unfortunately we were not able to open DB connection.
if (state != StoreState::LOADED)
- db_.reset();
-
- // TODO(fgorski): This might be a place to start store recovery. Alternatively
- // that can be attempted in the OfflinePageModel.
-}
+ db_.reset(nullptr);
-void OfflinePageMetadataStoreSQL::OnResetDone(const ResetCallback& callback,
- StoreState state) {
- OnOpenConnectionDone(state);
- callback.Run(state == StoreState::LOADED);
+ callback.Run(state);
}
bool OfflinePageMetadataStoreSQL::CheckDb(const base::Closure& callback) {

Powered by Google App Engine
This is Rietveld 408576698