| 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 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/test/test_simple_task_runner.h" | 13 #include "base/test/test_simple_task_runner.h" |
| 14 #include "base/threading/thread_task_runner_handle.h" | 14 #include "base/threading/thread_task_runner_handle.h" |
| 15 #include "components/offline_pages/background/offliner.h" | 15 #include "components/offline_pages/background/offliner.h" |
| 16 #include "components/offline_pages/background/offliner_factory.h" | 16 #include "components/offline_pages/background/offliner_factory.h" |
| 17 #include "components/offline_pages/background/offliner_policy.h" | 17 #include "components/offline_pages/background/offliner_policy.h" |
| 18 #include "components/offline_pages/background/request_queue.h" | 18 #include "components/offline_pages/background/request_queue.h" |
| 19 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 19 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 20 #include "components/offline_pages/background/save_page_request.h" | 20 #include "components/offline_pages/background/save_page_request.h" |
| 21 #include "components/offline_pages/background/scheduler.h" | 21 #include "components/offline_pages/background/scheduler.h" |
| 22 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 23 | 23 |
| 24 namespace offline_pages { | 24 namespace offline_pages { |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 // put test constants here | 27 // put test constants here |
| 28 const GURL kUrl("http://universe.com/everything"); | 28 const GURL kUrl("http://universe.com/everything"); |
| 29 const ClientId kClientId("bookmark", "42"); | 29 const ClientId kClientId("bookmark", "42"); |
| 30 const int kRequestId(1); |
| 30 } // namespace | 31 } // namespace |
| 31 | 32 |
| 32 class SchedulerStub : public Scheduler { | 33 class SchedulerStub : public Scheduler { |
| 33 public: | 34 public: |
| 34 SchedulerStub() : schedule_called_(false), unschedule_called_(false) {} | 35 SchedulerStub() : schedule_called_(false), unschedule_called_(false) {} |
| 35 | 36 |
| 36 void Schedule(const TriggerCondition& trigger_condition) override { | 37 void Schedule(const TriggerCondition& trigger_condition) override { |
| 37 schedule_called_ = true; | 38 schedule_called_ = true; |
| 38 } | 39 } |
| 39 | 40 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 void PumpLoop(); | 88 void PumpLoop(); |
| 88 | 89 |
| 89 RequestCoordinator* coordinator() { | 90 RequestCoordinator* coordinator() { |
| 90 return coordinator_.get(); | 91 return coordinator_.get(); |
| 91 } | 92 } |
| 92 | 93 |
| 93 // Empty callback function | 94 // Empty callback function |
| 94 void EmptyCallbackFunction(bool result) { | 95 void EmptyCallbackFunction(bool result) { |
| 95 } | 96 } |
| 96 | 97 |
| 98 // Callback for Add requests |
| 99 void AddRequestDone(RequestQueue::AddRequestResult result, |
| 100 const SavePageRequest& request); |
| 101 |
| 97 // Callback for getting requests. | 102 // Callback for getting requests. |
| 98 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 103 void GetRequestsDone(RequestQueue::GetRequestsResult result, |
| 99 const std::vector<SavePageRequest>& requests); | 104 const std::vector<SavePageRequest>& requests); |
| 100 | 105 |
| 101 RequestQueue::GetRequestsResult last_get_requests_result() const { | 106 RequestQueue::GetRequestsResult last_get_requests_result() const { |
| 102 return last_get_requests_result_; | 107 return last_get_requests_result_; |
| 103 } | 108 } |
| 104 | 109 |
| 105 const std::vector<SavePageRequest>& last_requests() const { | 110 const std::vector<SavePageRequest>& last_requests() const { |
| 106 return last_requests_; | 111 return last_requests_; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 137 task_runner_->RunUntilIdle(); | 142 task_runner_->RunUntilIdle(); |
| 138 } | 143 } |
| 139 | 144 |
| 140 void RequestCoordinatorTest::GetRequestsDone( | 145 void RequestCoordinatorTest::GetRequestsDone( |
| 141 RequestQueue::GetRequestsResult result, | 146 RequestQueue::GetRequestsResult result, |
| 142 const std::vector<SavePageRequest>& requests) { | 147 const std::vector<SavePageRequest>& requests) { |
| 143 last_get_requests_result_ = result; | 148 last_get_requests_result_ = result; |
| 144 last_requests_ = requests; | 149 last_requests_ = requests; |
| 145 } | 150 } |
| 146 | 151 |
| 152 |
| 153 void RequestCoordinatorTest::AddRequestDone( |
| 154 RequestQueue::AddRequestResult result, |
| 155 const SavePageRequest& request) {} |
| 156 |
| 157 |
| 147 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) { | 158 TEST_F(RequestCoordinatorTest, StartProcessingWithNoRequests) { |
| 148 base::Callback<void(bool)> callback = | 159 base::Callback<void(bool)> callback = |
| 149 base::Bind( | 160 base::Bind( |
| 150 &RequestCoordinatorTest::EmptyCallbackFunction, | 161 &RequestCoordinatorTest::EmptyCallbackFunction, |
| 151 base::Unretained(this)); | 162 base::Unretained(this)); |
| 152 EXPECT_FALSE(coordinator()->StartProcessing(callback)); | 163 EXPECT_FALSE(coordinator()->StartProcessing(callback)); |
| 153 } | 164 } |
| 154 | 165 |
| 155 TEST_F(RequestCoordinatorTest, SavePageLater) { | 166 TEST_F(RequestCoordinatorTest, SavePageLater) { |
| 156 EXPECT_TRUE(coordinator()->SavePageLater(kUrl, kClientId)); | 167 EXPECT_TRUE(coordinator()->SavePageLater(kUrl, kClientId)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 167 EXPECT_EQ(1UL, last_requests().size()); | 178 EXPECT_EQ(1UL, last_requests().size()); |
| 168 EXPECT_EQ(kUrl, last_requests()[0].url()); | 179 EXPECT_EQ(kUrl, last_requests()[0].url()); |
| 169 EXPECT_EQ(kClientId, last_requests()[0].client_id()); | 180 EXPECT_EQ(kClientId, last_requests()[0].client_id()); |
| 170 | 181 |
| 171 // Expect that the scheduler got notified. | 182 // Expect that the scheduler got notified. |
| 172 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( | 183 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( |
| 173 coordinator()->scheduler()); | 184 coordinator()->scheduler()); |
| 174 EXPECT_TRUE(scheduler_stub->schedule_called()); | 185 EXPECT_TRUE(scheduler_stub->schedule_called()); |
| 175 } | 186 } |
| 176 | 187 |
| 188 TEST_F(RequestCoordinatorTest, OfflinerDone) { |
| 189 |
| 190 // Add a request to the queue, wait for callbacks to finish. |
| 191 offline_pages::SavePageRequest request( |
| 192 kRequestId, kUrl, kClientId, base::Time::Now()); |
| 193 coordinator()->queue()->AddRequest( |
| 194 request, |
| 195 base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 196 base::Unretained(this))); |
| 197 PumpLoop(); |
| 198 |
| 199 // We need to give a callback to the request. |
| 200 base::Callback<void(bool)> callback = |
| 201 base::Bind( |
| 202 &RequestCoordinatorTest::EmptyCallbackFunction, |
| 203 base::Unretained(this)); |
| 204 coordinator()->SetProcessingCallbackForTest(callback); |
| 205 |
| 206 // Call the OfflinerDoneCallback to simulate the page being completed, wait |
| 207 // for callbacks. |
| 208 coordinator()->OfflinerDoneCallback(request, Offliner::RequestStatus::SAVED); |
| 209 PumpLoop(); |
| 210 |
| 211 // Verify the request gets removed from the queue, and wait for callbacks. |
| 212 coordinator()->queue()->GetRequests( |
| 213 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
| 214 base::Unretained(this))); |
| 215 PumpLoop(); |
| 216 |
| 217 // We should not find any requests in the queue anymore. |
| 218 // RequestPicker should *not* have tried to start an additional job, |
| 219 // because the request queue is empty now. |
| 220 EXPECT_EQ(0UL, last_requests().size()); |
| 221 } |
| 222 |
| 177 } // namespace offline_pages | 223 } // namespace offline_pages |
| OLD | NEW |