Index: components/offline_pages/background/request_coordinator_unittest.cc |
diff --git a/components/offline_pages/background/request_coordinator_unittest.cc b/components/offline_pages/background/request_coordinator_unittest.cc |
index 5cda745cdba60c64157922bbda71cacdae76e413..8f2a405126ad43ee4a6d4ec859ed5200ec989e7f 100644 |
--- a/components/offline_pages/background/request_coordinator_unittest.cc |
+++ b/components/offline_pages/background/request_coordinator_unittest.cc |
@@ -126,6 +126,64 @@ class OfflinerFactoryStub : public OfflinerFactory { |
std::unique_ptr<OfflinerStub> offliner_; |
}; |
+class ObserverStub : public RequestCoordinator::Observer { |
+ public: |
+ ObserverStub() |
+ : added_called_(false), |
+ succeeded_called_(false), |
+ failed_called_(false), |
+ changed_called_(false), |
+ removed_called_(false), |
+ state_(SavePageRequest::RequestState::PRERENDERING) {} |
+ |
+ void Clear() { |
+ added_called_ = false; |
+ succeeded_called_ = false; |
+ failed_called_ = false; |
+ changed_called_ = false; |
+ removed_called_ = false; |
+ state_ = SavePageRequest::RequestState::PRERENDERING; |
+ } |
+ |
+ void OnAdded(const SavePageRequest& request) override { |
+ added_called_ = true; |
+ } |
+ |
+ void OnSucceeded(const SavePageRequest& request) override { |
+ succeeded_called_ = true; |
+ } |
+ |
+ void OnFailed(const SavePageRequest& request, |
+ RequestCoordinator::SavePageStatus status) override { |
+ failed_called_ = true; |
+ } |
+ |
+ void OnChanged(const SavePageRequest& request) override { |
+ changed_called_ = true; |
+ state_ = request.request_state(); |
+ } |
+ |
+ void OnRemoved(const SavePageRequest& request, |
+ RequestCoordinator::SavePageStatus status) override { |
+ removed_called_ = true; |
+ } |
+ |
+ bool added_called() { return added_called_; } |
+ bool succeeded_called() { return succeeded_called_; } |
+ bool failed_called() { return failed_called_; } |
+ bool changed_called() { return changed_called_; } |
+ bool removed_called() { return removed_called_; } |
+ SavePageRequest::RequestState state() { return state_; } |
+ |
+ private: |
+ bool added_called_; |
+ bool succeeded_called_; |
+ bool failed_called_; |
+ bool changed_called_; |
+ bool removed_called_; |
+ SavePageRequest::RequestState state_; |
+}; |
+ |
class RequestCoordinatorTest |
: public testing::Test { |
public: |
@@ -201,6 +259,8 @@ class RequestCoordinatorTest |
bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
+ ObserverStub observer() { return observer_; } |
+ |
private: |
RequestQueue::GetRequestsResult last_get_requests_result_; |
std::vector<SavePageRequest> last_requests_; |
@@ -209,6 +269,7 @@ class RequestCoordinatorTest |
std::unique_ptr<RequestCoordinator> coordinator_; |
OfflinerStub* offliner_; |
base::WaitableEvent waiter_; |
+ ObserverStub observer_; |
}; |
RequestCoordinatorTest::RequestCoordinatorTest() |
@@ -234,6 +295,7 @@ void RequestCoordinatorTest::SetUp() { |
coordinator_.reset(new RequestCoordinator( |
std::move(policy), std::move(factory), std::move(queue), |
std::move(scheduler_stub))); |
+ coordinator_->AddObserver(&observer_); |
} |
void RequestCoordinatorTest::PumpLoop() { |
@@ -321,6 +383,9 @@ TEST_F(RequestCoordinatorTest, SavePageLater) { |
->GetTriggerConditionsForUserRequest() |
.minimum_battery_percentage, |
scheduler_stub->conditions()->minimum_battery_percentage); |
+ |
+ // Check that the observer got the notification that a page is available |
+ EXPECT_TRUE(observer().added_called()); |
} |
TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { |
@@ -362,6 +427,8 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { |
// RequestPicker should *not* have tried to start an additional job, |
// because the request queue is empty now. |
EXPECT_EQ(0UL, last_requests().size()); |
+ // Check that the observer got the notification that we succeeded. |
+ EXPECT_TRUE(observer().succeeded_called()); |
} |
TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { |
@@ -416,6 +483,8 @@ TEST_F(RequestCoordinatorTest, OfflinerDoneRequestFailed) { |
// Now just one request in the queue since failed request removed |
// (for single attempt policy). |
EXPECT_EQ(1UL, last_requests().size()); |
+ // Check that the observer got the notification that we failed |
+ EXPECT_TRUE(observer().failed_called()); |
} |
TEST_F(RequestCoordinatorTest, OfflinerDoneForegroundCancel) { |
@@ -652,4 +721,51 @@ TEST_F(RequestCoordinatorTest, GetAllRequests) { |
EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); |
} |
+TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { |
+ // Add a request to the queue. |
+ offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, |
+ base::Time::Now(), kUserRequested); |
+ coordinator()->queue()->AddRequest( |
+ request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
+ base::Unretained(this))); |
+ PumpLoop(); |
+ |
+ // Pause the request. |
+ std::vector<int64_t> request_ids; |
+ request_ids.push_back(kRequestId1); |
+ coordinator()->PauseRequests(request_ids); |
+ PumpLoop(); |
+ |
+ EXPECT_TRUE(observer().changed_called()); |
+ EXPECT_EQ(SavePageRequest::RequestState::PAUSED, observer().state()); |
+ |
+ // Clear out the observer before the next call. |
+ observer().Clear(); |
+ |
+ // Resume the request. |
+ coordinator()->ResumeRequests(request_ids); |
+ PumpLoop(); |
+ |
+ EXPECT_TRUE(observer().changed_called()); |
+ EXPECT_EQ(SavePageRequest::RequestState::AVAILABLE, observer().state()); |
+} |
+ |
+TEST_F(RequestCoordinatorTest, ObserverdRemoveRequest) { |
+ // Add a request to the queue. |
+ offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, |
+ base::Time::Now(), kUserRequested); |
+ coordinator()->queue()->AddRequest( |
+ request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
+ base::Unretained(this))); |
+ PumpLoop(); |
+ |
+ // Remove the request. |
+ std::vector<int64_t> request_ids; |
+ request_ids.push_back(kRequestId1); |
+ coordinator()->RemoveRequests(request_ids); |
+ PumpLoop(); |
+ |
+ EXPECT_TRUE(observer().removed_called()); |
+} |
+ |
} // namespace offline_pages |