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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 void WaitingCallbackFunction(bool result) { | 203 void WaitingCallbackFunction(bool result) { |
204 waiter_.Signal(); | 204 waiter_.Signal(); |
205 } | 205 } |
206 | 206 |
207 // Callback for Add requests. | 207 // Callback for Add requests. |
208 void AddRequestDone(RequestQueue::AddRequestResult result, | 208 void AddRequestDone(RequestQueue::AddRequestResult result, |
209 const SavePageRequest& request); | 209 const SavePageRequest& request); |
210 | 210 |
211 // Callback for getting requests. | 211 // Callback for getting requests. |
212 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 212 void GetRequestsDone(RequestQueue::GetRequestsResult result, |
213 const std::vector<SavePageRequest>& requests); | 213 std::vector<std::unique_ptr<SavePageRequest>> requests); |
214 | 214 |
215 // Callback for removing requests. | 215 // Callback for removing requests. |
216 void RemoveRequestsDone( | 216 void RemoveRequestsDone( |
217 const RequestQueue::UpdateMultipleRequestResults& results); | 217 const RequestQueue::UpdateMultipleRequestResults& results); |
218 | 218 |
219 // Callback for getting request statuses. | 219 // Callback for getting request statuses. |
220 void GetQueuedRequestsDone(const std::vector<SavePageRequest>& requests); | 220 void GetQueuedRequestsDone( |
| 221 std::vector<std::unique_ptr<SavePageRequest>> requests); |
221 | 222 |
222 void SendOfflinerDoneCallback(const SavePageRequest& request, | 223 void SendOfflinerDoneCallback(const SavePageRequest& request, |
223 Offliner::RequestStatus status); | 224 Offliner::RequestStatus status); |
224 | 225 |
225 RequestQueue::GetRequestsResult last_get_requests_result() const { | 226 RequestQueue::GetRequestsResult last_get_requests_result() const { |
226 return last_get_requests_result_; | 227 return last_get_requests_result_; |
227 } | 228 } |
228 | 229 |
229 const std::vector<SavePageRequest>& last_requests() const { | 230 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
230 return last_requests_; | 231 return last_requests_; |
231 } | 232 } |
232 | 233 |
233 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 234 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
234 const { | 235 const { |
235 return last_remove_results_; | 236 return last_remove_results_; |
236 } | 237 } |
237 | 238 |
238 void EnableOfflinerCallback(bool enable) { | 239 void EnableOfflinerCallback(bool enable) { |
239 offliner_->enable_callback(enable); | 240 offliner_->enable_callback(enable); |
(...skipping 29 matching lines...) Expand all Loading... |
269 Offliner::RequestStatus last_offlining_status() const { | 270 Offliner::RequestStatus last_offlining_status() const { |
270 return coordinator_->last_offlining_status_; | 271 return coordinator_->last_offlining_status_; |
271 } | 272 } |
272 | 273 |
273 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 274 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
274 | 275 |
275 ObserverStub observer() { return observer_; } | 276 ObserverStub observer() { return observer_; } |
276 | 277 |
277 private: | 278 private: |
278 RequestQueue::GetRequestsResult last_get_requests_result_; | 279 RequestQueue::GetRequestsResult last_get_requests_result_; |
279 std::vector<SavePageRequest> last_requests_; | |
280 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 280 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 281 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
281 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 282 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
282 base::ThreadTaskRunnerHandle task_runner_handle_; | 283 base::ThreadTaskRunnerHandle task_runner_handle_; |
283 std::unique_ptr<RequestCoordinator> coordinator_; | 284 std::unique_ptr<RequestCoordinator> coordinator_; |
284 OfflinerStub* offliner_; | 285 OfflinerStub* offliner_; |
285 base::WaitableEvent waiter_; | 286 base::WaitableEvent waiter_; |
286 ObserverStub observer_; | 287 ObserverStub observer_; |
287 }; | 288 }; |
288 | 289 |
289 RequestCoordinatorTest::RequestCoordinatorTest() | 290 RequestCoordinatorTest::RequestCoordinatorTest() |
290 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 291 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), |
(...skipping 20 matching lines...) Expand all Loading... |
311 std::move(scheduler_stub))); | 312 std::move(scheduler_stub))); |
312 coordinator_->AddObserver(&observer_); | 313 coordinator_->AddObserver(&observer_); |
313 } | 314 } |
314 | 315 |
315 void RequestCoordinatorTest::PumpLoop() { | 316 void RequestCoordinatorTest::PumpLoop() { |
316 task_runner_->RunUntilIdle(); | 317 task_runner_->RunUntilIdle(); |
317 } | 318 } |
318 | 319 |
319 void RequestCoordinatorTest::GetRequestsDone( | 320 void RequestCoordinatorTest::GetRequestsDone( |
320 RequestQueue::GetRequestsResult result, | 321 RequestQueue::GetRequestsResult result, |
321 const std::vector<SavePageRequest>& requests) { | 322 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
322 last_get_requests_result_ = result; | 323 last_get_requests_result_ = result; |
323 last_requests_ = requests; | 324 last_requests_ = std::move(requests); |
324 } | 325 } |
325 | 326 |
326 void RequestCoordinatorTest::RemoveRequestsDone( | 327 void RequestCoordinatorTest::RemoveRequestsDone( |
327 const RequestQueue::UpdateMultipleRequestResults& results) { | 328 const RequestQueue::UpdateMultipleRequestResults& results) { |
328 last_remove_results_ = results; | 329 last_remove_results_ = results; |
329 waiter_.Signal(); | 330 waiter_.Signal(); |
330 } | 331 } |
331 | 332 |
332 void RequestCoordinatorTest::GetQueuedRequestsDone( | 333 void RequestCoordinatorTest::GetQueuedRequestsDone( |
333 const std::vector<SavePageRequest>& requests) { | 334 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
334 last_requests_ = requests; | 335 last_requests_ = std::move(requests); |
335 waiter_.Signal(); | 336 waiter_.Signal(); |
336 } | 337 } |
337 | 338 |
338 void RequestCoordinatorTest::AddRequestDone( | 339 void RequestCoordinatorTest::AddRequestDone( |
339 RequestQueue::AddRequestResult result, | 340 RequestQueue::AddRequestResult result, |
340 const SavePageRequest& request) {} | 341 const SavePageRequest& request) {} |
341 | 342 |
342 void RequestCoordinatorTest::SendOfflinerDoneCallback( | 343 void RequestCoordinatorTest::SendOfflinerDoneCallback( |
343 const SavePageRequest& request, Offliner::RequestStatus status) { | 344 const SavePageRequest& request, Offliner::RequestStatus status) { |
344 // Using the fact that the test class is a friend, call to the callback | 345 // 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... |
387 // Expect that a request got placed on the queue. | 388 // Expect that a request got placed on the queue. |
388 coordinator()->queue()->GetRequests( | 389 coordinator()->queue()->GetRequests( |
389 base::Bind(&RequestCoordinatorTest::GetRequestsDone, | 390 base::Bind(&RequestCoordinatorTest::GetRequestsDone, |
390 base::Unretained(this))); | 391 base::Unretained(this))); |
391 | 392 |
392 // Wait for callbacks to finish, both request queue and offliner. | 393 // Wait for callbacks to finish, both request queue and offliner. |
393 PumpLoop(); | 394 PumpLoop(); |
394 | 395 |
395 // Check the request queue is as expected. | 396 // Check the request queue is as expected. |
396 EXPECT_EQ(1UL, last_requests().size()); | 397 EXPECT_EQ(1UL, last_requests().size()); |
397 EXPECT_EQ(kUrl1, last_requests()[0].url()); | 398 EXPECT_EQ(kUrl1, last_requests().at(0)->url()); |
398 EXPECT_EQ(kClientId1, last_requests()[0].client_id()); | 399 EXPECT_EQ(kClientId1, last_requests().at(0)->client_id()); |
399 | 400 |
400 // Expect that the scheduler got notified. | 401 // Expect that the scheduler got notified. |
401 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( | 402 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( |
402 coordinator()->scheduler()); | 403 coordinator()->scheduler()); |
403 EXPECT_TRUE(scheduler_stub->schedule_called()); | 404 EXPECT_TRUE(scheduler_stub->schedule_called()); |
404 EXPECT_EQ(coordinator() | 405 EXPECT_EQ(coordinator() |
405 ->GetTriggerConditions(last_requests()[0].user_requested()) | 406 ->GetTriggerConditions(last_requests()[0]->user_requested()) |
406 .minimum_battery_percentage, | 407 .minimum_battery_percentage, |
407 scheduler_stub->conditions()->minimum_battery_percentage); | 408 scheduler_stub->conditions()->minimum_battery_percentage); |
408 | 409 |
409 // Check that the observer got the notification that a page is available | 410 // Check that the observer got the notification that a page is available |
410 EXPECT_TRUE(observer().added_called()); | 411 EXPECT_TRUE(observer().added_called()); |
411 } | 412 } |
412 | 413 |
413 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { | 414 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { |
414 // Add a request to the queue, wait for callbacks to finish. | 415 // Add a request to the queue, wait for callbacks to finish. |
415 offline_pages::SavePageRequest request( | 416 offline_pages::SavePageRequest request( |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 PumpLoop(); | 544 PumpLoop(); |
544 | 545 |
545 // Verify the request is not removed from the queue, and wait for callbacks. | 546 // Verify the request is not removed from the queue, and wait for callbacks. |
546 coordinator()->queue()->GetRequests(base::Bind( | 547 coordinator()->queue()->GetRequests(base::Bind( |
547 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); | 548 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); |
548 PumpLoop(); | 549 PumpLoop(); |
549 | 550 |
550 // Request no longer in the queue (for single attempt policy). | 551 // Request no longer in the queue (for single attempt policy). |
551 EXPECT_EQ(1UL, last_requests().size()); | 552 EXPECT_EQ(1UL, last_requests().size()); |
552 // Verify foreground cancel not counted as an attempt after all. | 553 // Verify foreground cancel not counted as an attempt after all. |
553 const SavePageRequest& found_request = last_requests().front(); | 554 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count()); |
554 EXPECT_EQ(0L, found_request.completed_attempt_count()); | |
555 } | 555 } |
556 | 556 |
557 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { | 557 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { |
558 // Add a request to the queue, wait for callbacks to finish. | 558 // Add a request to the queue, wait for callbacks to finish. |
559 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, | 559 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, |
560 base::Time::Now(), kUserRequested); | 560 base::Time::Now(), kUserRequested); |
561 request.MarkAttemptStarted(base::Time::Now()); | 561 request.MarkAttemptStarted(base::Time::Now()); |
562 coordinator()->queue()->AddRequest( | 562 coordinator()->queue()->AddRequest( |
563 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 563 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
564 base::Unretained(this))); | 564 base::Unretained(this))); |
(...skipping 17 matching lines...) Expand all Loading... |
582 PumpLoop(); | 582 PumpLoop(); |
583 | 583 |
584 // Verify the request is not removed from the queue, and wait for callbacks. | 584 // Verify the request is not removed from the queue, and wait for callbacks. |
585 coordinator()->queue()->GetRequests(base::Bind( | 585 coordinator()->queue()->GetRequests(base::Bind( |
586 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); | 586 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); |
587 PumpLoop(); | 587 PumpLoop(); |
588 | 588 |
589 // Request still in the queue. | 589 // Request still in the queue. |
590 EXPECT_EQ(1UL, last_requests().size()); | 590 EXPECT_EQ(1UL, last_requests().size()); |
591 // Verify prerendering cancel not counted as an attempt after all. | 591 // Verify prerendering cancel not counted as an attempt after all. |
592 const SavePageRequest& found_request = last_requests().front(); | 592 const std::unique_ptr<SavePageRequest>& found_request = |
593 EXPECT_EQ(0L, found_request.completed_attempt_count()); | 593 last_requests().front(); |
| 594 EXPECT_EQ(0L, found_request->completed_attempt_count()); |
594 } | 595 } |
595 | 596 |
596 // If one item completes, and there are no more user requeted items left, | 597 // If one item completes, and there are no more user requeted items left, |
597 // we should make a scheduler entry for a non-user requested item. | 598 // we should make a scheduler entry for a non-user requested item. |
598 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { | 599 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { |
599 // Call start processing just to set up a scheduler callback. | 600 // Call start processing just to set up a scheduler callback. |
600 DeviceConditions device_conditions(false, 75, | 601 DeviceConditions device_conditions(false, 75, |
601 net::NetworkChangeNotifier::CONNECTION_3G); | 602 net::NetworkChangeNotifier::CONNECTION_3G); |
602 base::Callback<void(bool)> callback = base::Bind( | 603 base::Callback<void(bool)> callback = base::Bind( |
603 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); | 604 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); |
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
891 coordinator()->GetAllRequests(base::Bind( | 892 coordinator()->GetAllRequests(base::Bind( |
892 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); | 893 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); |
893 PumpLoop(); | 894 PumpLoop(); |
894 | 895 |
895 // Wait for async get to finish. | 896 // Wait for async get to finish. |
896 WaitForCallback(); | 897 WaitForCallback(); |
897 PumpLoop(); | 898 PumpLoop(); |
898 | 899 |
899 // Check that the statuses found in the callback match what we expect. | 900 // Check that the statuses found in the callback match what we expect. |
900 EXPECT_EQ(2UL, last_requests().size()); | 901 EXPECT_EQ(2UL, last_requests().size()); |
901 EXPECT_EQ(kRequestId1, last_requests().at(0).request_id()); | 902 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id()); |
902 EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); | 903 EXPECT_EQ(kRequestId2, last_requests().at(1)->request_id()); |
903 } | 904 } |
904 | 905 |
905 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { | 906 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { |
906 // Add a request to the queue. | 907 // Add a request to the queue. |
907 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, | 908 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, |
908 base::Time::Now(), kUserRequested); | 909 base::Time::Now(), kUserRequested); |
909 coordinator()->queue()->AddRequest( | 910 coordinator()->queue()->AddRequest( |
910 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 911 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
911 base::Unretained(this))); | 912 base::Unretained(this))); |
912 PumpLoop(); | 913 PumpLoop(); |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); | 1008 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); |
1008 | 1009 |
1009 // Resume the request while connected. | 1010 // Resume the request while connected. |
1010 coordinator()->ResumeRequests(request_ids); | 1011 coordinator()->ResumeRequests(request_ids); |
1011 EXPECT_FALSE(is_busy()); | 1012 EXPECT_FALSE(is_busy()); |
1012 PumpLoop(); | 1013 PumpLoop(); |
1013 EXPECT_TRUE(is_busy()); | 1014 EXPECT_TRUE(is_busy()); |
1014 } | 1015 } |
1015 | 1016 |
1016 } // namespace offline_pages | 1017 } // namespace offline_pages |
OLD | NEW |