Chromium Code Reviews| 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 |