Chromium Code Reviews| Index: components/safe_browsing_db/v4_database.cc |
| diff --git a/components/safe_browsing_db/v4_database.cc b/components/safe_browsing_db/v4_database.cc |
| index 6e14e5f099dfeee935a8f5265357fddf71719192..3ada0bc134f83632e36f11965ebcc23869e5ab89 100644 |
| --- a/components/safe_browsing_db/v4_database.cc |
| +++ b/components/safe_browsing_db/v4_database.cc |
| @@ -69,7 +69,7 @@ void V4Database::CreateOnTaskRunner( |
| new V4Database(db_task_runner, std::move(store_map))); |
| // Database is done loading, pass it to the new_db_callback on the caller's |
| - // thread. |
| + // thread. This would unblock URL navigation. |
|
Nathan Parker
2016/10/07 23:24:28
nit: URL resource loads (not just navigation... so
vakh (use Gerrit instead)
2016/10/10 17:42:33
Done.
|
| callback_task_runner->PostTask( |
| FROM_HERE, base::Bind(new_db_callback, base::Passed(&v4_database))); |
| } |
| @@ -81,11 +81,11 @@ V4Database::V4Database( |
| store_map_(std::move(store_map)), |
| pending_store_updates_(0) { |
| DCHECK(db_task_runner->RunsTasksOnCurrentThread()); |
| - // TODO(vakh): Implement skeleton |
| } |
| // static |
| void V4Database::Destroy(std::unique_ptr<V4Database> v4_database) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| V4Database* v4_database_raw = v4_database.release(); |
| if (v4_database_raw) { |
| v4_database_raw->db_task_runner_->DeleteSoon(FROM_HERE, v4_database_raw); |
| @@ -152,17 +152,6 @@ void V4Database::UpdatedStoreReady(ListIdentifier identifier, |
| } |
| } |
| -bool V4Database::ResetDatabase() { |
| - DCHECK(db_task_runner_->RunsTasksOnCurrentThread()); |
| - bool reset_success = true; |
| - for (const auto& store_map_iter : *store_map_) { |
| - if (!store_map_iter.second->Reset()) { |
| - reset_success = false; |
| - } |
| - } |
| - return reset_success; |
| -} |
| - |
| std::unique_ptr<StoreStateMap> V4Database::GetStoreStateMap() { |
| std::unique_ptr<StoreStateMap> store_state_map = |
| base::MakeUnique<StoreStateMap>(); |
| @@ -189,6 +178,41 @@ void V4Database::GetStoresMatchingFullHash( |
| } |
| } |
| +void V4Database::ResetStores( |
| + const std::vector<ListIdentifier>& stores_to_reset) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + for (const ListIdentifier& identifier : stores_to_reset) { |
| + const auto& store_pair = store_map_->find(identifier); |
| + DCHECK(store_pair != store_map_->end()); |
| + store_pair->second->Reset(); |
| + } |
| +} |
| + |
| +void V4Database::VerifyChecksum( |
| + DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + const scoped_refptr<base::SingleThreadTaskRunner> callback_task_runner = |
| + base::ThreadTaskRunnerHandle::Get(); |
| + db_task_runner_->PostTask( |
| + FROM_HERE, base::Bind(&V4Database::VerifyChecksumOnTaskRunner, |
|
Nathan Parker
2016/10/07 23:24:28
An aside: I think you could have used PostTaskAndR
vakh (use Gerrit instead)
2016/10/10 17:42:33
You're right that it'd be less code and it also gu
|
| + base::Unretained(this), callback_task_runner, |
| + db_ready_for_updates_callback)); |
| +} |
| + |
| +void V4Database::VerifyChecksumOnTaskRunner( |
| + const scoped_refptr<base::SingleThreadTaskRunner>& callback_task_runner, |
| + DatabaseReadyForUpdatesCallback db_ready_for_updates_callback) { |
| + std::vector<ListIdentifier> stores_to_reset; |
| + for (const auto& store_map_iter : *store_map_) { |
| + if (!store_map_iter.second->VerifyChecksum()) { |
| + stores_to_reset.push_back(store_map_iter.first); |
| + } |
| + } |
| + |
| + callback_task_runner->PostTask( |
| + FROM_HERE, base::Bind(db_ready_for_updates_callback, stores_to_reset)); |
| +} |
| + |
| ListInfo::ListInfo(const bool fetch_updates, |
| const std::string& filename, |
| const ListIdentifier& list_id, |