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

Side by Side 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: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/offline_pages/background/request_queue_in_memory_store.h" 5 #include "components/offline_pages/background/request_queue_in_memory_store.h"
6 6
7 #include <unordered_set>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/location.h" 10 #include "base/location.h"
9 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
10 #include "components/offline_pages/background/save_page_request.h" 12 #include "components/offline_pages/background/save_page_request.h"
11 13
12 namespace offline_pages { 14 namespace offline_pages {
13 15
14 RequestQueueInMemoryStore::RequestQueueInMemoryStore() {} 16 RequestQueueInMemoryStore::RequestQueueInMemoryStore() {}
15 17
16 RequestQueueInMemoryStore::~RequestQueueInMemoryStore() {} 18 RequestQueueInMemoryStore::~RequestQueueInMemoryStore() {}
17 19
18 void RequestQueueInMemoryStore::GetRequests( 20 void RequestQueueInMemoryStore::GetRequests(
19 const GetRequestsCallback& callback) { 21 const GetRequestsCallback& callback) {
20 std::vector<std::unique_ptr<SavePageRequest>> result_requests; 22 std::vector<std::unique_ptr<SavePageRequest>> result_requests;
21 for (const auto& id_request_pair : requests_) { 23 for (const auto& id_request_pair : requests_) {
22 std::unique_ptr<SavePageRequest> request( 24 std::unique_ptr<SavePageRequest> request(
23 new SavePageRequest(id_request_pair.second)); 25 new SavePageRequest(id_request_pair.second));
24 result_requests.push_back(std::move(request)); 26 result_requests.push_back(std::move(request));
25 } 27 }
26 base::ThreadTaskRunnerHandle::Get()->PostTask( 28 base::ThreadTaskRunnerHandle::Get()->PostTask(
27 FROM_HERE, 29 FROM_HERE,
28 base::Bind(callback, true, base::Passed(std::move(result_requests)))); 30 base::Bind(callback, true, base::Passed(std::move(result_requests))));
29 } 31 }
30 32
33 void RequestQueueInMemoryStore::GetRequestsByIds(
34 const std::vector<int64_t>& request_ids,
35 const UpdateCallback& callback) {
Pete Williamson 2016/10/11 22:16:21 I think the name of the callback should have Get i
fgorski 2016/10/12 20:51:29 Yes, but I'd prefer to do that separately.
36 std::unique_ptr<UpdateRequestsResult> result(
37 new UpdateRequestsResult(state()));
38
39 ItemActionStatus status;
40 std::unordered_set<int64_t> processed_ids;
41 for (const auto& request_id : request_ids) {
42 if (!processed_ids.insert(request_id).second)
Pete Williamson 2016/10/11 22:16:21 Why do we keep a list of processed ids? Maybe add
fgorski 2016/10/12 20:51:29 Defensive programming for cases where someone spec
Pete Williamson 2016/10/12 22:23:36 Right, I understand why, I just think we should ad
fgorski 2016/10/12 23:05:30 Done. Sorry, I misread your comment.
43 continue;
44 RequestsMap::iterator iter = requests_.find(request_id);
45 if (iter != requests_.end()) {
46 status = ItemActionStatus::SUCCESS;
47 result->updated_items.push_back(iter->second);
48 } else {
49 status = ItemActionStatus::NOT_FOUND;
50 }
51 result->item_statuses.push_back(std::make_pair(request_id, status));
52 }
53
54 base::ThreadTaskRunnerHandle::Get()->PostTask(
55 FROM_HERE, base::Bind(callback, base::Passed(&result)));
56 }
57
31 void RequestQueueInMemoryStore::AddRequest(const SavePageRequest& request, 58 void RequestQueueInMemoryStore::AddRequest(const SavePageRequest& request,
32 const AddCallback& callback) { 59 const AddCallback& callback) {
33 RequestsMap::iterator iter = requests_.find(request.request_id()); 60 RequestsMap::iterator iter = requests_.find(request.request_id());
34 ItemActionStatus status; 61 ItemActionStatus status;
35 if (iter == requests_.end()) { 62 if (iter == requests_.end()) {
36 requests_.insert(iter, std::make_pair(request.request_id(), request)); 63 requests_.insert(iter, std::make_pair(request.request_id(), request));
37 status = ItemActionStatus::SUCCESS; 64 status = ItemActionStatus::SUCCESS;
38 } else { 65 } else {
39 status = ItemActionStatus::ALREADY_EXISTS; 66 status = ItemActionStatus::ALREADY_EXISTS;
40 } 67 }
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 requests_.clear(); 123 requests_.clear();
97 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, 124 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE,
98 base::Bind(callback, true)); 125 base::Bind(callback, true));
99 } 126 }
100 127
101 StoreState RequestQueueInMemoryStore::state() const { 128 StoreState RequestQueueInMemoryStore::state() const {
102 return StoreState::LOADED; 129 return StoreState::LOADED;
103 } 130 }
104 131
105 } // namespace offline_pages 132 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698