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 |