Chromium Code Reviews| 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 |
|
jianli
2016/11/15 21:48:38
I think we should first get back to main thread up
fgorski
2016/11/15 23:14:12
Done.
|
| @@ -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) { |