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

Side by Side Diff: components/offline_pages/background/request_queue.cc

Issue 2463713003: [Offline Pages] Converts MarkAttemptCompleted to use TaskQueue (Closed)
Patch Set: Ternary nit and format fix Created 4 years, 1 month 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.h" 5 #include "components/offline_pages/background/request_queue.h"
6 6
7 #include <utility>
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/change_requests_state_task.h" 12 #include "components/offline_pages/background/change_requests_state_task.h"
11 #include "components/offline_pages/background/mark_attempt_aborted_task.h" 13 #include "components/offline_pages/background/mark_attempt_aborted_task.h"
14 #include "components/offline_pages/background/mark_attempt_completed_task.h"
12 #include "components/offline_pages/background/mark_attempt_started_task.h" 15 #include "components/offline_pages/background/mark_attempt_started_task.h"
13 #include "components/offline_pages/background/remove_requests_task.h" 16 #include "components/offline_pages/background/remove_requests_task.h"
14 #include "components/offline_pages/background/request_queue_store.h" 17 #include "components/offline_pages/background/request_queue_store.h"
15 #include "components/offline_pages/background/save_page_request.h" 18 #include "components/offline_pages/background/save_page_request.h"
16 19
17 namespace offline_pages { 20 namespace offline_pages {
18 21
19 namespace { 22 namespace {
20 // Completes the get requests call. 23 // Completes the get requests call.
21 void GetRequestsDone(const RequestQueue::GetRequestsCallback& callback, 24 void GetRequestsDone(const RequestQueue::GetRequestsCallback& callback,
(...skipping 25 matching lines...) Expand all
47 result = RequestQueue::AddRequestResult::STORE_FAILURE; 50 result = RequestQueue::AddRequestResult::STORE_FAILURE;
48 break; 51 break;
49 case ItemActionStatus::NOT_FOUND: 52 case ItemActionStatus::NOT_FOUND:
50 default: 53 default:
51 NOTREACHED(); 54 NOTREACHED();
52 return; 55 return;
53 } 56 }
54 callback.Run(result, request); 57 callback.Run(result, request);
55 } 58 }
56 59
57 // Completes the update request call.
58 // TODO(fgorski): For specific cases, check that appropriate items were updated.
59 void UpdateRequestsDone(const RequestQueue::UpdateRequestCallback& callback,
60 std::unique_ptr<UpdateRequestsResult> store_result) {
61 RequestQueue::UpdateRequestResult result;
62 if (store_result->store_state != StoreState::LOADED) {
63 result = RequestQueue::UpdateRequestResult::STORE_FAILURE;
64 } else if (store_result->item_statuses.size() == 0) {
65 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
66 } else {
67 ItemActionStatus status = store_result->item_statuses.begin()->second;
68 if (status == ItemActionStatus::STORE_ERROR)
69 result = RequestQueue::UpdateRequestResult::STORE_FAILURE;
70 else if (status == ItemActionStatus::NOT_FOUND)
71 result = RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST;
72 else
73 result = RequestQueue::UpdateRequestResult::SUCCESS;
74 }
75
76 callback.Run(result);
77 }
78
79 } // namespace 60 } // namespace
80 61
81 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store) 62 RequestQueue::RequestQueue(std::unique_ptr<RequestQueueStore> store)
82 : store_(std::move(store)), weak_ptr_factory_(this) {} 63 : store_(std::move(store)), weak_ptr_factory_(this) {}
83 64
84 RequestQueue::~RequestQueue() {} 65 RequestQueue::~RequestQueue() {}
85 66
86 void RequestQueue::GetRequests(const GetRequestsCallback& callback) { 67 void RequestQueue::GetRequests(const GetRequestsCallback& callback) {
87 store_->GetRequests(base::Bind(&GetRequestsDone, callback)); 68 store_->GetRequests(base::Bind(&GetRequestsDone, callback));
88 } 69 }
89 70
90 void RequestQueue::AddRequest(const SavePageRequest& request, 71 void RequestQueue::AddRequest(const SavePageRequest& request,
91 const AddRequestCallback& callback) { 72 const AddRequestCallback& callback) {
92 // TODO(fgorski): check that request makes sense. 73 // TODO(fgorski): check that request makes sense.
93 // TODO(fgorski): check that request does not violate policy. 74 // TODO(fgorski): check that request does not violate policy.
94 store_->AddRequest(request, base::Bind(&AddRequestDone, callback, request)); 75 store_->AddRequest(request, base::Bind(&AddRequestDone, callback, request));
95 } 76 }
96 77
97 void RequestQueue::UpdateRequest(const SavePageRequest& update_request,
98 const UpdateRequestCallback& update_callback) {
99 // We have to pass the update_callback *through* the get callback. We do this
100 // by currying the update_callback as a parameter to be used when calling
101 // GetForUpdateDone. The actual request queue store get operation will not
102 // see this bound parameter, but just pass it along. GetForUpdateDone then
103 // passes it into the UpdateRequests method, where it ends up calling back
104 // to the request queue client.
105 // TODO(petewil): This would be more efficient if the store supported a call
106 // to get a single item by ID. Change this code to use that API when added.
107 // crbug.com/630657.
108 store_->GetRequests(base::Bind(
109 &RequestQueue::GetForUpdateDone, weak_ptr_factory_.GetWeakPtr(),
110 update_callback, update_request));
111 }
112
113 // We need a different version of the GetCallback that can take the curried
114 // update_callback as a parameter, and call back into the request queue store
115 // implementation. This must be a member function because we need access to
116 // the store pointer to call UpdateRequests.
117 void RequestQueue::GetForUpdateDone(
118 const UpdateRequestCallback& update_callback,
119 const SavePageRequest& update_request,
120 bool success,
121 std::vector<std::unique_ptr<SavePageRequest>> found_requests) {
122 // If the result was not found, return now.
123 if (!success) {
124 update_callback.Run(
125 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
126 return;
127 }
128 // If the found result does not contain the request we are looking for, return
129 // now.
130 bool found = false;
131 std::vector<std::unique_ptr<SavePageRequest>>::const_iterator iter;
132 for (iter = found_requests.begin(); iter != found_requests.end(); ++iter) {
133 if ((*iter)->request_id() == update_request.request_id())
134 found = true;
135 }
136 if (!found) {
137 update_callback.Run(
138 RequestQueue::UpdateRequestResult::REQUEST_DOES_NOT_EXIST);
139 return;
140 }
141
142 // Since the request exists, update it.
143 std::vector<SavePageRequest> update_requests{update_request};
144 store_->UpdateRequests(update_requests,
145 base::Bind(&UpdateRequestsDone, update_callback));
146 }
147
148 void RequestQueue::RemoveRequests(const std::vector<int64_t>& request_ids, 78 void RequestQueue::RemoveRequests(const std::vector<int64_t>& request_ids,
149 const UpdateCallback& callback) { 79 const UpdateCallback& callback) {
150 std::unique_ptr<Task> task( 80 std::unique_ptr<Task> task(
151 new RemoveRequestsTask(store_.get(), request_ids, callback)); 81 new RemoveRequestsTask(store_.get(), request_ids, callback));
152 task_queue_.AddTask(std::move(task)); 82 task_queue_.AddTask(std::move(task));
153 } 83 }
154 84
155 void RequestQueue::ChangeRequestsState( 85 void RequestQueue::ChangeRequestsState(
156 const std::vector<int64_t>& request_ids, 86 const std::vector<int64_t>& request_ids,
157 const SavePageRequest::RequestState new_state, 87 const SavePageRequest::RequestState new_state,
(...skipping 10 matching lines...) Expand all
168 task_queue_.AddTask(std::move(task)); 98 task_queue_.AddTask(std::move(task));
169 } 99 }
170 100
171 void RequestQueue::MarkAttemptAborted(int64_t request_id, 101 void RequestQueue::MarkAttemptAborted(int64_t request_id,
172 const UpdateCallback& callback) { 102 const UpdateCallback& callback) {
173 std::unique_ptr<Task> task( 103 std::unique_ptr<Task> task(
174 new MarkAttemptAbortedTask(store_.get(), request_id, callback)); 104 new MarkAttemptAbortedTask(store_.get(), request_id, callback));
175 task_queue_.AddTask(std::move(task)); 105 task_queue_.AddTask(std::move(task));
176 } 106 }
177 107
108 void RequestQueue::MarkAttemptCompleted(int64_t request_id,
109 const UpdateCallback& callback) {
110 std::unique_ptr<Task> task(
111 new MarkAttemptCompletedTask(store_.get(), request_id, callback));
112 task_queue_.AddTask(std::move(task));
113 }
114
178 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {} 115 void RequestQueue::PurgeRequests(const PurgeRequestsCallback& callback) {}
179 116
180 } // namespace offline_pages 117 } // namespace offline_pages
OLDNEW
« no previous file with comments | « components/offline_pages/background/request_queue.h ('k') | components/offline_pages/background/request_queue_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698