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 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 } | 106 } |
107 | 107 |
108 void RequestCoordinator::GetQueuedRequestsCallback( | 108 void RequestCoordinator::GetQueuedRequestsCallback( |
109 const GetRequestsCallback& callback, | 109 const GetRequestsCallback& callback, |
110 RequestQueue::GetRequestsResult result, | 110 RequestQueue::GetRequestsResult result, |
111 const std::vector<SavePageRequest>& requests) { | 111 const std::vector<SavePageRequest>& requests) { |
112 callback.Run(requests); | 112 callback.Run(requests); |
113 } | 113 } |
114 | 114 |
115 void RequestCoordinator::RemoveRequests( | 115 void RequestCoordinator::RemoveRequests( |
116 const std::vector<int64_t>& request_ids) { | 116 const std::vector<int64_t>& request_ids, |
117 queue_->RemoveRequests(request_ids, | 117 const RemoveRequestsCallback& callback) { |
118 base::Bind(&RequestCoordinator::RemoveRequestsCallback, | 118 queue_->RemoveRequests( |
119 weak_ptr_factory_.GetWeakPtr())); | 119 request_ids, |
120 base::Bind(&RequestCoordinator::HandleRemovedRequestsAndCallback, | |
121 weak_ptr_factory_.GetWeakPtr(), callback)); | |
120 } | 122 } |
121 | 123 |
122 void RequestCoordinator::PauseRequests( | 124 void RequestCoordinator::PauseRequests( |
123 const std::vector<int64_t>& request_ids) { | 125 const std::vector<int64_t>& request_ids) { |
124 queue_->ChangeRequestsState( | 126 queue_->ChangeRequestsState( |
125 request_ids, SavePageRequest::RequestState::PAUSED, | 127 request_ids, SavePageRequest::RequestState::PAUSED, |
126 base::Bind(&RequestCoordinator::UpdateMultipleRequestsCallback, | 128 base::Bind(&RequestCoordinator::UpdateMultipleRequestsCallback, |
127 weak_ptr_factory_.GetWeakPtr())); | 129 weak_ptr_factory_.GetWeakPtr())); |
128 } | 130 } |
129 | 131 |
(...skipping 27 matching lines...) Expand all Loading... | |
157 } | 159 } |
158 | 160 |
159 // Called in response to updating multiple requests in the request queue. | 161 // Called in response to updating multiple requests in the request queue. |
160 void RequestCoordinator::UpdateMultipleRequestsCallback( | 162 void RequestCoordinator::UpdateMultipleRequestsCallback( |
161 const RequestQueue::UpdateMultipleRequestResults& results, | 163 const RequestQueue::UpdateMultipleRequestResults& results, |
162 const std::vector<SavePageRequest>& requests) { | 164 const std::vector<SavePageRequest>& requests) { |
163 for (SavePageRequest request : requests) | 165 for (SavePageRequest request : requests) |
164 NotifyChanged(request); | 166 NotifyChanged(request); |
165 } | 167 } |
166 | 168 |
167 void RequestCoordinator::RemoveRequestsCallback( | 169 void RequestCoordinator::HandleRemovedRequestsAndCallback( |
170 const RemoveRequestsCallback& callback, | |
171 const RequestQueue::UpdateMultipleRequestResults& results, | |
172 const std::vector<SavePageRequest>& requests) { | |
173 HandleRemovedRequests(results, requests); | |
fgorski
2016/08/19 21:51:19
3 things that I am not comfortable here:
1. result
dewittj
2016/08/19 21:56:37
I agree this is concerning; I don't think it's a t
dewittj
2016/08/20 03:22:35
I solved this for my API; However the request coor
| |
174 callback.Run(requests); | |
175 } | |
176 | |
177 void RequestCoordinator::HandleRemovedRequests( | |
168 const RequestQueue::UpdateMultipleRequestResults& results, | 178 const RequestQueue::UpdateMultipleRequestResults& results, |
169 const std::vector<SavePageRequest>& requests) { | 179 const std::vector<SavePageRequest>& requests) { |
170 for (SavePageRequest request : requests) | 180 for (SavePageRequest request : requests) |
171 NotifyCompleted(request, SavePageStatus::REMOVED); | 181 NotifyCompleted(request, SavePageStatus::REMOVED); |
172 } | 182 } |
173 | 183 |
174 void RequestCoordinator::StopProcessing() { | 184 void RequestCoordinator::StopProcessing() { |
175 is_canceled_ = true; | 185 is_canceled_ = true; |
176 if (offliner_ && is_busy_) { | 186 if (offliner_ && is_busy_) { |
177 // TODO(dougarnett): Find current request and mark attempt aborted. | 187 // TODO(dougarnett): Find current request and mark attempt aborted. |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
316 base::Bind(&RequestCoordinator::UpdateRequestCallback, | 326 base::Bind(&RequestCoordinator::UpdateRequestCallback, |
317 weak_ptr_factory_.GetWeakPtr(), | 327 weak_ptr_factory_.GetWeakPtr(), |
318 updated_request.client_id())); | 328 updated_request.client_id())); |
319 NotifyCompleted(updated_request, SavePageStatus::FOREGROUND_CANCELED); | 329 NotifyCompleted(updated_request, SavePageStatus::FOREGROUND_CANCELED); |
320 | 330 |
321 } else if (status == Offliner::RequestStatus::SAVED) { | 331 } else if (status == Offliner::RequestStatus::SAVED) { |
322 // Remove the request from the queue if it succeeded. | 332 // Remove the request from the queue if it succeeded. |
323 std::vector<int64_t> remove_requests; | 333 std::vector<int64_t> remove_requests; |
324 remove_requests.push_back(request.request_id()); | 334 remove_requests.push_back(request.request_id()); |
325 queue_->RemoveRequests( | 335 queue_->RemoveRequests( |
326 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, | 336 remove_requests, base::Bind(&RequestCoordinator::HandleRemovedRequests, |
327 weak_ptr_factory_.GetWeakPtr())); | 337 weak_ptr_factory_.GetWeakPtr())); |
328 NotifyCompleted(request, SavePageStatus::SUCCESS); | 338 NotifyCompleted(request, SavePageStatus::SUCCESS); |
329 } else if (request.completed_attempt_count() + 1 >= | 339 } else if (request.completed_attempt_count() + 1 >= |
330 policy_->GetMaxCompletedTries()) { | 340 policy_->GetMaxCompletedTries()) { |
331 // Remove from the request queue if we exceeeded max retries. The +1 | 341 // Remove from the request queue if we exceeeded max retries. The +1 |
332 // represents the request that just completed. Since we call | 342 // represents the request that just completed. Since we call |
333 // MarkAttemptCompleted within the if branches, the completed_attempt_count | 343 // MarkAttemptCompleted within the if branches, the completed_attempt_count |
334 // has not yet been updated when we are checking the if condition. | 344 // has not yet been updated when we are checking the if condition. |
335 std::vector<int64_t> remove_requests; | 345 std::vector<int64_t> remove_requests; |
336 remove_requests.push_back(request.request_id()); | 346 remove_requests.push_back(request.request_id()); |
337 queue_->RemoveRequests( | 347 queue_->RemoveRequests( |
338 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, | 348 remove_requests, base::Bind(&RequestCoordinator::HandleRemovedRequests, |
339 weak_ptr_factory_.GetWeakPtr())); | 349 weak_ptr_factory_.GetWeakPtr())); |
340 NotifyCompleted(request, SavePageStatus::RETRY_COUNT_EXCEEDED); | 350 NotifyCompleted(request, SavePageStatus::RETRY_COUNT_EXCEEDED); |
341 } else { | 351 } else { |
342 // If we failed, but are not over the limit, update the request in the | 352 // If we failed, but are not over the limit, update the request in the |
343 // queue. | 353 // queue. |
344 SavePageRequest updated_request(request); | 354 SavePageRequest updated_request(request); |
345 updated_request.MarkAttemptCompleted(); | 355 updated_request.MarkAttemptCompleted(); |
346 queue_->UpdateRequest(updated_request, | 356 queue_->UpdateRequest(updated_request, |
347 base::Bind(&RequestCoordinator::UpdateRequestCallback, | 357 base::Bind(&RequestCoordinator::UpdateRequestCallback, |
348 weak_ptr_factory_.GetWeakPtr(), | 358 weak_ptr_factory_.GetWeakPtr(), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
405 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); | 415 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); |
406 } | 416 } |
407 | 417 |
408 void RequestCoordinator::GetOffliner() { | 418 void RequestCoordinator::GetOffliner() { |
409 if (!offliner_) { | 419 if (!offliner_) { |
410 offliner_ = factory_->GetOffliner(policy_.get()); | 420 offliner_ = factory_->GetOffliner(policy_.get()); |
411 } | 421 } |
412 } | 422 } |
413 | 423 |
414 } // namespace offline_pages | 424 } // namespace offline_pages |
OLD | NEW |