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_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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |