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

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: CR feedback per BauerB 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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 // Get all matching requests from the request queue, send them to our 124 // Get all matching requests from the request queue, send them to our
125 // callback. We bind the namespace and callback to the front of the callback 125 // callback. We bind the namespace and callback to the front of the callback
126 // param set. 126 // param set.
127 queue_->GetRequests(base::Bind(&RequestCoordinator::GetQueuedRequestsCallback, 127 queue_->GetRequests(base::Bind(&RequestCoordinator::GetQueuedRequestsCallback,
128 weak_ptr_factory_.GetWeakPtr(), callback)); 128 weak_ptr_factory_.GetWeakPtr(), callback));
129 } 129 }
130 130
131 void RequestCoordinator::GetQueuedRequestsCallback( 131 void RequestCoordinator::GetQueuedRequestsCallback(
132 const GetRequestsCallback& callback, 132 const GetRequestsCallback& callback,
133 RequestQueue::GetRequestsResult result, 133 RequestQueue::GetRequestsResult result,
134 const std::vector<SavePageRequest>& requests) { 134 std::vector<std::unique_ptr<SavePageRequest>> requests) {
135 callback.Run(requests); 135 callback.Run(std::move(requests));
136 } 136 }
137 137
138 void RequestCoordinator::StopPrerendering() { 138 void RequestCoordinator::StopPrerendering() {
139 if (offliner_ && is_busy_) { 139 if (offliner_ && is_busy_) {
140 DCHECK(active_request_.get()); 140 DCHECK(active_request_.get());
141 offliner_->Cancel(); 141 offliner_->Cancel();
142 AbortRequestAttempt(active_request_.get()); 142 AbortRequestAttempt(active_request_.get());
143 } 143 }
144 144
145 // Stopping offliner means it will not call callback. 145 // Stopping offliner means it will not call callback.
146 last_offlining_status_ = 146 last_offlining_status_ =
147 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED; 147 Offliner::RequestStatus::REQUEST_COORDINATOR_CANCELED;
148 148
149 if (active_request_) { 149 if (active_request_) {
150 RecordOfflinerResultUMA(active_request_->client_id(), 150 RecordOfflinerResultUMA(active_request_->client_id(),
151 last_offlining_status_); 151 last_offlining_status_);
152 is_busy_ = false; 152 is_busy_ = false;
153 active_request_.reset(); 153 active_request_.reset();
154 } 154 }
155 155
156 } 156 }
157 157
158 void RequestCoordinator::GetRequestsForSchedulingCallback( 158 void RequestCoordinator::GetRequestsForSchedulingCallback(
159 RequestQueue::GetRequestsResult result, 159 RequestQueue::GetRequestsResult result,
160 const std::vector<SavePageRequest>& requests) { 160 std::vector<std::unique_ptr<SavePageRequest>> requests) {
161 bool user_requested = false; 161 bool user_requested = false;
162 162
163 // Examine all requests, if we find a user requested one, we will use the less 163 // Examine all requests, if we find a user requested one, we will use the less
164 // restrictive conditions for user_requested requests. Otherwise we will use 164 // restrictive conditions for user_requested requests. Otherwise we will use
165 // the more restrictive non-user-requested conditions. 165 // the more restrictive non-user-requested conditions.
166 for (const SavePageRequest& request : requests) { 166 for (const auto& request : requests) {
167 if (request.user_requested()) { 167 if (request->user_requested()) {
168 user_requested = true; 168 user_requested = true;
169 break; 169 break;
170 } 170 }
171 } 171 }
172 172
173 // In the get callback, determine the least restrictive, and call 173 // In the get callback, determine the least restrictive, and call
174 // GetTriggerConditions based on that. 174 // GetTriggerConditions based on that.
175 scheduler_->Schedule(GetTriggerConditions(user_requested)); 175 scheduler_->Schedule(GetTriggerConditions(user_requested));
176 } 176 }
177 177
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 if (result != RequestQueue::UpdateRequestResult::SUCCESS) { 278 if (result != RequestQueue::UpdateRequestResult::SUCCESS) {
279 DVLOG(1) << "Failed to update request attempt details. " 279 DVLOG(1) << "Failed to update request attempt details. "
280 << static_cast<int>(result); 280 << static_cast<int>(result);
281 event_logger_.RecordUpdateRequestFailed(client_id.name_space, result); 281 event_logger_.RecordUpdateRequestFailed(client_id.name_space, result);
282 } 282 }
283 } 283 }
284 284
285 // Called in response to updating multiple requests in the request queue. 285 // Called in response to updating multiple requests in the request queue.
286 void RequestCoordinator::UpdateMultipleRequestsCallback( 286 void RequestCoordinator::UpdateMultipleRequestsCallback(
287 const RequestQueue::UpdateMultipleRequestResults& results, 287 const RequestQueue::UpdateMultipleRequestResults& results,
288 const std::vector<SavePageRequest>& requests) { 288 std::vector<std::unique_ptr<SavePageRequest>> requests) {
289 bool available_user_request = false; 289 bool available_user_request = false;
290 for (SavePageRequest request : requests) { 290 for (const auto& request : requests) {
291 NotifyChanged(request); 291 NotifyChanged(*(request));
292 if (!available_user_request && request.user_requested() && 292 if (!available_user_request && request->user_requested() &&
293 request.request_state() == SavePageRequest::RequestState::AVAILABLE) { 293 request->request_state() == SavePageRequest::RequestState::AVAILABLE) {
294 // TODO(dougarnett): Consider avoiding prospect of N^2 in case 294 // TODO(dougarnett): Consider avoiding prospect of N^2 in case
295 // size of bulk requests can get large (perhaps with easier to consume 295 // size of bulk requests can get large (perhaps with easier to consume
296 // callback interface). 296 // callback interface).
297 for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair : 297 for (std::pair<int64_t, RequestQueue::UpdateRequestResult> pair :
298 results) { 298 results) {
299 if (pair.first == request.request_id() && 299 if (pair.first == request->request_id() &&
300 pair.second == RequestQueue::UpdateRequestResult::SUCCESS) { 300 pair.second == RequestQueue::UpdateRequestResult::SUCCESS) {
301 // We have a successfully updated, available, user request. 301 // We have a successfully updated, available, user request.
302 available_user_request = true; 302 available_user_request = true;
303 } 303 }
304 } 304 }
305 } 305 }
306 } 306 }
307 307
308 if (available_user_request) 308 if (available_user_request)
309 StartProcessingIfConnected(); 309 StartProcessingIfConnected();
310 } 310 }
311 311
312 void RequestCoordinator::HandleRemovedRequestsAndCallback( 312 void RequestCoordinator::HandleRemovedRequestsAndCallback(
313 const RemoveRequestsCallback& callback, 313 const RemoveRequestsCallback& callback,
314 BackgroundSavePageResult status, 314 BackgroundSavePageResult status,
315 const RequestQueue::UpdateMultipleRequestResults& results, 315 const RequestQueue::UpdateMultipleRequestResults& results,
316 const std::vector<SavePageRequest>& requests) { 316 std::vector<std::unique_ptr<SavePageRequest>> requests) {
317 callback.Run(results); 317 callback.Run(results);
318 HandleRemovedRequests(status, results, requests); 318 HandleRemovedRequests(status, results, std::move(requests));
319 } 319 }
320 320
321 void RequestCoordinator::HandleRemovedRequests( 321 void RequestCoordinator::HandleRemovedRequests(
322 BackgroundSavePageResult status, 322 BackgroundSavePageResult status,
323 const RequestQueue::UpdateMultipleRequestResults& results, 323 const RequestQueue::UpdateMultipleRequestResults& results,
324 const std::vector<SavePageRequest>& requests) { 324 std::vector<std::unique_ptr<SavePageRequest>> requests) {
325 for (SavePageRequest request : requests) 325 for (const auto & request : requests)
Bernhard Bauer 2016/09/08 09:01:57 No space before &.
Pete Williamson 2016/09/08 17:27:00 Done.
326 NotifyCompleted(request, status); 326 NotifyCompleted(*request, status);
327 } 327 }
328 328
329 void RequestCoordinator::ScheduleAsNeeded() { 329 void RequestCoordinator::ScheduleAsNeeded() {
330 // Get all requests from queue (there is no filtering mechanism). 330 // Get all requests from queue (there is no filtering mechanism).
331 queue_->GetRequests( 331 queue_->GetRequests(
332 base::Bind(&RequestCoordinator::GetRequestsForSchedulingCallback, 332 base::Bind(&RequestCoordinator::GetRequestsForSchedulingCallback,
333 weak_ptr_factory_.GetWeakPtr())); 333 weak_ptr_factory_.GetWeakPtr()));
334 } 334 }
335 335
336 void RequestCoordinator::StopProcessing() { 336 void RequestCoordinator::StopProcessing() {
(...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); 574 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request));
575 } 575 }
576 576
577 void RequestCoordinator::GetOffliner() { 577 void RequestCoordinator::GetOffliner() {
578 if (!offliner_) { 578 if (!offliner_) {
579 offliner_ = factory_->GetOffliner(policy_.get()); 579 offliner_ = factory_->GetOffliner(policy_.get());
580 } 580 }
581 } 581 }
582 582
583 } // namespace offline_pages 583 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698