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

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

Issue 2262423002: Use a vector of smart pointers for callback return type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: another merge. Created 4 years, 3 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_coordinator.h" 5 #include "components/offline_pages/background/request_coordinator.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 // Get all matching requests from the request queue, send them to our 123 // Get all matching requests from the request queue, send them to our
124 // callback. We bind the namespace and callback to the front of the callback 124 // callback. We bind the namespace and callback to the front of the callback
125 // param set. 125 // param set.
126 queue_->GetRequests(base::Bind(&RequestCoordinator::GetQueuedRequestsCallback, 126 queue_->GetRequests(base::Bind(&RequestCoordinator::GetQueuedRequestsCallback,
127 weak_ptr_factory_.GetWeakPtr(), callback)); 127 weak_ptr_factory_.GetWeakPtr(), callback));
128 } 128 }
129 129
130 void RequestCoordinator::GetQueuedRequestsCallback( 130 void RequestCoordinator::GetQueuedRequestsCallback(
131 const GetRequestsCallback& callback, 131 const GetRequestsCallback& callback,
132 RequestQueue::GetRequestsResult result, 132 RequestQueue::GetRequestsResult result,
133 const std::vector<SavePageRequest>& requests) { 133 std::vector<std::unique_ptr<SavePageRequest>> requests) {
134 callback.Run(requests); 134 callback.Run(std::move(requests));
135 } 135 }
136 136
137 void RequestCoordinator::StopPrerendering() { 137 void RequestCoordinator::StopPrerendering() {
138 if (offliner_ && is_busy_) { 138 if (offliner_ && is_busy_) {
139 DCHECK(active_request_.get()); 139 DCHECK(active_request_.get());
140 offliner_->Cancel(); 140 offliner_->Cancel();
141 AbortRequestAttempt(active_request_.get()); 141 AbortRequestAttempt(active_request_.get());
142 } 142 }
143 143
144 // Stopping offliner means it will not call callback. 144 // Stopping offliner means it will not call callback.
145 last_offlining_status_ = 145 last_offlining_status_ =
146 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED; 146 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED;
147 147
148 if (active_request_) { 148 if (active_request_) {
149 RecordOfflinerResultUMA(active_request_->client_id(), 149 RecordOfflinerResultUMA(active_request_->client_id(),
150 last_offlining_status_); 150 last_offlining_status_);
151 is_busy_ = false; 151 is_busy_ = false;
152 active_request_.reset(); 152 active_request_.reset();
153 } 153 }
154 154
155 } 155 }
156 156
157 void RequestCoordinator::GetRequestsForSchedulingCallback( 157 void RequestCoordinator::GetRequestsForSchedulingCallback(
158 RequestQueue::GetRequestsResult result, 158 RequestQueue::GetRequestsResult result,
159 const std::vector<SavePageRequest>& requests) { 159 std::vector<std::unique_ptr<SavePageRequest>> requests) {
160 bool user_requested = false; 160 bool user_requested = false;
161 161
162 // Examine all requests, if we find a user requested one, we will use the less 162 // Examine all requests, if we find a user requested one, we will use the less
163 // restrictive conditions for user_requested requests. Otherwise we will use 163 // restrictive conditions for user_requested requests. Otherwise we will use
164 // the more restrictive non-user-requested conditions. 164 // the more restrictive non-user-requested conditions.
165 for (const SavePageRequest& request : requests) { 165 for (const auto& request : requests) {
166 if (request.user_requested()) { 166 if (request->user_requested()) {
167 user_requested = true; 167 user_requested = true;
168 break; 168 break;
169 } 169 }
170 } 170 }
171 171
172 // In the get callback, determine the least restrictive, and call 172 // In the get callback, determine the least restrictive, and call
173 // GetTriggerConditions based on that. 173 // GetTriggerConditions based on that.
174 scheduler_->Schedule(GetTriggerConditions(user_requested)); 174 scheduler_->Schedule(GetTriggerConditions(user_requested));
175 } 175 }
176 176
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 if (result != RequestQueue::UpdateRequestResult::SUCCESS) { 277 if (result != RequestQueue::UpdateRequestResult::SUCCESS) {
278 DVLOG(1) << "Failed to update request attempt details. " 278 DVLOG(1) << "Failed to update request attempt details. "
279 << static_cast<int>(result); 279 << static_cast<int>(result);
280 event_logger_.RecordUpdateRequestFailed(client_id.name_space, result); 280 event_logger_.RecordUpdateRequestFailed(client_id.name_space, result);
281 } 281 }
282 } 282 }
283 283
284 // Called in response to updating multiple requests in the request queue. 284 // Called in response to updating multiple requests in the request queue.
285 void RequestCoordinator::UpdateMultipleRequestsCallback( 285 void RequestCoordinator::UpdateMultipleRequestsCallback(
286 const RequestQueue::UpdateMultipleRequestResults& results, 286 const RequestQueue::UpdateMultipleRequestResults& results,
287 const std::vector<SavePageRequest>& requests) { 287 std::vector<std::unique_ptr<SavePageRequest>> requests) {
288 bool available_user_request = false; 288 bool available_user_request = false;
289 for (SavePageRequest request : requests) { 289 for (const auto& request : requests) {
290 NotifyChanged(request); 290 NotifyChanged(*(request));
291 if (!available_user_request && request.user_requested() && 291 if (!available_user_request && request->user_requested() &&
292 request.request_state() == SavePageRequest::RequestState::AVAILABLE) { 292 request->request_state() == SavePageRequest::RequestState::AVAILABLE) {
293 // TODO(dougarnett): Consider avoiding prospect of N^2 in case 293 // TODO(dougarnett): Consider avoiding prospect of N^2 in case
294 // size of bulk requests can get large (perhaps with easier to consume 294 // size of bulk requests can get large (perhaps with easier to consume
295 // callback interface). 295 // callback interface).
296 for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair : 296 for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair :
297 results) { 297 results) {
298 if (pair.first == request.request_id() && 298 if (pair.first == request->request_id() &&
299 pair.second == RequestQueue::UpdateRequestResult::SUCCESS) { 299 pair.second == RequestQueue::UpdateRequestResult::SUCCESS) {
300 // We have a successfully updated, available, user request. 300 // We have a successfully updated, available, user request.
301 available_user_request = true; 301 available_user_request = true;
302 } 302 }
303 } 303 }
304 } 304 }
305 } 305 }
306 306
307 if (available_user_request) 307 if (available_user_request)
308 StartProcessingIfConnected(); 308 StartProcessingIfConnected();
309 } 309 }
310 310
311 void RequestCoordinator::HandleRemovedRequestsAndCallback( 311 void RequestCoordinator::HandleRemovedRequestsAndCallback(
312 const RemoveRequestsCallback& callback, 312 const RemoveRequestsCallback& callback,
313 BackgroundSavePageResult status, 313 BackgroundSavePageResult status,
314 const RequestQueue::UpdateMultipleRequestResults& results, 314 const RequestQueue::UpdateMultipleRequestResults& results,
315 const std::vector<SavePageRequest>& requests) { 315 std::vector<std::unique_ptr<SavePageRequest>> requests) {
316 callback.Run(results); 316 callback.Run(results);
317 HandleRemovedRequests(status, results, requests); 317 HandleRemovedRequests(status, results, std::move(requests));
318 } 318 }
319 319
320 void RequestCoordinator::HandleRemovedRequests( 320 void RequestCoordinator::HandleRemovedRequests(
321 BackgroundSavePageResult status, 321 BackgroundSavePageResult status,
322 const RequestQueue::UpdateMultipleRequestResults& results, 322 const RequestQueue::UpdateMultipleRequestResults& results,
323 const std::vector<SavePageRequest>& requests) { 323 std::vector<std::unique_ptr<SavePageRequest>> requests) {
324 for (SavePageRequest request : requests) 324 std::vector<std::unique_ptr<SavePageRequest>>::iterator request;
325 NotifyCompleted(request, status); 325 for (request = requests.begin(); request != requests.end(); ++request)
Bernhard Bauer 2016/09/07 10:13:41 Why this style of loop?
Pete Williamson 2016/09/07 20:21:01 I was having problems getting the type right for a
326 NotifyCompleted(*(request->get()), status);
326 } 327 }
327 328
328 void RequestCoordinator::ScheduleAsNeeded() { 329 void RequestCoordinator::ScheduleAsNeeded() {
329 // Get all requests from queue (there is no filtering mechanism). 330 // Get all requests from queue (there is no filtering mechanism).
330 queue_->GetRequests( 331 queue_->GetRequests(
331 base::Bind(&RequestCoordinator::GetRequestsForSchedulingCallback, 332 base::Bind(&RequestCoordinator::GetRequestsForSchedulingCallback,
332 weak_ptr_factory_.GetWeakPtr())); 333 weak_ptr_factory_.GetWeakPtr()));
333 } 334 }
334 335
335 void RequestCoordinator::StopProcessing() { 336 void RequestCoordinator::StopProcessing() {
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
562 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); 563 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request));
563 } 564 }
564 565
565 void RequestCoordinator::GetOffliner() { 566 void RequestCoordinator::GetOffliner() {
566 if (!offliner_) { 567 if (!offliner_) {
567 offliner_ = factory_->GetOffliner(policy_.get()); 568 offliner_ = factory_->GetOffliner(policy_.get());
568 } 569 }
569 } 570 }
570 571
571 } // namespace offline_pages 572 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698