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 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 Loading... |
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) |
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 233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); | 570 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); |
571 } | 571 } |
572 | 572 |
573 void RequestCoordinator::GetOffliner() { | 573 void RequestCoordinator::GetOffliner() { |
574 if (!offliner_) { | 574 if (!offliner_) { |
575 offliner_ = factory_->GetOffliner(policy_.get()); | 575 offliner_ = factory_->GetOffliner(policy_.get()); |
576 } | 576 } |
577 } | 577 } |
578 | 578 |
579 } // namespace offline_pages | 579 } // namespace offline_pages |
OLD | NEW |