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

Unified Diff: components/safe_browsing_db/v4_database.cc

Issue 1954393002: Initialize and reset V4LocalDBManager. Instantiate V4Stores. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@v4_01_db_realz
Patch Set: CR feedback Created 4 years, 7 months 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/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 328bedcaf652852b7ae5b41836c4567cb66f11e4..ccf05e6b7b7a2e8875480174a98be47a3cee5c27 100644
--- a/components/safe_browsing_db/v4_database.cc
+++ b/components/safe_browsing_db/v4_database.cc
@@ -2,41 +2,101 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <memory>
+
+#include "base/callback.h"
#include "components/safe_browsing_db/v4_database.h"
+#include "content/public/browser/browser_thread.h"
+
+using content::BrowserThread;
namespace safe_browsing {
+namespace {
+
+V4Store* CreateStore(
+ const scoped_refptr<base::SequencedTaskRunner>& task_runner,
+ const base::FilePath& store_path) {
+ return new V4Store(task_runner, store_path);
+}
+
+} // namespace
+
// static
V4DatabaseFactory* V4Database::factory_ = NULL;
// static
-// Factory method, should be called on the Safe Browsing sequenced task runner,
-// which is also passed to the function as |db_task_runner|.
-V4Database* V4Database::Create(
+// Factory method, called on the task runner, which is also passed to the
+// function as |db_task_runner|.
+void V4Database::Create(
const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
const base::FilePath& base_path,
- ListInfoMap list_info_map) {
+ ListInfoMap list_info_map,
+ NewDatabaseReadyCallback callback) {
DCHECK(db_task_runner->RunsTasksOnCurrentThread());
+ db_task_runner->PostTask(
+ FROM_HERE, base::Bind(&V4Database::CreateOnTaskRunner, db_task_runner,
+ base_path, list_info_map, callback));
+}
+
+// static
+// Factory method, called on the task runner, which is also passed to the
+// function as |db_task_runner|.
+void V4Database::CreateOnTaskRunner(
+ const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
+ const base::FilePath& base_path,
+ ListInfoMap list_info_map,
+ NewDatabaseReadyCallback callback) {
+ DCHECK(db_task_runner->RunsTasksOnCurrentThread());
+ DCHECK(!base_path.empty());
+
if (!factory_) {
StoreMap store_map;
- // TODO(vakh): Populate the store_map using list_suffix_map.
- return new V4Database(db_task_runner, std::move(store_map));
+
+ for (const auto& list_info : list_info_map) {
+ UpdateListIdentifier update_list_identifier = list_info.first;
+ const base::FilePath::CharType suffix = list_info.second;
+
+ const base::FilePath store_path =
+ base::FilePath(base_path.value() + suffix);
+ (*store_map)[update_list_identifier].reset(
+ CreateStore(db_task_runner, store_path));
+ }
+
+ std::unique_ptr<V4Database> v4_database(
+ new V4Database(db_task_runner, std::move(store_map)));
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(callback, base::Passed(&v4_database)));
} else {
- return factory_->CreateV4Database(db_task_runner, base_path, list_info_map);
+ std::unique_ptr<V4Database> v4_database(
+ factory_->CreateV4Database(db_task_runner, base_path, list_info_map));
+
+ // For tests, schedule the callback on the same thread (task runner) instead
+ // of the IO thread.
+ db_task_runner->PostTask(FROM_HERE,
+ base::Bind(callback, base::Passed(&v4_database)));
Scott Hess - ex-Googler 2016/05/12 23:18:00 This seems odd to me. In some cases, tests setup
vakh (use Gerrit instead) 2016/05/13 00:07:32 Done.
}
}
V4Database::V4Database(
const scoped_refptr<base::SequencedTaskRunner>& db_task_runner,
- StoreMap store_map) {
+ StoreMap store_map)
+ : db_task_runner_(db_task_runner), store_map_(std::move(store_map)) {
+ DCHECK(db_task_runner->RunsTasksOnCurrentThread());
// TODO(vakh): Implement skeleton
}
V4Database::~V4Database() {}
bool V4Database::ResetDatabase() {
- // TODO(vakh): Delete the stores. Delete the backing files.
- return true;
+ DCHECK(db_task_runner_->RunsTasksOnCurrentThread());
+ bool reset_success = true;
+ for (const auto& store_id_and_store : *store_map_) {
+ if (!store_id_and_store.second->Reset()) {
+ reset_success = false;
+ }
+ }
+ return reset_success;
}
} // namespace safe_browsing

Powered by Google App Engine
This is Rietveld 408576698