| 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 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 157 const RequestQueue::UpdateMultipleRequestResults& results, | 157 const RequestQueue::UpdateMultipleRequestResults& results, |
| 158 const std::vector<SavePageRequest>& requests) { | 158 const std::vector<SavePageRequest>& requests) { |
| 159 for (SavePageRequest request : requests) | 159 for (SavePageRequest request : requests) |
| 160 NotifyChanged(request); | 160 NotifyChanged(request); |
| 161 } | 161 } |
| 162 | 162 |
| 163 void RequestCoordinator::RemoveRequestsCallback( | 163 void RequestCoordinator::RemoveRequestsCallback( |
| 164 const RequestQueue::UpdateMultipleRequestResults& results, | 164 const RequestQueue::UpdateMultipleRequestResults& results, |
| 165 const std::vector<SavePageRequest>& requests) { | 165 const std::vector<SavePageRequest>& requests) { |
| 166 for (SavePageRequest request : requests) | 166 for (SavePageRequest request : requests) |
| 167 NotifyRemoved(request); | 167 NotifyCompleted(request, SavePageStatus::REMOVED); |
| 168 } | 168 } |
| 169 | 169 |
| 170 void RequestCoordinator::StopProcessing() { | 170 void RequestCoordinator::StopProcessing() { |
| 171 is_canceled_ = true; | 171 is_canceled_ = true; |
| 172 if (offliner_ && is_busy_) { | 172 if (offliner_ && is_busy_) { |
| 173 // TODO(dougarnett): Find current request and mark attempt aborted. | 173 // TODO(dougarnett): Find current request and mark attempt aborted. |
| 174 offliner_->Cancel(); | 174 offliner_->Cancel(); |
| 175 } | 175 } |
| 176 | 176 |
| 177 // Stopping offliner means it will not call callback. | 177 // Stopping offliner means it will not call callback. |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 if (status == Offliner::RequestStatus::FOREGROUND_CANCELED) { | 305 if (status == Offliner::RequestStatus::FOREGROUND_CANCELED) { |
| 306 // Update the request for the canceled attempt. | 306 // Update the request for the canceled attempt. |
| 307 // TODO(dougarnett): See if we can conclusively identify other attempt | 307 // TODO(dougarnett): See if we can conclusively identify other attempt |
| 308 // aborted cases to treat this way (eg, for Render Process Killed). | 308 // aborted cases to treat this way (eg, for Render Process Killed). |
| 309 SavePageRequest updated_request(request); | 309 SavePageRequest updated_request(request); |
| 310 updated_request.MarkAttemptAborted(); | 310 updated_request.MarkAttemptAborted(); |
| 311 queue_->UpdateRequest(updated_request, | 311 queue_->UpdateRequest(updated_request, |
| 312 base::Bind(&RequestCoordinator::UpdateRequestCallback, | 312 base::Bind(&RequestCoordinator::UpdateRequestCallback, |
| 313 weak_ptr_factory_.GetWeakPtr(), | 313 weak_ptr_factory_.GetWeakPtr(), |
| 314 updated_request.client_id())); | 314 updated_request.client_id())); |
| 315 NotifyFailed(updated_request, SavePageStatus::FOREGROUND_CANCELED); | 315 NotifyCompleted(updated_request, SavePageStatus::FOREGROUND_CANCELED); |
| 316 | 316 |
| 317 } else if (status == Offliner::RequestStatus::SAVED) { | 317 } else if (status == Offliner::RequestStatus::SAVED) { |
| 318 // Remove the request from the queue if it succeeded. | 318 // Remove the request from the queue if it succeeded. |
| 319 std::vector<int64_t> remove_requests; | 319 std::vector<int64_t> remove_requests; |
| 320 remove_requests.push_back(request.request_id()); | 320 remove_requests.push_back(request.request_id()); |
| 321 queue_->RemoveRequests( | 321 queue_->RemoveRequests( |
| 322 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, | 322 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, |
| 323 weak_ptr_factory_.GetWeakPtr())); | 323 weak_ptr_factory_.GetWeakPtr())); |
| 324 NotifySucceeded(request); | 324 NotifyCompleted(request, SavePageStatus::SUCCESS); |
| 325 } else if (request.completed_attempt_count() + 1 >= | 325 } else if (request.completed_attempt_count() + 1 >= |
| 326 policy_->GetMaxCompletedTries()) { | 326 policy_->GetMaxCompletedTries()) { |
| 327 // Remove from the request queue if we exceeeded max retries. The +1 | 327 // Remove from the request queue if we exceeeded max retries. The +1 |
| 328 // represents the request that just completed. Since we call | 328 // represents the request that just completed. Since we call |
| 329 // MarkAttemptCompleted within the if branches, the completed_attempt_count | 329 // MarkAttemptCompleted within the if branches, the completed_attempt_count |
| 330 // has not yet been updated when we are checking the if condition. | 330 // has not yet been updated when we are checking the if condition. |
| 331 std::vector<int64_t> remove_requests; | 331 std::vector<int64_t> remove_requests; |
| 332 remove_requests.push_back(request.request_id()); | 332 remove_requests.push_back(request.request_id()); |
| 333 queue_->RemoveRequests( | 333 queue_->RemoveRequests( |
| 334 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, | 334 remove_requests, base::Bind(&RequestCoordinator::RemoveRequestsCallback, |
| 335 weak_ptr_factory_.GetWeakPtr())); | 335 weak_ptr_factory_.GetWeakPtr())); |
| 336 NotifyFailed(request, SavePageStatus::RETRY_COUNT_EXCEEDED); | 336 NotifyCompleted(request, SavePageStatus::RETRY_COUNT_EXCEEDED); |
| 337 } else { | 337 } else { |
| 338 // If we failed, but are not over the limit, update the request in the | 338 // If we failed, but are not over the limit, update the request in the |
| 339 // queue. | 339 // queue. |
| 340 SavePageRequest updated_request(request); | 340 SavePageRequest updated_request(request); |
| 341 updated_request.MarkAttemptCompleted(); | 341 updated_request.MarkAttemptCompleted(); |
| 342 queue_->UpdateRequest(updated_request, | 342 queue_->UpdateRequest(updated_request, |
| 343 base::Bind(&RequestCoordinator::UpdateRequestCallback, | 343 base::Bind(&RequestCoordinator::UpdateRequestCallback, |
| 344 weak_ptr_factory_.GetWeakPtr(), | 344 weak_ptr_factory_.GetWeakPtr(), |
| 345 updated_request.client_id())); | 345 updated_request.client_id())); |
| 346 NotifyChanged(updated_request); | 346 NotifyChanged(updated_request); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 } | 385 } |
| 386 | 386 |
| 387 void RequestCoordinator::RemoveObserver(Observer* observer) { | 387 void RequestCoordinator::RemoveObserver(Observer* observer) { |
| 388 observers_.RemoveObserver(observer); | 388 observers_.RemoveObserver(observer); |
| 389 } | 389 } |
| 390 | 390 |
| 391 void RequestCoordinator::NotifyAdded(const SavePageRequest& request) { | 391 void RequestCoordinator::NotifyAdded(const SavePageRequest& request) { |
| 392 FOR_EACH_OBSERVER(Observer, observers_, OnAdded(request)); | 392 FOR_EACH_OBSERVER(Observer, observers_, OnAdded(request)); |
| 393 } | 393 } |
| 394 | 394 |
| 395 void RequestCoordinator::NotifySucceeded(const SavePageRequest& request) { | 395 void RequestCoordinator::NotifyCompleted(const SavePageRequest& request, |
| 396 FOR_EACH_OBSERVER(Observer, observers_, OnSucceeded(request)); | 396 SavePageStatus status) { |
| 397 } | 397 FOR_EACH_OBSERVER(Observer, observers_, OnCompleted(request, status)); |
| 398 | |
| 399 void RequestCoordinator::NotifyFailed(const SavePageRequest& request, | |
| 400 SavePageStatus status) { | |
| 401 FOR_EACH_OBSERVER(Observer, observers_, OnFailed(request, status)); | |
| 402 } | 398 } |
| 403 | 399 |
| 404 void RequestCoordinator::NotifyChanged(const SavePageRequest& request) { | 400 void RequestCoordinator::NotifyChanged(const SavePageRequest& request) { |
| 405 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); | 401 FOR_EACH_OBSERVER(Observer, observers_, OnChanged(request)); |
| 406 } | 402 } |
| 407 | 403 |
| 408 void RequestCoordinator::NotifyRemoved(const SavePageRequest& request) { | |
| 409 FOR_EACH_OBSERVER(Observer, observers_, | |
| 410 OnRemoved(request, SavePageStatus::REMOVED_BY_CLIENT)); | |
| 411 } | |
| 412 | |
| 413 void RequestCoordinator::GetOffliner() { | 404 void RequestCoordinator::GetOffliner() { |
| 414 if (!offliner_) { | 405 if (!offliner_) { |
| 415 offliner_ = factory_->GetOffliner(policy_.get()); | 406 offliner_ = factory_->GetOffliner(policy_.get()); |
| 416 } | 407 } |
| 417 } | 408 } |
| 418 | 409 |
| 419 } // namespace offline_pages | 410 } // namespace offline_pages |
| OLD | NEW |