| 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 6ef185c7725ccf8ce91868b9521b35a0c1658d61..08485495d63b459a69be12171c1dfae8aa5c3a5a 100644
|
| --- a/components/offline_pages/background/request_coordinator_unittest.cc
|
| +++ b/components/offline_pages/background/request_coordinator_unittest.cc
|
| @@ -126,6 +126,56 @@ 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),
|
| + state_(SavePageRequest::RequestState::PRERENDERING) {}
|
| +
|
| + void Clear() {
|
| + added_called_ = false;
|
| + succeeded_called_ = false;
|
| + failed_called_ = false;
|
| + changed_called_ = false;
|
| + state_ = SavePageRequest::RequestState::PRERENDERING;
|
| + }
|
| +
|
| + void OnAdded(const SavePageRequest& request) override {
|
| + added_called_ = true;
|
| + }
|
| +
|
| + void OnSucceeded(const SavePageRequest& request,
|
| + int64_t offline_id) 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();
|
| + }
|
| +
|
| + bool added_called() { return added_called_; }
|
| + bool succeeded_called() { return succeeded_called_; }
|
| + bool failed_called() { return failed_called_; }
|
| + bool changed_called() { return changed_called_; }
|
| + SavePageRequest::RequestState state() { return state_; }
|
| +
|
| + private:
|
| + bool added_called_;
|
| + bool succeeded_called_;
|
| + bool failed_called_;
|
| + bool changed_called_;
|
| + SavePageRequest::RequestState state_;
|
| +};
|
| +
|
| class RequestCoordinatorTest
|
| : public testing::Test {
|
| public:
|
| @@ -205,6 +255,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_;
|
| @@ -214,6 +266,7 @@ class RequestCoordinatorTest
|
| std::unique_ptr<RequestCoordinator> coordinator_;
|
| OfflinerStub* offliner_;
|
| base::WaitableEvent waiter_;
|
| + ObserverStub observer_;
|
| };
|
|
|
| RequestCoordinatorTest::RequestCoordinatorTest()
|
| @@ -239,6 +292,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() {
|
| @@ -326,6 +380,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) {
|
| @@ -367,6 +424,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) {
|
| @@ -421,6 +480,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) {
|
| @@ -659,4 +720,33 @@ TEST_F(RequestCoordinatorTest, GetQueuedRequests) {
|
| EXPECT_EQ(kId2, last_client_ids().at(1).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());
|
| +}
|
| +
|
| } // namespace offline_pages
|
|
|