Index: components/leveldb_proto/proto_database_impl.h |
diff --git a/components/leveldb_proto/proto_database_impl.h b/components/leveldb_proto/proto_database_impl.h |
index da02eed13876f266f1a45fc883aeae95c061039f..9997d382877a98ac3f7482c7495f20df0783e6bf 100644 |
--- a/components/leveldb_proto/proto_database_impl.h |
+++ b/components/leveldb_proto/proto_database_impl.h |
@@ -53,6 +53,8 @@ class ProtoDatabaseImpl : public ProtoDatabase<T> { |
const typename ProtoDatabase<T>::UpdateCallback& callback) override; |
void LoadEntries( |
const typename ProtoDatabase<T>::LoadCallback& callback) override; |
+ void LoadKeys( |
+ const typename ProtoDatabase<T>::LoadKeysCallback& callback) override; |
void GetEntry( |
const std::string& key, |
const typename ProtoDatabase<T>::GetCallback& callback) override; |
@@ -94,12 +96,20 @@ void RunUpdateCallback( |
template <typename T> |
void RunLoadCallback(const typename ProtoDatabase<T>::LoadCallback& callback, |
- const bool* success, |
+ bool* success, |
std::unique_ptr<std::vector<T>> entries) { |
callback.Run(*success, std::move(entries)); |
} |
template <typename T> |
+void RunLoadKeysCallback( |
+ const typename ProtoDatabase<T>::LoadKeysCallback& callback, |
+ std::unique_ptr<bool> success, |
+ std::unique_ptr<std::vector<std::string>> keys) { |
+ callback.Run(*success, std::move(keys)); |
+} |
+ |
+template <typename T> |
void RunGetCallback(const typename ProtoDatabase<T>::GetCallback& callback, |
const bool* success, |
const bool* found, |
@@ -171,6 +181,15 @@ void LoadEntriesFromTaskRunner(LevelDB* database, |
} |
} |
+void LoadKeysFromTaskRunner(LevelDB* database, |
+ std::vector<std::string>* keys, |
+ bool* success) { |
+ DCHECK(success); |
+ DCHECK(keys); |
+ keys->clear(); |
+ *success = database->LoadKeys(keys); |
+} |
+ |
template <typename T> |
void GetEntryFromTaskRunner(LevelDB* database, |
const std::string& key, |
@@ -286,6 +305,21 @@ void ProtoDatabaseImpl<T>::LoadEntries( |
} |
template <typename T> |
+void ProtoDatabaseImpl<T>::LoadKeys( |
+ const typename ProtoDatabase<T>::LoadKeysCallback& callback) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ auto success = base::MakeUnique<bool>(false); |
+ auto keys = base::MakeUnique<std::vector<std::string>>(); |
+ auto load_task = |
+ base::Bind(LoadKeysFromTaskRunner, base::Unretained(db_.get()), |
+ keys.get(), success.get()); |
+ task_runner_->PostTaskAndReply( |
+ FROM_HERE, load_task, |
+ base::Bind(RunLoadKeysCallback<T>, callback, base::Passed(&success), |
+ base::Passed(&keys))); |
+} |
+ |
+template <typename T> |
void ProtoDatabaseImpl<T>::GetEntry( |
const std::string& key, |
const typename ProtoDatabase<T>::GetCallback& callback) { |