| 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 <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 } | 123 } |
| 124 | 124 |
| 125 private: | 125 private: |
| 126 std::unique_ptr<OfflinerStub> offliner_; | 126 std::unique_ptr<OfflinerStub> offliner_; |
| 127 }; | 127 }; |
| 128 | 128 |
| 129 class ObserverStub : public RequestCoordinator::Observer { | 129 class ObserverStub : public RequestCoordinator::Observer { |
| 130 public: | 130 public: |
| 131 ObserverStub() | 131 ObserverStub() |
| 132 : added_called_(false), | 132 : added_called_(false), |
| 133 succeeded_called_(false), | 133 completed_called_(false), |
| 134 failed_called_(false), | |
| 135 changed_called_(false), | 134 changed_called_(false), |
| 136 removed_called_(false), | 135 last_status_(RequestCoordinator::SavePageStatus::SUCCESS), |
| 136 previous_status_(RequestCoordinator::SavePageStatus::SUCCESS), |
| 137 state_(SavePageRequest::RequestState::PRERENDERING) {} | 137 state_(SavePageRequest::RequestState::PRERENDERING) {} |
| 138 | 138 |
| 139 void Clear() { | 139 void Clear() { |
| 140 added_called_ = false; | 140 added_called_ = false; |
| 141 succeeded_called_ = false; | 141 completed_called_ = false; |
| 142 failed_called_ = false; | |
| 143 changed_called_ = false; | 142 changed_called_ = false; |
| 144 removed_called_ = false; | |
| 145 state_ = SavePageRequest::RequestState::PRERENDERING; | 143 state_ = SavePageRequest::RequestState::PRERENDERING; |
| 144 last_status_ = RequestCoordinator::SavePageStatus::SUCCESS; |
| 145 previous_status_ = RequestCoordinator::SavePageStatus::SUCCESS; |
| 146 } | 146 } |
| 147 | 147 |
| 148 void OnAdded(const SavePageRequest& request) override { | 148 void OnAdded(const SavePageRequest& request) override { |
| 149 added_called_ = true; | 149 added_called_ = true; |
| 150 } | 150 } |
| 151 | 151 |
| 152 void OnSucceeded(const SavePageRequest& request) override { | 152 void OnCompleted(const SavePageRequest& request, |
| 153 succeeded_called_ = true; | 153 RequestCoordinator::SavePageStatus status) override { |
| 154 } | 154 completed_called_ = true; |
| 155 | 155 previous_status_ = last_status_; |
| 156 void OnFailed(const SavePageRequest& request, | 156 last_status_ = status; |
| 157 RequestCoordinator::SavePageStatus status) override { | |
| 158 failed_called_ = true; | |
| 159 } | 157 } |
| 160 | 158 |
| 161 void OnChanged(const SavePageRequest& request) override { | 159 void OnChanged(const SavePageRequest& request) override { |
| 162 changed_called_ = true; | 160 changed_called_ = true; |
| 163 state_ = request.request_state(); | 161 state_ = request.request_state(); |
| 164 } | 162 } |
| 165 | 163 |
| 166 void OnRemoved(const SavePageRequest& request, | 164 bool added_called() { return added_called_; } |
| 167 RequestCoordinator::SavePageStatus status) override { | 165 bool completed_called() { return completed_called_; } |
| 168 removed_called_ = true; | 166 bool changed_called() { return changed_called_; } |
| 167 RequestCoordinator::SavePageStatus last_status() { return last_status_; } |
| 168 RequestCoordinator::SavePageStatus previous_status() { |
| 169 return previous_status_; |
| 169 } | 170 } |
| 170 | |
| 171 bool added_called() { return added_called_; } | |
| 172 bool succeeded_called() { return succeeded_called_; } | |
| 173 bool failed_called() { return failed_called_; } | |
| 174 bool changed_called() { return changed_called_; } | |
| 175 bool removed_called() { return removed_called_; } | |
| 176 SavePageRequest::RequestState state() { return state_; } | 171 SavePageRequest::RequestState state() { return state_; } |
| 177 | 172 |
| 178 private: | 173 private: |
| 179 bool added_called_; | 174 bool added_called_; |
| 180 bool succeeded_called_; | 175 bool completed_called_; |
| 181 bool failed_called_; | |
| 182 bool changed_called_; | 176 bool changed_called_; |
| 183 bool removed_called_; | 177 RequestCoordinator::SavePageStatus last_status_; |
| 178 RequestCoordinator::SavePageStatus previous_status_; |
| 184 SavePageRequest::RequestState state_; | 179 SavePageRequest::RequestState state_; |
| 185 }; | 180 }; |
| 186 | 181 |
| 187 class RequestCoordinatorTest | 182 class RequestCoordinatorTest |
| 188 : public testing::Test { | 183 : public testing::Test { |
| 189 public: | 184 public: |
| 190 RequestCoordinatorTest(); | 185 RequestCoordinatorTest(); |
| 191 ~RequestCoordinatorTest() override; | 186 ~RequestCoordinatorTest() override; |
| 192 | 187 |
| 193 void SetUp() override; | 188 void SetUp() override; |
| (...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 // Verify the request gets removed from the queue, and wait for callbacks. | 415 // Verify the request gets removed from the queue, and wait for callbacks. |
| 421 coordinator()->queue()->GetRequests( | 416 coordinator()->queue()->GetRequests( |
| 422 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | 417 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
| 423 base::Unretained(this))); | 418 base::Unretained(this))); |
| 424 PumpLoop(); | 419 PumpLoop(); |
| 425 | 420 |
| 426 // We should not find any requests in the queue anymore. | 421 // We should not find any requests in the queue anymore. |
| 427 // RequestPicker should *not* have tried to start an additional job, | 422 // RequestPicker should *not* have tried to start an additional job, |
| 428 // because the request queue is empty now. | 423 // because the request queue is empty now. |
| 429 EXPECT_EQ(0UL, last_requests().size()); | 424 EXPECT_EQ(0UL, last_requests().size()); |
| 430 // Check that the observer got the notification that we succeeded. | 425 // Check that the observer got the notification that we succeeded, and that |
| 431 EXPECT_TRUE(observer().succeeded_called()); | 426 // the request got removed from the queue. |
| 427 EXPECT_TRUE(observer().completed_called()); |
| 428 EXPECT_EQ(RequestCoordinator::SavePageStatus::SUCCESS, |
| 429 observer().previous_status()); |
| 430 EXPECT_EQ(RequestCoordinator::SavePageStatus::REMOVED, |
| 431 observer().last_status()); |
| 432 } | 432 } |
| 433 | 433 |
| 434 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { | 434 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { |
| 435 // Add a request to the queue, wait for callbacks to finish. | 435 // Add a request to the queue, wait for callbacks to finish. |
| 436 offline_pages::SavePageRequest request( | 436 offline_pages::SavePageRequest request( |
| 437 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); | 437 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
| 438 request.MarkAttemptStarted(base::Time::Now()); | 438 request.MarkAttemptStarted(base::Time::Now()); |
| 439 coordinator()->queue()->AddRequest( | 439 coordinator()->queue()->AddRequest( |
| 440 request, | 440 request, |
| 441 base::Bind(&RequestCoordinatorTest::AddRequestDone, | 441 base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 476 | 476 |
| 477 // Verify neither request is removed from the queue; wait for callbacks. | 477 // Verify neither request is removed from the queue; wait for callbacks. |
| 478 coordinator()->queue()->GetRequests( | 478 coordinator()->queue()->GetRequests( |
| 479 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | 479 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
| 480 base::Unretained(this))); | 480 base::Unretained(this))); |
| 481 PumpLoop(); | 481 PumpLoop(); |
| 482 | 482 |
| 483 // Now just one request in the queue since failed request removed | 483 // Now just one request in the queue since failed request removed |
| 484 // (for single attempt policy). | 484 // (for single attempt policy). |
| 485 EXPECT_EQ(1UL, last_requests().size()); | 485 EXPECT_EQ(1UL, last_requests().size()); |
| 486 // Check that the observer got the notification that we failed | 486 // Check that the observer got the notification that we failed (and the |
| 487 EXPECT_TRUE(observer().failed_called()); | 487 // subsequent notification that the request was removed). |
| 488 EXPECT_TRUE(observer().completed_called()); |
| 489 EXPECT_EQ(RequestCoordinator::SavePageStatus::RETRY_COUNT_EXCEEDED, |
| 490 observer().previous_status()); |
| 491 EXPECT_EQ(RequestCoordinator::SavePageStatus::REMOVED, |
| 492 observer().last_status()); |
| 488 } | 493 } |
| 489 | 494 |
| 490 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { | 495 TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { |
| 491 // Add a request to the queue, wait for callbacks to finish. | 496 // Add a request to the queue, wait for callbacks to finish. |
| 492 offline_pages::SavePageRequest request( | 497 offline_pages::SavePageRequest request( |
| 493 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); | 498 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
| 494 request.MarkAttemptStarted(base::Time::Now()); | 499 request.MarkAttemptStarted(base::Time::Now()); |
| 495 coordinator()->queue()->AddRequest( | 500 coordinator()->queue()->AddRequest( |
| 496 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 501 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 497 base::Unretained(this))); | 502 base::Unretained(this))); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 758 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 763 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 759 base::Unretained(this))); | 764 base::Unretained(this))); |
| 760 PumpLoop(); | 765 PumpLoop(); |
| 761 | 766 |
| 762 // Remove the request. | 767 // Remove the request. |
| 763 std::vector<int64_t> request_ids; | 768 std::vector<int64_t> request_ids; |
| 764 request_ids.push_back(kRequestId1); | 769 request_ids.push_back(kRequestId1); |
| 765 coordinator()->RemoveRequests(request_ids); | 770 coordinator()->RemoveRequests(request_ids); |
| 766 PumpLoop(); | 771 PumpLoop(); |
| 767 | 772 |
| 768 EXPECT_TRUE(observer().removed_called()); | 773 EXPECT_TRUE(observer().completed_called()); |
| 774 EXPECT_EQ(RequestCoordinator::SavePageStatus::REMOVED, |
| 775 observer().last_status()); |
| 769 } | 776 } |
| 770 | 777 |
| 771 } // namespace offline_pages | 778 } // namespace offline_pages |
| OLD | NEW |