| 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_queue.h" | 5 #include "components/offline_pages/background/request_queue.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 | 40 |
| 41 // Test overrides. | 41 // Test overrides. |
| 42 void SetUp() override; | 42 void SetUp() override; |
| 43 | 43 |
| 44 void PumpLoop(); | 44 void PumpLoop(); |
| 45 | 45 |
| 46 // Callback for adding requests. | 46 // Callback for adding requests. |
| 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); | 47 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| 48 // Callback for getting requests. | 48 // Callback for getting requests. |
| 49 void GetRequestsDone(GetRequestsResult result, | 49 void GetRequestsDone(GetRequestsResult result, |
| 50 const std::vector<SavePageRequest>& requests); | 50 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 51 // Callback for removing request. | 51 // Callback for removing request. |
| 52 void RemoveRequestsDone( | 52 void RemoveRequestsDone( |
| 53 const RequestQueue::UpdateMultipleRequestResults& results, | 53 const RequestQueue::UpdateMultipleRequestResults& results, |
| 54 const std::vector<SavePageRequest>& requests); | 54 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 55 | 55 |
| 56 void UpdateMultipleRequestsDone( | 56 void UpdateMultipleRequestsDone( |
| 57 const RequestQueue::UpdateMultipleRequestResults& results, | 57 const RequestQueue::UpdateMultipleRequestResults& results, |
| 58 const std::vector<SavePageRequest>& requests); | 58 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 59 | 59 |
| 60 void UpdateRequestDone(UpdateRequestResult result); | 60 void UpdateRequestDone(UpdateRequestResult result); |
| 61 | 61 |
| 62 RequestQueue* queue() { return queue_.get(); } | 62 RequestQueue* queue() { return queue_.get(); } |
| 63 | 63 |
| 64 AddRequestResult last_add_result() const { return last_add_result_; } | 64 AddRequestResult last_add_result() const { return last_add_result_; } |
| 65 SavePageRequest* last_added_request() { | 65 SavePageRequest* last_added_request() { |
| 66 return last_added_request_.get(); | 66 return last_added_request_.get(); |
| 67 } | 67 } |
| 68 | 68 |
| 69 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() | 69 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() |
| 70 const { | 70 const { |
| 71 return last_remove_results_; | 71 return last_remove_results_; |
| 72 } | 72 } |
| 73 | 73 |
| 74 const RequestQueue::UpdateMultipleRequestResults& | 74 const RequestQueue::UpdateMultipleRequestResults& |
| 75 last_multiple_update_results() const { | 75 last_multiple_update_results() const { |
| 76 return last_multiple_update_results_; | 76 return last_multiple_update_results_; |
| 77 } | 77 } |
| 78 | 78 |
| 79 UpdateRequestResult last_update_result() const { return last_update_result_; } | 79 UpdateRequestResult last_update_result() const { return last_update_result_; } |
| 80 | 80 |
| 81 GetRequestsResult last_get_requests_result() const { | 81 GetRequestsResult last_get_requests_result() const { |
| 82 return last_get_requests_result_; | 82 return last_get_requests_result_; |
| 83 } | 83 } |
| 84 const std::vector<SavePageRequest>& last_requests() const { | 84 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 85 return last_requests_; | 85 return last_requests_; |
| 86 } | 86 } |
| 87 | 87 |
| 88 private: | 88 private: |
| 89 AddRequestResult last_add_result_; | 89 AddRequestResult last_add_result_; |
| 90 std::unique_ptr<SavePageRequest> last_added_request_; | 90 std::unique_ptr<SavePageRequest> last_added_request_; |
| 91 RequestQueue::UpdateMultipleRequestResults last_remove_results_; | 91 RequestQueue::UpdateMultipleRequestResults last_remove_results_; |
| 92 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; | 92 RequestQueue::UpdateMultipleRequestResults last_multiple_update_results_; |
| 93 UpdateRequestResult last_update_result_; | 93 UpdateRequestResult last_update_result_; |
| 94 | 94 |
| 95 GetRequestsResult last_get_requests_result_; | 95 GetRequestsResult last_get_requests_result_; |
| 96 std::vector<SavePageRequest> last_requests_; | 96 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 97 | 97 |
| 98 std::unique_ptr<RequestQueue> queue_; | 98 std::unique_ptr<RequestQueue> queue_; |
| 99 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 99 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
| 100 base::ThreadTaskRunnerHandle task_runner_handle_; | 100 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 RequestQueueTest::RequestQueueTest() | 103 RequestQueueTest::RequestQueueTest() |
| 104 : last_add_result_(AddRequestResult::STORE_FAILURE), | 104 : last_add_result_(AddRequestResult::STORE_FAILURE), |
| 105 last_update_result_(UpdateRequestResult::STORE_FAILURE), | 105 last_update_result_(UpdateRequestResult::STORE_FAILURE), |
| 106 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), | 106 last_get_requests_result_(GetRequestsResult::STORE_FAILURE), |
| (...skipping 13 matching lines...) Expand all Loading... |
| 120 } | 120 } |
| 121 | 121 |
| 122 void RequestQueueTest::AddRequestDone(AddRequestResult result, | 122 void RequestQueueTest::AddRequestDone(AddRequestResult result, |
| 123 const SavePageRequest& request) { | 123 const SavePageRequest& request) { |
| 124 last_add_result_ = result; | 124 last_add_result_ = result; |
| 125 last_added_request_.reset(new SavePageRequest(request)); | 125 last_added_request_.reset(new SavePageRequest(request)); |
| 126 } | 126 } |
| 127 | 127 |
| 128 void RequestQueueTest::GetRequestsDone( | 128 void RequestQueueTest::GetRequestsDone( |
| 129 GetRequestsResult result, | 129 GetRequestsResult result, |
| 130 const std::vector<SavePageRequest>& requests) { | 130 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 131 last_get_requests_result_ = result; | 131 last_get_requests_result_ = result; |
| 132 last_requests_ = requests; | 132 last_requests_ = std::move(requests); |
| 133 } | 133 } |
| 134 | 134 |
| 135 void RequestQueueTest::RemoveRequestsDone( | 135 void RequestQueueTest::RemoveRequestsDone( |
| 136 const RequestQueue::UpdateMultipleRequestResults& results, | 136 const RequestQueue::UpdateMultipleRequestResults& results, |
| 137 const std::vector<SavePageRequest>& requests) { | 137 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 138 last_remove_results_ = results; | 138 last_remove_results_ = results; |
| 139 last_requests_ = requests; | 139 last_requests_ = std::move(requests); |
| 140 } | 140 } |
| 141 | 141 |
| 142 void RequestQueueTest::UpdateMultipleRequestsDone( | 142 void RequestQueueTest::UpdateMultipleRequestsDone( |
| 143 const RequestQueue::UpdateMultipleRequestResults& results, | 143 const RequestQueue::UpdateMultipleRequestResults& results, |
| 144 const std::vector<SavePageRequest>& requests) { | 144 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 145 last_multiple_update_results_ = results; | 145 last_multiple_update_results_ = results; |
| 146 last_requests_ = requests; | 146 last_requests_ = std::move(requests); |
| 147 } | 147 } |
| 148 | 148 |
| 149 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { | 149 void RequestQueueTest::UpdateRequestDone(UpdateRequestResult result) { |
| 150 last_update_result_ = result; | 150 last_update_result_ = result; |
| 151 } | 151 } |
| 152 | 152 |
| 153 TEST_F(RequestQueueTest, GetRequestsEmpty) { | 153 TEST_F(RequestQueueTest, GetRequestsEmpty) { |
| 154 queue()->GetRequests( | 154 queue()->GetRequests( |
| 155 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 155 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 156 PumpLoop(); | 156 PumpLoop(); |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 last_multiple_update_results().at(0).second); | 268 last_multiple_update_results().at(0).second); |
| 269 | 269 |
| 270 queue()->GetRequests( | 270 queue()->GetRequests( |
| 271 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 271 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 272 PumpLoop(); | 272 PumpLoop(); |
| 273 | 273 |
| 274 // Verify the request is paused. | 274 // Verify the request is paused. |
| 275 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 275 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 276 ASSERT_EQ(1ul, last_requests().size()); | 276 ASSERT_EQ(1ul, last_requests().size()); |
| 277 ASSERT_EQ(SavePageRequest::RequestState::PAUSED, | 277 ASSERT_EQ(SavePageRequest::RequestState::PAUSED, |
| 278 last_requests().front().request_state()); | 278 last_requests().at(0)->request_state()); |
| 279 | 279 |
| 280 // Resume the request. | 280 // Resume the request. |
| 281 queue()->ChangeRequestsState( | 281 queue()->ChangeRequestsState( |
| 282 request_ids, SavePageRequest::RequestState::AVAILABLE, | 282 request_ids, SavePageRequest::RequestState::AVAILABLE, |
| 283 base::Bind(&RequestQueueTest::UpdateMultipleRequestsDone, | 283 base::Bind(&RequestQueueTest::UpdateMultipleRequestsDone, |
| 284 base::Unretained(this))); | 284 base::Unretained(this))); |
| 285 PumpLoop(); | 285 PumpLoop(); |
| 286 ASSERT_EQ(1ul, last_multiple_update_results().size()); | 286 ASSERT_EQ(1ul, last_multiple_update_results().size()); |
| 287 ASSERT_EQ(UpdateRequestResult::SUCCESS, | 287 ASSERT_EQ(UpdateRequestResult::SUCCESS, |
| 288 last_multiple_update_results().at(0).second); | 288 last_multiple_update_results().at(0).second); |
| 289 | 289 |
| 290 queue()->GetRequests( | 290 queue()->GetRequests( |
| 291 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 291 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 292 PumpLoop(); | 292 PumpLoop(); |
| 293 | 293 |
| 294 // Verify the request is no longer paused. | 294 // Verify the request is no longer paused. |
| 295 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 295 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 296 ASSERT_EQ(1ul, last_requests().size()); | 296 ASSERT_EQ(1ul, last_requests().size()); |
| 297 ASSERT_EQ(SavePageRequest::RequestState::AVAILABLE, | 297 ASSERT_EQ(SavePageRequest::RequestState::AVAILABLE, |
| 298 last_requests().front().request_state()); | 298 last_requests().at(0)->request_state()); |
| 299 } | 299 } |
| 300 | 300 |
| 301 // A longer test populating the request queue with more than one item, properly | 301 // A longer test populating the request queue with more than one item, properly |
| 302 // listing multiple items and removing the right item. | 302 // listing multiple items and removing the right item. |
| 303 TEST_F(RequestQueueTest, MultipleRequestsAddGetRemove) { | 303 TEST_F(RequestQueueTest, MultipleRequestsAddGetRemove) { |
| 304 base::Time creation_time = base::Time::Now(); | 304 base::Time creation_time = base::Time::Now(); |
| 305 SavePageRequest request1( | 305 SavePageRequest request1( |
| 306 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 306 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 307 queue()->AddRequest(request1, base::Bind(&RequestQueueTest::AddRequestDone, | 307 queue()->AddRequest(request1, base::Bind(&RequestQueueTest::AddRequestDone, |
| 308 base::Unretained(this))); | 308 base::Unretained(this))); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 329 PumpLoop(); | 329 PumpLoop(); |
| 330 ASSERT_EQ(1ul, last_remove_results().size()); | 330 ASSERT_EQ(1ul, last_remove_results().size()); |
| 331 ASSERT_EQ(kRequestId, last_remove_results().at(0).first); | 331 ASSERT_EQ(kRequestId, last_remove_results().at(0).first); |
| 332 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0).second); | 332 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_remove_results().at(0).second); |
| 333 | 333 |
| 334 queue()->GetRequests( | 334 queue()->GetRequests( |
| 335 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 335 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 336 PumpLoop(); | 336 PumpLoop(); |
| 337 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 337 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 338 ASSERT_EQ(1ul, last_requests().size()); | 338 ASSERT_EQ(1ul, last_requests().size()); |
| 339 ASSERT_EQ(request2.request_id(), last_requests()[0].request_id()); | 339 ASSERT_EQ(request2.request_id(), last_requests().at(0)->request_id()); |
| 340 } | 340 } |
| 341 | 341 |
| 342 TEST_F(RequestQueueTest, UpdateRequest) { | 342 TEST_F(RequestQueueTest, UpdateRequest) { |
| 343 // First add a request. Retry count will be set to 0. | 343 // First add a request. Retry count will be set to 0. |
| 344 base::Time creation_time = base::Time::Now(); | 344 base::Time creation_time = base::Time::Now(); |
| 345 SavePageRequest request( | 345 SavePageRequest request( |
| 346 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 346 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 347 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, | 347 queue()->AddRequest(request, base::Bind(&RequestQueueTest::AddRequestDone, |
| 348 base::Unretained(this))); | 348 base::Unretained(this))); |
| 349 PumpLoop(); | 349 PumpLoop(); |
| 350 | 350 |
| 351 // Update the request, ensure it succeeded. | 351 // Update the request, ensure it succeeded. |
| 352 request.set_completed_attempt_count(kRetryCount); | 352 request.set_completed_attempt_count(kRetryCount); |
| 353 queue()->UpdateRequest( | 353 queue()->UpdateRequest( |
| 354 request, | 354 request, |
| 355 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); | 355 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 356 PumpLoop(); | 356 PumpLoop(); |
| 357 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_update_result()); | 357 ASSERT_EQ(UpdateRequestResult::SUCCESS, last_update_result()); |
| 358 | 358 |
| 359 // Get the request, and verify the update took effect. | 359 // Get the request, and verify the update took effect. |
| 360 queue()->GetRequests( | 360 queue()->GetRequests( |
| 361 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); | 361 base::Bind(&RequestQueueTest::GetRequestsDone, base::Unretained(this))); |
| 362 PumpLoop(); | 362 PumpLoop(); |
| 363 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); | 363 ASSERT_EQ(GetRequestsResult::SUCCESS, last_get_requests_result()); |
| 364 ASSERT_EQ(1ul, last_requests().size()); | 364 ASSERT_EQ(1ul, last_requests().size()); |
| 365 ASSERT_EQ(kRetryCount, last_requests().front().completed_attempt_count()); | 365 ASSERT_EQ(kRetryCount, last_requests().at(0)->completed_attempt_count()); |
| 366 } | 366 } |
| 367 | 367 |
| 368 TEST_F(RequestQueueTest, UpdateRequestNotPresent) { | 368 TEST_F(RequestQueueTest, UpdateRequestNotPresent) { |
| 369 // First add a request. Retry count will be set to 0. | 369 // First add a request. Retry count will be set to 0. |
| 370 base::Time creation_time = base::Time::Now(); | 370 base::Time creation_time = base::Time::Now(); |
| 371 SavePageRequest request1( | 371 SavePageRequest request1( |
| 372 kRequestId, kUrl, kClientId, creation_time, kUserRequested); | 372 kRequestId, kUrl, kClientId, creation_time, kUserRequested); |
| 373 SavePageRequest request2( | 373 SavePageRequest request2( |
| 374 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); | 374 kRequestId2, kUrl2, kClientId2, creation_time, kUserRequested); |
| 375 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, | 375 queue()->AddRequest(request2, base::Bind(&RequestQueueTest::AddRequestDone, |
| 376 base::Unretained(this))); | 376 base::Unretained(this))); |
| 377 PumpLoop(); | 377 PumpLoop(); |
| 378 | 378 |
| 379 // Try to update request1 when only request2 is in the queue. | 379 // Try to update request1 when only request2 is in the queue. |
| 380 queue()->UpdateRequest( | 380 queue()->UpdateRequest( |
| 381 request1, | 381 request1, |
| 382 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); | 382 base::Bind(&RequestQueueTest::UpdateRequestDone, base::Unretained(this))); |
| 383 PumpLoop(); | 383 PumpLoop(); |
| 384 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); | 384 ASSERT_EQ(UpdateRequestResult::REQUEST_DOES_NOT_EXIST, last_update_result()); |
| 385 } | 385 } |
| 386 | 386 |
| 387 } // namespace offline_pages | 387 } // namespace offline_pages |
| OLD | NEW |