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

Unified Diff: components/offline_pages/background/request_queue_in_memory_store.cc

Issue 2410903003: [Offline pages] Adding capability to query a subset of requests based on IDs (Closed)
Patch Set: Addressing remaining feedback Created 4 years, 2 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/offline_pages/background/request_queue_in_memory_store.cc
diff --git a/components/offline_pages/background/request_queue_in_memory_store.cc b/components/offline_pages/background/request_queue_in_memory_store.cc
index e2d79ed2e8f5fd63e43bd07fa6e349a26c8bb2b0..f46f9a100133ea68d9bd729032b85c0484ffe0c4 100644
--- a/components/offline_pages/background/request_queue_in_memory_store.cc
+++ b/components/offline_pages/background/request_queue_in_memory_store.cc
@@ -4,6 +4,8 @@
#include "components/offline_pages/background/request_queue_in_memory_store.h"
+#include <unordered_set>
+
#include "base/bind.h"
#include "base/location.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -28,6 +30,33 @@ void RequestQueueInMemoryStore::GetRequests(
base::Bind(callback, true, base::Passed(std::move(result_requests))));
}
+void RequestQueueInMemoryStore::GetRequestsByIds(
+ const std::vector<int64_t>& request_ids,
+ const UpdateCallback& callback) {
+ std::unique_ptr<UpdateRequestsResult> result(
+ new UpdateRequestsResult(state()));
+
+ ItemActionStatus status;
+ // Make sure not to include the same request multiple times, while preserving
+ // the order of non-duplicated IDs in the result.
+ std::unordered_set<int64_t> processed_ids;
+ for (const auto& request_id : request_ids) {
+ if (!processed_ids.insert(request_id).second)
+ continue;
+ RequestsMap::iterator iter = requests_.find(request_id);
+ if (iter != requests_.end()) {
+ status = ItemActionStatus::SUCCESS;
+ result->updated_items.push_back(iter->second);
+ } else {
+ status = ItemActionStatus::NOT_FOUND;
+ }
+ result->item_statuses.push_back(std::make_pair(request_id, status));
+ }
+
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(callback, base::Passed(&result)));
+}
+
void RequestQueueInMemoryStore::AddRequest(const SavePageRequest& request,
const AddCallback& callback) {
RequestsMap::iterator iter = requests_.find(request.request_id());

Powered by Google App Engine
This is Rietveld 408576698