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 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 void WaitingCallbackFunction(bool result) { | 198 void WaitingCallbackFunction(bool result) { |
199 waiter_.Signal(); | 199 waiter_.Signal(); |
200 } | 200 } |
201 | 201 |
202 // Callback for Add requests. | 202 // Callback for Add requests. |
203 void AddRequestDone(RequestQueue::AddRequestResult result, | 203 void AddRequestDone(RequestQueue::AddRequestResult result, |
204 const SavePageRequest& request); | 204 const SavePageRequest& request); |
205 | 205 |
206 // Callback for getting requests. | 206 // Callback for getting requests. |
207 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 207 void GetRequestsDone(RequestQueue::GetRequestsResult result, |
208 const std::vector<SavePageRequest>& requests); | 208 std::vector<std::unique_ptr<SavePageRequest>> requests); |
209 | 209 |
210 // Callback for removing requests. | 210 // Callback for removing requests. |
211 void RemoveRequestsDone( | 211 void RemoveRequestsDone( |
212 const RequestQueue::UpdateMultipleRequestResults& results); | 212 const RequestQueue::UpdateMultipleRequestResults& results); |
213 | 213 |
214 // Callback for getting request statuses. | 214 // Callback for getting request statuses. |
215 void GetQueuedRequestsDone(const std::vector<SavePageRequest>& requests); | 215 void GetQueuedRequestsDone( |
| 216 std::vector<std::unique_ptr<SavePageRequest>> requests); |
216 | 217 |
217 void SendOfflinerDoneCallback(const SavePageRequest& request, | 218 void SendOfflinerDoneCallback(const SavePageRequest& request, |
218 Offliner::RequestStatus status); | 219 Offliner::RequestStatus status); |
219 | 220 |
220 RequestQueue::GetRequestsResult last_get_requests_result() const { | 221 RequestQueue::GetRequestsResult last_get_requests_result() const { |
221 return last_get_requests_result_; | 222 return last_get_requests_result_; |
222 } | 223 } |
223 | 224 |
224 const std::vector<SavePageRequest>& last_requests() const { | 225 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
225 return last_requests_; | 226 return last_requests_; |
226 } | 227 } |
227 | 228 |
228 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 229 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
229 const { | 230 const { |
230 return last_remove_results_; | 231 return last_remove_results_; |
231 } | 232 } |
232 | 233 |
233 void EnableOfflinerCallback(bool enable) { | 234 void EnableOfflinerCallback(bool enable) { |
234 offliner_->enable_callback(enable); | 235 offliner_->enable_callback(enable); |
(...skipping 23 matching lines...) Expand all Loading... |
258 Offliner::RequestStatus last_offlining_status() const { | 259 Offliner::RequestStatus last_offlining_status() const { |
259 return coordinator_->last_offlining_status_; | 260 return coordinator_->last_offlining_status_; |
260 } | 261 } |
261 | 262 |
262 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 263 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
263 | 264 |
264 ObserverStub observer() { return observer_; } | 265 ObserverStub observer() { return observer_; } |
265 | 266 |
266 private: | 267 private: |
267 RequestQueue::GetRequestsResult last_get_requests_result_; | 268 RequestQueue::GetRequestsResult last_get_requests_result_; |
268 std::vector<SavePageRequest> last_requests_; | |
269 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 269 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 270 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
270 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 271 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
271 base::ThreadTaskRunnerHandle task_runner_handle_; | 272 base::ThreadTaskRunnerHandle task_runner_handle_; |
272 std::unique_ptr<RequestCoordinator> coordinator_; | 273 std::unique_ptr<RequestCoordinator> coordinator_; |
273 OfflinerStub* offliner_; | 274 OfflinerStub* offliner_; |
274 base::WaitableEvent waiter_; | 275 base::WaitableEvent waiter_; |
275 ObserverStub observer_; | 276 ObserverStub observer_; |
276 }; | 277 }; |
277 | 278 |
278 RequestCoordinatorTest::RequestCoordinatorTest() | 279 RequestCoordinatorTest::RequestCoordinatorTest() |
279 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 280 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), |
(...skipping 20 matching lines...) Expand all Loading... |
300 std::move(scheduler_stub))); | 301 std::move(scheduler_stub))); |
301 coordinator_->AddObserver(&observer_); | 302 coordinator_->AddObserver(&observer_); |
302 } | 303 } |
303 | 304 |
304 void RequestCoordinatorTest::PumpLoop() { | 305 void RequestCoordinatorTest::PumpLoop() { |
305 task_runner_->RunUntilIdle(); | 306 task_runner_->RunUntilIdle(); |
306 } | 307 } |
307 | 308 |
308 void RequestCoordinatorTest::GetRequestsDone( | 309 void RequestCoordinatorTest::GetRequestsDone( |
309 RequestQueue::GetRequestsResult result, | 310 RequestQueue::GetRequestsResult result, |
310 const std::vector<SavePageRequest>& requests) { | 311 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
311 last_get_requests_result_ = result; | 312 last_get_requests_result_ = result; |
312 last_requests_ = requests; | 313 last_requests_ = std::move(requests); |
313 } | 314 } |
314 | 315 |
315 void RequestCoordinatorTest::RemoveRequestsDone( | 316 void RequestCoordinatorTest::RemoveRequestsDone( |
316 const RequestQueue::UpdateMultipleRequestResults& results) { | 317 const RequestQueue::UpdateMultipleRequestResults& results) { |
317 last_remove_results_ = results; | 318 last_remove_results_ = results; |
318 waiter_.Signal(); | 319 waiter_.Signal(); |
319 } | 320 } |
320 | 321 |
321 void RequestCoordinatorTest::GetQueuedRequestsDone( | 322 void RequestCoordinatorTest::GetQueuedRequestsDone( |
322 const std::vector<SavePageRequest>& requests) { | 323 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
323 last_requests_ = requests; | 324 last_requests_ = std::move(requests); |
324 waiter_.Signal(); | 325 waiter_.Signal(); |
325 } | 326 } |
326 | 327 |
327 void RequestCoordinatorTest::AddRequestDone( | 328 void RequestCoordinatorTest::AddRequestDone( |
328 RequestQueue::AddRequestResult result, | 329 RequestQueue::AddRequestResult result, |
329 const SavePageRequest& request) {} | 330 const SavePageRequest& request) {} |
330 | 331 |
331 void RequestCoordinatorTest::SendOfflinerDoneCallback( | 332 void RequestCoordinatorTest::SendOfflinerDoneCallback( |
332 const SavePageRequest& request, Offliner::RequestStatus status) { | 333 const SavePageRequest& request, Offliner::RequestStatus status) { |
333 // Using the fact that the test class is a friend, call to the callback | 334 // Using the fact that the test class is a friend, call to the callback |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 // Expect that a request got placed on the queue. | 377 // Expect that a request got placed on the queue. |
377 coordinator()->queue()->GetRequests( | 378 coordinator()->queue()->GetRequests( |
378 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | 379 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
379 base::Unretained(this))); | 380 base::Unretained(this))); |
380 | 381 |
381 // Wait for callbacks to finish, both request queue and offliner. | 382 // Wait for callbacks to finish, both request queue and offliner. |
382 PumpLoop(); | 383 PumpLoop(); |
383 | 384 |
384 // Check the request queue is as expected. | 385 // Check the request queue is as expected. |
385 EXPECT_EQ(1UL, last_requests().size()); | 386 EXPECT_EQ(1UL, last_requests().size()); |
386 EXPECT_EQ(kUrl1, last_requests()[0].url()); | 387 EXPECT_EQ(kUrl1, last_requests().at(0)->url()); |
387 EXPECT_EQ(kClientId1, last_requests()[0].client_id()); | 388 EXPECT_EQ(kClientId1, last_requests().at(0)->client_id()); |
388 | 389 |
389 // Expect that the scheduler got notified. | 390 // Expect that the scheduler got notified. |
390 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( | 391 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( |
391 coordinator()->scheduler()); | 392 coordinator()->scheduler()); |
392 EXPECT_TRUE(scheduler_stub->schedule_called()); | 393 EXPECT_TRUE(scheduler_stub->schedule_called()); |
393 EXPECT_EQ(coordinator() | 394 EXPECT_EQ(coordinator() |
394 ->GetTriggerConditionsForUserRequest() | 395 ->GetTriggerConditionsForUserRequest() |
395 .minimum_battery_percentage, | 396 .minimum_battery_percentage, |
396 scheduler_stub->conditions()->minimum_battery_percentage); | 397 scheduler_stub->conditions()->minimum_battery_percentage); |
397 | 398 |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
532 PumpLoop(); | 533 PumpLoop(); |
533 | 534 |
534 // Verify the request is not removed from the queue, and wait for callbacks. | 535 // Verify the request is not removed from the queue, and wait for callbacks. |
535 coordinator()->queue()->GetRequests(base::Bind( | 536 coordinator()->queue()->GetRequests(base::Bind( |
536 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); | 537 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); |
537 PumpLoop(); | 538 PumpLoop(); |
538 | 539 |
539 // Request no longer in the queue (for single attempt policy). | 540 // Request no longer in the queue (for single attempt policy). |
540 EXPECT_EQ(1UL, last_requests().size()); | 541 EXPECT_EQ(1UL, last_requests().size()); |
541 // Verify foreground cancel not counted as an attempt after all. | 542 // Verify foreground cancel not counted as an attempt after all. |
542 const SavePageRequest& found_request = last_requests().front(); | 543 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count()); |
543 EXPECT_EQ(0L, found_request.completed_attempt_count()); | |
544 } | 544 } |
545 | 545 |
546 // This tests a StopProcessing call before we have actually started the | 546 // This tests a StopProcessing call before we have actually started the |
547 // prerenderer. | 547 // prerenderer. |
548 TEST_F(RequestCoordinatorTest, StartProcessingThenStopProcessingImmediately) { | 548 TEST_F(RequestCoordinatorTest, StartProcessingThenStopProcessingImmediately) { |
549 // Add a request to the queue, wait for callbacks to finish. | 549 // Add a request to the queue, wait for callbacks to finish. |
550 offline_pages::SavePageRequest request( | 550 offline_pages::SavePageRequest request( |
551 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); | 551 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
552 coordinator()->queue()->AddRequest( | 552 coordinator()->queue()->AddRequest( |
553 request, | 553 request, |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 coordinator()->GetAllRequests(base::Bind( | 768 coordinator()->GetAllRequests(base::Bind( |
769 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); | 769 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); |
770 PumpLoop(); | 770 PumpLoop(); |
771 | 771 |
772 // Wait for async get to finish. | 772 // Wait for async get to finish. |
773 WaitForCallback(); | 773 WaitForCallback(); |
774 PumpLoop(); | 774 PumpLoop(); |
775 | 775 |
776 // Check that the statuses found in the callback match what we expect. | 776 // Check that the statuses found in the callback match what we expect. |
777 EXPECT_EQ(2UL, last_requests().size()); | 777 EXPECT_EQ(2UL, last_requests().size()); |
778 EXPECT_EQ(kRequestId1, last_requests().at(0).request_id()); | 778 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id()); |
779 EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); | 779 EXPECT_EQ(kRequestId2, last_requests().at(1)->request_id()); |
780 } | 780 } |
781 | 781 |
782 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { | 782 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { |
783 // Add a request to the queue. | 783 // Add a request to the queue. |
784 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, | 784 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, |
785 base::Time::Now(), kUserRequested); | 785 base::Time::Now(), kUserRequested); |
786 coordinator()->queue()->AddRequest( | 786 coordinator()->queue()->AddRequest( |
787 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 787 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
788 base::Unretained(this))); | 788 base::Unretained(this))); |
789 PumpLoop(); | 789 PumpLoop(); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
884 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); | 884 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); |
885 | 885 |
886 // Resume the request while connected. | 886 // Resume the request while connected. |
887 coordinator()->ResumeRequests(request_ids); | 887 coordinator()->ResumeRequests(request_ids); |
888 EXPECT_FALSE(is_busy()); | 888 EXPECT_FALSE(is_busy()); |
889 PumpLoop(); | 889 PumpLoop(); |
890 EXPECT_TRUE(is_busy()); | 890 EXPECT_TRUE(is_busy()); |
891 } | 891 } |
892 | 892 |
893 } // namespace offline_pages | 893 } // namespace offline_pages |
OLD | NEW |