| 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 |