| 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 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 void WaitingCallbackFunction(bool result) { | 205 void WaitingCallbackFunction(bool result) { |
| 206 waiter_.Signal(); | 206 waiter_.Signal(); |
| 207 } | 207 } |
| 208 | 208 |
| 209 // Callback for Add requests. | 209 // Callback for Add requests. |
| 210 void AddRequestDone(RequestQueue::AddRequestResult result, | 210 void AddRequestDone(RequestQueue::AddRequestResult result, |
| 211 const SavePageRequest& request); | 211 const SavePageRequest& request); |
| 212 | 212 |
| 213 // Callback for getting requests. | 213 // Callback for getting requests. |
| 214 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 214 void GetRequestsDone(RequestQueue::GetRequestsResult result, |
| 215 const std::vector<SavePageRequest>& requests); | 215 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 216 | 216 |
| 217 // Callback for removing requests. | 217 // Callback for removing requests. |
| 218 void RemoveRequestsDone( | 218 void RemoveRequestsDone( |
| 219 const RequestQueue::UpdateMultipleRequestResults& results); | 219 const RequestQueue::UpdateMultipleRequestResults& results); |
| 220 | 220 |
| 221 // Callback for getting request statuses. | 221 // Callback for getting request statuses. |
| 222 void GetQueuedRequestsDone(const std::vector<SavePageRequest>& requests); | 222 void GetQueuedRequestsDone( |
| 223 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 223 | 224 |
| 224 void SendOfflinerDoneCallback(const SavePageRequest& request, | 225 void SendOfflinerDoneCallback(const SavePageRequest& request, |
| 225 Offliner::RequestStatus status); | 226 Offliner::RequestStatus status); |
| 226 | 227 |
| 227 RequestQueue::GetRequestsResult last_get_requests_result() const { | 228 RequestQueue::GetRequestsResult last_get_requests_result() const { |
| 228 return last_get_requests_result_; | 229 return last_get_requests_result_; |
| 229 } | 230 } |
| 230 | 231 |
| 231 const std::vector<SavePageRequest>& last_requests() const { | 232 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 232 return last_requests_; | 233 return last_requests_; |
| 233 } | 234 } |
| 234 | 235 |
| 235 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 236 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
| 236 const { | 237 const { |
| 237 return last_remove_results_; | 238 return last_remove_results_; |
| 238 } | 239 } |
| 239 | 240 |
| 240 void EnableOfflinerCallback(bool enable) { | 241 void EnableOfflinerCallback(bool enable) { |
| 241 offliner_->enable_callback(enable); | 242 offliner_->enable_callback(enable); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 260 Offliner::RequestStatus last_offlining_status() const { | 261 Offliner::RequestStatus last_offlining_status() const { |
| 261 return coordinator_->last_offlining_status_; | 262 return coordinator_->last_offlining_status_; |
| 262 } | 263 } |
| 263 | 264 |
| 264 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 265 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
| 265 | 266 |
| 266 ObserverStub observer() { return observer_; } | 267 ObserverStub observer() { return observer_; } |
| 267 | 268 |
| 268 private: | 269 private: |
| 269 RequestQueue::GetRequestsResult last_get_requests_result_; | 270 RequestQueue::GetRequestsResult last_get_requests_result_; |
| 270 std::vector<SavePageRequest> last_requests_; | |
| 271 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 271 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 272 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 272 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 273 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
| 273 base::ThreadTaskRunnerHandle task_runner_handle_; | 274 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 274 std::unique_ptr<RequestCoordinator> coordinator_; | 275 std::unique_ptr<RequestCoordinator> coordinator_; |
| 275 OfflinerStub* offliner_; | 276 OfflinerStub* offliner_; |
| 276 base::WaitableEvent waiter_; | 277 base::WaitableEvent waiter_; |
| 277 ObserverStub observer_; | 278 ObserverStub observer_; |
| 278 }; | 279 }; |
| 279 | 280 |
| 280 RequestCoordinatorTest::RequestCoordinatorTest() | 281 RequestCoordinatorTest::RequestCoordinatorTest() |
| 281 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 282 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 302 std::move(scheduler_stub))); | 303 std::move(scheduler_stub))); |
| 303 coordinator_->AddObserver(&observer_); | 304 coordinator_->AddObserver(&observer_); |
| 304 } | 305 } |
| 305 | 306 |
| 306 void RequestCoordinatorTest::PumpLoop() { | 307 void RequestCoordinatorTest::PumpLoop() { |
| 307 task_runner_->RunUntilIdle(); | 308 task_runner_->RunUntilIdle(); |
| 308 } | 309 } |
| 309 | 310 |
| 310 void RequestCoordinatorTest::GetRequestsDone( | 311 void RequestCoordinatorTest::GetRequestsDone( |
| 311 RequestQueue::GetRequestsResult result, | 312 RequestQueue::GetRequestsResult result, |
| 312 const std::vector<SavePageRequest>& requests) { | 313 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 313 last_get_requests_result_ = result; | 314 last_get_requests_result_ = result; |
| 314 last_requests_ = requests; | 315 last_requests_ = std::move(requests); |
| 315 } | 316 } |
| 316 | 317 |
| 317 void RequestCoordinatorTest::RemoveRequestsDone( | 318 void RequestCoordinatorTest::RemoveRequestsDone( |
| 318 const RequestQueue::UpdateMultipleRequestResults& results) { | 319 const RequestQueue::UpdateMultipleRequestResults& results) { |
| 319 last_remove_results_ = results; | 320 last_remove_results_ = results; |
| 320 waiter_.Signal(); | 321 waiter_.Signal(); |
| 321 } | 322 } |
| 322 | 323 |
| 323 void RequestCoordinatorTest::GetQueuedRequestsDone( | 324 void RequestCoordinatorTest::GetQueuedRequestsDone( |
| 324 const std::vector<SavePageRequest>& requests) { | 325 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 325 last_requests_ = requests; | 326 last_requests_ = std::move(requests); |
| 326 waiter_.Signal(); | 327 waiter_.Signal(); |
| 327 } | 328 } |
| 328 | 329 |
| 329 void RequestCoordinatorTest::AddRequestDone( | 330 void RequestCoordinatorTest::AddRequestDone( |
| 330 RequestQueue::AddRequestResult result, | 331 RequestQueue::AddRequestResult result, |
| 331 const SavePageRequest& request) {} | 332 const SavePageRequest& request) {} |
| 332 | 333 |
| 333 void RequestCoordinatorTest::SendOfflinerDoneCallback( | 334 void RequestCoordinatorTest::SendOfflinerDoneCallback( |
| 334 const SavePageRequest& request, Offliner::RequestStatus status) { | 335 const SavePageRequest& request, Offliner::RequestStatus status) { |
| 335 // Using the fact that the test class is a friend, call to the callback | 336 // Using the fact that the test class is a friend, call to the callback |
| (...skipping 40 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 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 PumpLoop(); | 537 PumpLoop(); |
| 537 | 538 |
| 538 // Verify the request is not removed from the queue, and wait for callbacks. | 539 // Verify the request is not removed from the queue, and wait for callbacks. |
| 539 coordinator()->queue()->GetRequests(base::Bind( | 540 coordinator()->queue()->GetRequests(base::Bind( |
| 540 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); | 541 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); |
| 541 PumpLoop(); | 542 PumpLoop(); |
| 542 | 543 |
| 543 // Request no longer in the queue (for single attempt policy). | 544 // Request no longer in the queue (for single attempt policy). |
| 544 EXPECT_EQ(1UL, last_requests().size()); | 545 EXPECT_EQ(1UL, last_requests().size()); |
| 545 // Verify foreground cancel not counted as an attempt after all. | 546 // Verify foreground cancel not counted as an attempt after all. |
| 546 const SavePageRequest& found_request = last_requests().front(); | 547 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count()); |
| 547 EXPECT_EQ(0L, found_request.completed_attempt_count()); | |
| 548 } | 548 } |
| 549 | 549 |
| 550 // This tests a StopProcessing call before we have actually started the | 550 // This tests a StopProcessing call before we have actually started the |
| 551 // prerenderer. | 551 // prerenderer. |
| 552 TEST_F(RequestCoordinatorTest, StartProcessingThenStopProcessingImmediately) { | 552 TEST_F(RequestCoordinatorTest, StartProcessingThenStopProcessingImmediately) { |
| 553 // Add a request to the queue, wait for callbacks to finish. | 553 // Add a request to the queue, wait for callbacks to finish. |
| 554 offline_pages::SavePageRequest request( | 554 offline_pages::SavePageRequest request( |
| 555 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); | 555 kRequestId1, kUrl1, kClientId1, base::Time::Now(), kUserRequested); |
| 556 coordinator()->queue()->AddRequest( | 556 coordinator()->queue()->AddRequest( |
| 557 request, | 557 request, |
| (...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 767 coordinator()->GetAllRequests(base::Bind( | 767 coordinator()->GetAllRequests(base::Bind( |
| 768 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); | 768 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); |
| 769 PumpLoop(); | 769 PumpLoop(); |
| 770 | 770 |
| 771 // Wait for async get to finish. | 771 // Wait for async get to finish. |
| 772 WaitForCallback(); | 772 WaitForCallback(); |
| 773 PumpLoop(); | 773 PumpLoop(); |
| 774 | 774 |
| 775 // Check that the statuses found in the callback match what we expect. | 775 // Check that the statuses found in the callback match what we expect. |
| 776 EXPECT_EQ(2UL, last_requests().size()); | 776 EXPECT_EQ(2UL, last_requests().size()); |
| 777 EXPECT_EQ(kRequestId1, last_requests().at(0).request_id()); | 777 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id()); |
| 778 EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); | 778 EXPECT_EQ(kRequestId2, last_requests().at(1)->request_id()); |
| 779 } | 779 } |
| 780 | 780 |
| 781 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { | 781 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { |
| 782 // Add a request to the queue. | 782 // Add a request to the queue. |
| 783 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, | 783 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, |
| 784 base::Time::Now(), kUserRequested); | 784 base::Time::Now(), kUserRequested); |
| 785 coordinator()->queue()->AddRequest( | 785 coordinator()->queue()->AddRequest( |
| 786 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 786 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 787 base::Unretained(this))); | 787 base::Unretained(this))); |
| 788 PumpLoop(); | 788 PumpLoop(); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 PumpLoop(); | 828 PumpLoop(); |
| 829 | 829 |
| 830 EXPECT_TRUE(observer().completed_called()); | 830 EXPECT_TRUE(observer().completed_called()); |
| 831 EXPECT_EQ(RequestCoordinator::SavePageStatus::REMOVED, | 831 EXPECT_EQ(RequestCoordinator::SavePageStatus::REMOVED, |
| 832 observer().last_status()); | 832 observer().last_status()); |
| 833 EXPECT_EQ(1UL, last_remove_results().size()); | 833 EXPECT_EQ(1UL, last_remove_results().size()); |
| 834 EXPECT_EQ(kRequestId1, std::get<0>(last_remove_results().at(0))); | 834 EXPECT_EQ(kRequestId1, std::get<0>(last_remove_results().at(0))); |
| 835 } | 835 } |
| 836 | 836 |
| 837 } // namespace offline_pages | 837 } // namespace offline_pages |
| OLD | NEW |