Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(520)

Side by Side Diff: components/offline_pages/background/request_coordinator_unittest.cc

Issue 2262423002: Use a vector of smart pointers for callback return type. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: another merge. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 void WaitingCallbackFunction(bool result) { 201 void WaitingCallbackFunction(bool result) {
202 waiter_.Signal(); 202 waiter_.Signal();
203 } 203 }
204 204
205 // Callback for Add requests. 205 // Callback for Add requests.
206 void AddRequestDone(RequestQueue::AddRequestResult result, 206 void AddRequestDone(RequestQueue::AddRequestResult result,
207 const SavePageRequest& request); 207 const SavePageRequest& request);
208 208
209 // Callback for getting requests. 209 // Callback for getting requests.
210 void GetRequestsDone(RequestQueue::GetRequestsResult result, 210 void GetRequestsDone(RequestQueue::GetRequestsResult result,
211 const std::vector<SavePageRequest>& requests); 211 std::vector<std::unique_ptr<SavePageRequest>> requests);
212 212
213 // Callback for removing requests. 213 // Callback for removing requests.
214 void RemoveRequestsDone( 214 void RemoveRequestsDone(
215 const RequestQueue::UpdateMultipleRequestResults& results); 215 const RequestQueue::UpdateMultipleRequestResults& results);
216 216
217 // Callback for getting request statuses. 217 // Callback for getting request statuses.
218 void GetQueuedRequestsDone(const std::vector<SavePageRequest>& requests); 218 void GetQueuedRequestsDone(
219 std::vector<std::unique_ptr<SavePageRequest>> requests);
219 220
220 void SendOfflinerDoneCallback(const SavePageRequest& request, 221 void SendOfflinerDoneCallback(const SavePageRequest& request,
221 Offliner::RequestStatus status); 222 Offliner::RequestStatus status);
222 223
223 RequestQueue::GetRequestsResult last_get_requests_result() const { 224 RequestQueue::GetRequestsResult last_get_requests_result() const {
224 return last_get_requests_result_; 225 return last_get_requests_result_;
225 } 226 }
226 227
227 const std::vector<SavePageRequest>& last_requests() const { 228 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
228 return last_requests_; 229 return last_requests_;
229 } 230 }
230 231
231 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() 232 const RequestQueue::UpdateMultipleRequestResults& last_remove_results()
232 const { 233 const {
233 return last_remove_results_; 234 return last_remove_results_;
234 } 235 }
235 236
236 void EnableOfflinerCallback(bool enable) { 237 void EnableOfflinerCallback(bool enable) {
237 offliner_->enable_callback(enable); 238 offliner_->enable_callback(enable);
(...skipping 29 matching lines...) Expand all
267 Offliner::RequestStatus last_offlining_status() const { 268 Offliner::RequestStatus last_offlining_status() const {
268 return coordinator_->last_offlining_status_; 269 return coordinator_->last_offlining_status_;
269 } 270 }
270 271
271 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } 272 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); }
272 273
273 ObserverStub observer() { return observer_; } 274 ObserverStub observer() { return observer_; }
274 275
275 private: 276 private:
276 RequestQueue::GetRequestsResult last_get_requests_result_; 277 RequestQueue::GetRequestsResult last_get_requests_result_;
277 std::vector<SavePageRequest> last_requests_;
278 RequestQueue::UpdateMultipleRequestResults last_remove_results_; 278 RequestQueue::UpdateMultipleRequestResults last_remove_results_;
279 std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
279 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 280 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
280 base::ThreadTaskRunnerHandle task_runner_handle_; 281 base::ThreadTaskRunnerHandle task_runner_handle_;
281 std::unique_ptr<RequestCoordinator> coordinator_; 282 std::unique_ptr<RequestCoordinator> coordinator_;
282 OfflinerStub* offliner_; 283 OfflinerStub* offliner_;
283 base::WaitableEvent waiter_; 284 base::WaitableEvent waiter_;
284 ObserverStub observer_; 285 ObserverStub observer_;
285 }; 286 };
286 287
287 RequestCoordinatorTest::RequestCoordinatorTest() 288 RequestCoordinatorTest::RequestCoordinatorTest()
288 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), 289 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE),
(...skipping 20 matching lines...) Expand all
309 std::move(scheduler_stub))); 310 std::move(scheduler_stub)));
310 coordinator_->AddObserver(&observer_); 311 coordinator_->AddObserver(&observer_);
311 } 312 }
312 313
313 void RequestCoordinatorTest::PumpLoop() { 314 void RequestCoordinatorTest::PumpLoop() {
314 task_runner_->RunUntilIdle(); 315 task_runner_->RunUntilIdle();
315 } 316 }
316 317
317 void RequestCoordinatorTest::GetRequestsDone( 318 void RequestCoordinatorTest::GetRequestsDone(
318 RequestQueue::GetRequestsResult result, 319 RequestQueue::GetRequestsResult result,
319 const std::vector<SavePageRequest>& requests) { 320 std::vector<std::unique_ptr<SavePageRequest>> requests) {
320 last_get_requests_result_ = result; 321 last_get_requests_result_ = result;
321 last_requests_ = requests; 322 last_requests_ = std::move(requests);
322 } 323 }
323 324
324 void RequestCoordinatorTest::RemoveRequestsDone( 325 void RequestCoordinatorTest::RemoveRequestsDone(
325 const RequestQueue::UpdateMultipleRequestResults& results) { 326 const RequestQueue::UpdateMultipleRequestResults& results) {
326 last_remove_results_ = results; 327 last_remove_results_ = results;
327 waiter_.Signal(); 328 waiter_.Signal();
328 } 329 }
329 330
330 void RequestCoordinatorTest::GetQueuedRequestsDone( 331 void RequestCoordinatorTest::GetQueuedRequestsDone(
331 const std::vector<SavePageRequest>& requests) { 332 std::vector<std::unique_ptr<SavePageRequest>> requests) {
332 last_requests_ = requests; 333 last_requests_ = std::move(requests);
333 waiter_.Signal(); 334 waiter_.Signal();
334 } 335 }
335 336
336 void RequestCoordinatorTest::AddRequestDone( 337 void RequestCoordinatorTest::AddRequestDone(
337 RequestQueue::AddRequestResult result, 338 RequestQueue::AddRequestResult result,
338 const SavePageRequest& request) {} 339 const SavePageRequest& request) {}
339 340
340 void RequestCoordinatorTest::SendOfflinerDoneCallback( 341 void RequestCoordinatorTest::SendOfflinerDoneCallback(
341 const SavePageRequest& request, Offliner::RequestStatus status) { 342 const SavePageRequest& request, Offliner::RequestStatus status) {
342 // Using the fact that the test class is a friend, call to the callback 343 // 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
385 // Expect that a request got placed on the queue. 386 // Expect that a request got placed on the queue.
386 coordinator()->queue()->GetRequests( 387 coordinator()->queue()->GetRequests(
387 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 388 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
388 base::Unretained(this))); 389 base::Unretained(this)));
389 390
390 // Wait for callbacks to finish, both request queue and offliner. 391 // Wait for callbacks to finish, both request queue and offliner.
391 PumpLoop(); 392 PumpLoop();
392 393
393 // Check the request queue is as expected. 394 // Check the request queue is as expected.
394 EXPECT_EQ(1UL, last_requests().size()); 395 EXPECT_EQ(1UL, last_requests().size());
395 EXPECT_EQ(kUrl1, last_requests()[0].url()); 396 EXPECT_EQ(kUrl1, last_requests().at(0)->url());
396 EXPECT_EQ(kClientId1, last_requests()[0].client_id()); 397 EXPECT_EQ(kClientId1, last_requests().at(0)->client_id());
397 398
398 // Expect that the scheduler got notified. 399 // Expect that the scheduler got notified.
399 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( 400 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>(
400 coordinator()->scheduler()); 401 coordinator()->scheduler());
401 EXPECT_TRUE(scheduler_stub->schedule_called()); 402 EXPECT_TRUE(scheduler_stub->schedule_called());
402 EXPECT_EQ(coordinator() 403 EXPECT_EQ(coordinator()
403 ->GetTriggerConditions(last_requests()[0].user_requested()) 404 ->GetTriggerConditions(last_requests()[0]->user_requested())
404 .minimum_battery_percentage, 405 .minimum_battery_percentage,
405 scheduler_stub->conditions()->minimum_battery_percentage); 406 scheduler_stub->conditions()->minimum_battery_percentage);
406 407
407 // Check that the observer got the notification that a page is available 408 // Check that the observer got the notification that a page is available
408 EXPECT_TRUE(observer().added_called()); 409 EXPECT_TRUE(observer().added_called());
409 } 410 }
410 411
411 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { 412 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) {
412 // Add a request to the queue, wait for callbacks to finish. 413 // Add a request to the queue, wait for callbacks to finish.
413 offline_pages::SavePageRequest request( 414 offline_pages::SavePageRequest request(
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 PumpLoop(); 542 PumpLoop();
542 543
543 // Verify the request is not removed from the queue, and wait for callbacks. 544 // Verify the request is not removed from the queue, and wait for callbacks.
544 coordinator()->queue()->GetRequests(base::Bind( 545 coordinator()->queue()->GetRequests(base::Bind(
545 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 546 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
546 PumpLoop(); 547 PumpLoop();
547 548
548 // Request no longer in the queue (for single attempt policy). 549 // Request no longer in the queue (for single attempt policy).
549 EXPECT_EQ(1UL, last_requests().size()); 550 EXPECT_EQ(1UL, last_requests().size());
550 // Verify foreground cancel not counted as an attempt after all. 551 // Verify foreground cancel not counted as an attempt after all.
551 const SavePageRequest& found_request = last_requests().front(); 552 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count());
552 EXPECT_EQ(0L, found_request.completed_attempt_count());
553 } 553 }
554 554
555 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { 555 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) {
556 // Add a request to the queue, wait for callbacks to finish. 556 // Add a request to the queue, wait for callbacks to finish.
557 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, 557 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1,
558 base::Time::Now(), kUserRequested); 558 base::Time::Now(), kUserRequested);
559 request.MarkAttemptStarted(base::Time::Now()); 559 request.MarkAttemptStarted(base::Time::Now());
560 coordinator()->queue()->AddRequest( 560 coordinator()->queue()->AddRequest(
561 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, 561 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
562 base::Unretained(this))); 562 base::Unretained(this)));
(...skipping 17 matching lines...) Expand all
580 PumpLoop(); 580 PumpLoop();
581 581
582 // Verify the request is not removed from the queue, and wait for callbacks. 582 // Verify the request is not removed from the queue, and wait for callbacks.
583 coordinator()->queue()->GetRequests(base::Bind( 583 coordinator()->queue()->GetRequests(base::Bind(
584 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 584 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
585 PumpLoop(); 585 PumpLoop();
586 586
587 // Request still in the queue. 587 // Request still in the queue.
588 EXPECT_EQ(1UL, last_requests().size()); 588 EXPECT_EQ(1UL, last_requests().size());
589 // Verify prerendering cancel not counted as an attempt after all. 589 // Verify prerendering cancel not counted as an attempt after all.
590 const SavePageRequest& found_request = last_requests().front(); 590 const std::unique_ptr<SavePageRequest>& found_request =
591 EXPECT_EQ(0L, found_request.completed_attempt_count()); 591 last_requests().front();
592 EXPECT_EQ(0L, found_request->completed_attempt_count());
592 } 593 }
593 594
594 // If one item completes, and there are no more user requeted items left, 595 // If one item completes, and there are no more user requeted items left,
595 // we should make a scheduler entry for a non-user requested item. 596 // we should make a scheduler entry for a non-user requested item.
596 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { 597 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) {
597 // Call start processing just to set up a scheduler callback. 598 // Call start processing just to set up a scheduler callback.
598 DeviceConditions device_conditions(false, 75, 599 DeviceConditions device_conditions(false, 75,
599 net::NetworkChangeNotifier::CONNECTION_3G); 600 net::NetworkChangeNotifier::CONNECTION_3G);
600 base::Callback<void(bool)> callback = base::Bind( 601 base::Callback<void(bool)> callback = base::Bind(
601 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); 602 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this));
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 coordinator()->GetAllRequests(base::Bind( 881 coordinator()->GetAllRequests(base::Bind(
881 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); 882 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this)));
882 PumpLoop(); 883 PumpLoop();
883 884
884 // Wait for async get to finish. 885 // Wait for async get to finish.
885 WaitForCallback(); 886 WaitForCallback();
886 PumpLoop(); 887 PumpLoop();
887 888
888 // Check that the statuses found in the callback match what we expect. 889 // Check that the statuses found in the callback match what we expect.
889 EXPECT_EQ(2UL, last_requests().size()); 890 EXPECT_EQ(2UL, last_requests().size());
890 EXPECT_EQ(kRequestId1, last_requests().at(0).request_id()); 891 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id());
891 EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); 892 EXPECT_EQ(kRequestId2, last_requests().at(1)->request_id());
892 } 893 }
893 894
894 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { 895 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) {
895 // Add a request to the queue. 896 // Add a request to the queue.
896 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, 897 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1,
897 base::Time::Now(), kUserRequested); 898 base::Time::Now(), kUserRequested);
898 coordinator()->queue()->AddRequest( 899 coordinator()->queue()->AddRequest(
899 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, 900 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone,
900 base::Unretained(this))); 901 base::Unretained(this)));
901 PumpLoop(); 902 PumpLoop();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); 997 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G);
997 998
998 // Resume the request while connected. 999 // Resume the request while connected.
999 coordinator()->ResumeRequests(request_ids); 1000 coordinator()->ResumeRequests(request_ids);
1000 EXPECT_FALSE(is_busy()); 1001 EXPECT_FALSE(is_busy());
1001 PumpLoop(); 1002 PumpLoop();
1002 EXPECT_TRUE(is_busy()); 1003 EXPECT_TRUE(is_busy());
1003 } 1004 }
1004 1005
1005 } // namespace offline_pages 1006 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698