OLD | NEW |
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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "base/threading/thread_task_runner_handle.h" | 9 #include "base/threading/thread_task_runner_handle.h" |
10 #include "components/offline_pages/background/save_page_request.h" | 10 #include "components/offline_pages/background/save_page_request.h" |
11 | 11 |
12 namespace offline_pages { | 12 namespace offline_pages { |
13 | 13 |
14 RequestQueueInMemoryStore::RequestQueueInMemoryStore() {} | 14 RequestQueueInMemoryStore::RequestQueueInMemoryStore() {} |
15 | 15 |
16 RequestQueueInMemoryStore::~RequestQueueInMemoryStore() {} | 16 RequestQueueInMemoryStore::~RequestQueueInMemoryStore() {} |
17 | 17 |
18 void RequestQueueInMemoryStore::GetRequests( | 18 void RequestQueueInMemoryStore::GetRequests( |
19 const GetRequestsCallback& callback) { | 19 const GetRequestsCallback& callback) { |
20 std::vector<SavePageRequest> result_requests; | 20 std::vector<std::unique_ptr<SavePageRequest>> result_requests; |
21 for (const auto& id_request_pair : requests_) | 21 for (const auto& id_request_pair : requests_) { |
22 result_requests.push_back(id_request_pair.second); | 22 std::unique_ptr<SavePageRequest> request( |
| 23 new SavePageRequest(id_request_pair.second)); |
| 24 result_requests.push_back(std::move(request)); |
| 25 } |
23 base::ThreadTaskRunnerHandle::Get()->PostTask( | 26 base::ThreadTaskRunnerHandle::Get()->PostTask( |
24 FROM_HERE, base::Bind(callback, true, result_requests)); | 27 FROM_HERE, |
| 28 base::Bind(callback, true, base::Passed(std::move(result_requests)))); |
25 } | 29 } |
26 | 30 |
27 void RequestQueueInMemoryStore::AddOrUpdateRequest( | 31 void RequestQueueInMemoryStore::AddOrUpdateRequest( |
28 const SavePageRequest& request, | 32 const SavePageRequest& request, |
29 const UpdateCallback& callback) { | 33 const UpdateCallback& callback) { |
30 RequestsMap::iterator iter = requests_.find(request.request_id()); | 34 RequestsMap::iterator iter = requests_.find(request.request_id()); |
31 if (iter != requests_.end()) | 35 if (iter != requests_.end()) |
32 requests_.erase(iter); | 36 requests_.erase(iter); |
33 requests_.insert(std::make_pair(request.request_id(), request)); | 37 requests_.insert(std::make_pair(request.request_id(), request)); |
34 base::ThreadTaskRunnerHandle::Get()->PostTask( | 38 base::ThreadTaskRunnerHandle::Get()->PostTask( |
35 FROM_HERE, base::Bind(callback, UpdateStatus::UPDATED)); | 39 FROM_HERE, base::Bind(callback, UpdateStatus::UPDATED)); |
36 } | 40 } |
37 | 41 |
38 void RequestQueueInMemoryStore::RemoveRequests( | 42 void RequestQueueInMemoryStore::RemoveRequests( |
39 const std::vector<int64_t>& request_ids, | 43 const std::vector<int64_t>& request_ids, |
40 const RemoveCallback& callback) { | 44 const RemoveCallback& callback) { |
41 RequestQueue::UpdateMultipleRequestResults results; | 45 RequestQueue::UpdateMultipleRequestResults results; |
42 RequestQueue::UpdateRequestResult result; | 46 RequestQueue::UpdateRequestResult result; |
43 std::vector<SavePageRequest> requests; | 47 std::vector<std::unique_ptr<SavePageRequest>> requests; |
44 RequestsMap::iterator iter; | 48 RequestsMap::iterator iter; |
45 | 49 |
46 // If we find a request, mark it as succeeded, and put it in the request list. | 50 // If we find a request, mark it as succeeded, and put it in the request list. |
47 // Otherwise mark it as failed. | 51 // Otherwise mark it as failed. |
48 for (auto request_id : request_ids) { | 52 for (auto request_id : request_ids) { |
49 iter = requests_.find(request_id); | 53 iter = requests_.find(request_id); |
50 if (iter != requests_.end()) { | 54 if (iter != requests_.end()) { |
51 SavePageRequest request = iter->second; | 55 std::unique_ptr<SavePageRequest> request( |
| 56 new SavePageRequest(iter->second)); |
52 requests_.erase(iter); | 57 requests_.erase(iter); |
53 result = RequestQueue::UpdateRequestResult::SUCCESS; | 58 result = RequestQueue::UpdateRequestResult::SUCCESS; |
54 requests.push_back(request); | 59 requests.push_back(std::move(request)); |
55 } else { | 60 } else { |
56 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST; | 61 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST; |
57 } | 62 } |
58 results.push_back(std::make_pair(request_id, result)); | 63 results.push_back(std::make_pair(request_id, result)); |
59 } | 64 } |
60 | 65 |
61 base::ThreadTaskRunnerHandle::Get()->PostTask( | 66 base::ThreadTaskRunnerHandle::Get()->PostTask( |
62 FROM_HERE, base::Bind(callback, results, requests)); | 67 FROM_HERE, |
| 68 base::Bind(callback, results, base::Passed(std::move(requests)))); |
63 } | 69 } |
64 | 70 |
65 void RequestQueueInMemoryStore::ChangeRequestsState( | 71 void RequestQueueInMemoryStore::ChangeRequestsState( |
66 const std::vector<int64_t>& request_ids, | 72 const std::vector<int64_t>& request_ids, |
67 const SavePageRequest::RequestState new_state, | 73 const SavePageRequest::RequestState new_state, |
68 const UpdateMultipleRequestsCallback& callback) { | 74 const UpdateMultipleRequestsCallback& callback) { |
69 RequestQueue::UpdateMultipleRequestResults results; | 75 RequestQueue::UpdateMultipleRequestResults results; |
70 std::vector<SavePageRequest> requests; | 76 std::vector<std::unique_ptr<SavePageRequest>> requests; |
71 RequestQueue::UpdateRequestResult result; | 77 RequestQueue::UpdateRequestResult result; |
72 for (int64_t request_id : request_ids) { | 78 for (int64_t request_id : request_ids) { |
73 auto pair = requests_.find(request_id); | 79 auto pair = requests_.find(request_id); |
74 // If we find this request id, modify it, and return the modified request in | 80 // If we find this request id, modify it, and return the modified request in |
75 // the request list. | 81 // the request list. |
76 if (pair != requests_.end()) { | 82 if (pair != requests_.end()) { |
77 pair->second.set_request_state(new_state); | 83 pair->second.set_request_state(new_state); |
78 requests.push_back(pair->second); | 84 std::unique_ptr<SavePageRequest> request( |
| 85 new SavePageRequest(pair->second)); |
| 86 requests.push_back(std::move(request)); |
79 result = RequestQueue::UpdateRequestResult::SUCCESS; | 87 result = RequestQueue::UpdateRequestResult::SUCCESS; |
80 } else { | 88 } else { |
81 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;; | 89 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;; |
82 } | 90 } |
83 | 91 |
84 results.push_back(std::make_pair(request_id, result)); | 92 results.push_back(std::make_pair(request_id, result)); |
85 } | 93 } |
86 | 94 |
87 base::ThreadTaskRunnerHandle::Get()->PostTask( | 95 base::ThreadTaskRunnerHandle::Get()->PostTask( |
88 FROM_HERE, base::Bind(callback, results, requests)); | 96 FROM_HERE, |
| 97 base::Bind(callback, results, base::Passed(std::move(requests)))); |
89 } | 98 } |
90 | 99 |
91 void RequestQueueInMemoryStore::Reset(const ResetCallback& callback) { | 100 void RequestQueueInMemoryStore::Reset(const ResetCallback& callback) { |
92 requests_.clear(); | 101 requests_.clear(); |
93 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, | 102 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, |
94 base::Bind(callback, true)); | 103 base::Bind(callback, true)); |
95 } | 104 } |
96 | 105 |
97 } // namespace offline_pages | 106 } // namespace offline_pages |
OLD | NEW |