| 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) {
|
|
|