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

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: 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 void WaitingCallbackFunction(bool result) { 203 void WaitingCallbackFunction(bool result) {
204 waiter_.Signal(); 204 waiter_.Signal();
205 } 205 }
206 206
207 // Callback for Add requests. 207 // Callback for Add requests.
208 void AddRequestDone(RequestQueue::AddRequestResult result, 208 void AddRequestDone(RequestQueue::AddRequestResult result,
209 const SavePageRequest& request); 209 const SavePageRequest& request);
210 210
211 // Callback for getting requests. 211 // Callback for getting requests.
212 void GetRequestsDone(RequestQueue::GetRequestsResult result, 212 void GetRequestsDone(RequestQueue::GetRequestsResult result,
213 const std::vector<SavePageRequest>& requests); 213 std::vector<std::unique_ptr<SavePageRequest>> requests);
214 214
215 // Callback for removing requests. 215 // Callback for removing requests.
216 void RemoveRequestsDone( 216 void RemoveRequestsDone(
217 const RequestQueue::UpdateMultipleRequestResults& results); 217 const RequestQueue::UpdateMultipleRequestResults& results);
218 218
219 // Callback for getting request statuses. 219 // Callback for getting request statuses.
220 void GetQueuedRequestsDone(const std::vector<SavePageRequest>& requests); 220 void GetQueuedRequestsDone(
221 std::vector<std::unique_ptr<SavePageRequest>> requests);
221 222
222 void SendOfflinerDoneCallback(const SavePageRequest& request, 223 void SendOfflinerDoneCallback(const SavePageRequest& request,
223 Offliner::RequestStatus status); 224 Offliner::RequestStatus status);
224 225
225 RequestQueue::GetRequestsResult last_get_requests_result() const { 226 RequestQueue::GetRequestsResult last_get_requests_result() const {
226 return last_get_requests_result_; 227 return last_get_requests_result_;
227 } 228 }
228 229
229 const std::vector<SavePageRequest>& last_requests() const { 230 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const {
230 return last_requests_; 231 return last_requests_;
231 } 232 }
232 233
233 const RequestQueue::UpdateMultipleRequestResults& last_remove_results() 234 const RequestQueue::UpdateMultipleRequestResults& last_remove_results()
234 const { 235 const {
235 return last_remove_results_; 236 return last_remove_results_;
236 } 237 }
237 238
238 void EnableOfflinerCallback(bool enable) { 239 void EnableOfflinerCallback(bool enable) {
239 offliner_->enable_callback(enable); 240 offliner_->enable_callback(enable);
(...skipping 29 matching lines...) Expand all
269 Offliner::RequestStatus last_offlining_status() const { 270 Offliner::RequestStatus last_offlining_status() const {
270 return coordinator_->last_offlining_status_; 271 return coordinator_->last_offlining_status_;
271 } 272 }
272 273
273 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } 274 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); }
274 275
275 ObserverStub observer() { return observer_; } 276 ObserverStub observer() { return observer_; }
276 277
277 private: 278 private:
278 RequestQueue::GetRequestsResult last_get_requests_result_; 279 RequestQueue::GetRequestsResult last_get_requests_result_;
279 std::vector<SavePageRequest> last_requests_;
280 RequestQueue::UpdateMultipleRequestResults last_remove_results_; 280 RequestQueue::UpdateMultipleRequestResults last_remove_results_;
281 std::vector<std::unique_ptr<SavePageRequest>> last_requests_;
281 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; 282 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_;
282 base::ThreadTaskRunnerHandle task_runner_handle_; 283 base::ThreadTaskRunnerHandle task_runner_handle_;
283 std::unique_ptr<RequestCoordinator> coordinator_; 284 std::unique_ptr<RequestCoordinator> coordinator_;
284 OfflinerStub* offliner_; 285 OfflinerStub* offliner_;
285 base::WaitableEvent waiter_; 286 base::WaitableEvent waiter_;
286 ObserverStub observer_; 287 ObserverStub observer_;
287 }; 288 };
288 289
289 RequestCoordinatorTest::RequestCoordinatorTest() 290 RequestCoordinatorTest::RequestCoordinatorTest()
290 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), 291 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE),
(...skipping 20 matching lines...) Expand all
311 std::move(scheduler_stub))); 312 std::move(scheduler_stub)));
312 coordinator_->AddObserver(&observer_); 313 coordinator_->AddObserver(&observer_);
313 } 314 }
314 315
315 void RequestCoordinatorTest::PumpLoop() { 316 void RequestCoordinatorTest::PumpLoop() {
316 task_runner_->RunUntilIdle(); 317 task_runner_->RunUntilIdle();
317 } 318 }
318 319
319 void RequestCoordinatorTest::GetRequestsDone( 320 void RequestCoordinatorTest::GetRequestsDone(
320 RequestQueue::GetRequestsResult result, 321 RequestQueue::GetRequestsResult result,
321 const std::vector<SavePageRequest>& requests) { 322 std::vector<std::unique_ptr<SavePageRequest>> requests) {
322 last_get_requests_result_ = result; 323 last_get_requests_result_ = result;
323 last_requests_ = requests; 324 last_requests_ = std::move(requests);
324 } 325 }
325 326
326 void RequestCoordinatorTest::RemoveRequestsDone( 327 void RequestCoordinatorTest::RemoveRequestsDone(
327 const RequestQueue::UpdateMultipleRequestResults& results) { 328 const RequestQueue::UpdateMultipleRequestResults& results) {
328 last_remove_results_ = results; 329 last_remove_results_ = results;
329 waiter_.Signal(); 330 waiter_.Signal();
330 } 331 }
331 332
332 void RequestCoordinatorTest::GetQueuedRequestsDone( 333 void RequestCoordinatorTest::GetQueuedRequestsDone(
333 const std::vector<SavePageRequest>& requests) { 334 std::vector<std::unique_ptr<SavePageRequest>> requests) {
334 last_requests_ = requests; 335 last_requests_ = std::move(requests);
335 waiter_.Signal(); 336 waiter_.Signal();
336 } 337 }
337 338
338 void RequestCoordinatorTest::AddRequestDone( 339 void RequestCoordinatorTest::AddRequestDone(
339 RequestQueue::AddRequestResult result, 340 RequestQueue::AddRequestResult result,
340 const SavePageRequest& request) {} 341 const SavePageRequest& request) {}
341 342
342 void RequestCoordinatorTest::SendOfflinerDoneCallback( 343 void RequestCoordinatorTest::SendOfflinerDoneCallback(
343 const SavePageRequest& request, Offliner::RequestStatus status) { 344 const SavePageRequest& request, Offliner::RequestStatus status) {
344 // Using the fact that the test class is a friend, call to the callback 345 // 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
387 // Expect that a request got placed on the queue. 388 // Expect that a request got placed on the queue.
388 coordinator()->queue()->GetRequests( 389 coordinator()->queue()->GetRequests(
389 base::Bind(&RequestCoordinatorTest::GetRequestsDone, 390 base::Bind(&RequestCoordinatorTest::GetRequestsDone,
390 base::Unretained(this))); 391 base::Unretained(this)));
391 392
392 // Wait for callbacks to finish, both request queue and offliner. 393 // Wait for callbacks to finish, both request queue and offliner.
393 PumpLoop(); 394 PumpLoop();
394 395
395 // Check the request queue is as expected. 396 // Check the request queue is as expected.
396 EXPECT_EQ(1UL, last_requests().size()); 397 EXPECT_EQ(1UL, last_requests().size());
397 EXPECT_EQ(kUrl1, last_requests()[0].url()); 398 EXPECT_EQ(kUrl1, last_requests().at(0)->url());
398 EXPECT_EQ(kClientId1, last_requests()[0].client_id()); 399 EXPECT_EQ(kClientId1, last_requests().at(0)->client_id());
399 400
400 // Expect that the scheduler got notified. 401 // Expect that the scheduler got notified.
401 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>( 402 SchedulerStub* scheduler_stub = reinterpret_cast<SchedulerStub*>(
402 coordinator()->scheduler()); 403 coordinator()->scheduler());
403 EXPECT_TRUE(scheduler_stub->schedule_called()); 404 EXPECT_TRUE(scheduler_stub->schedule_called());
404 EXPECT_EQ(coordinator() 405 EXPECT_EQ(coordinator()
405 ->GetTriggerConditions(last_requests()[0].user_requested()) 406 ->GetTriggerConditions(last_requests()[0]->user_requested())
406 .minimum_battery_percentage, 407 .minimum_battery_percentage,
407 scheduler_stub->conditions()->minimum_battery_percentage); 408 scheduler_stub->conditions()->minimum_battery_percentage);
408 409
409 // Check that the observer got the notification that a page is available 410 // Check that the observer got the notification that a page is available
410 EXPECT_TRUE(observer().added_called()); 411 EXPECT_TRUE(observer().added_called());
411 } 412 }
412 413
413 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) { 414 TEST_F(RequestCoordinatorTest, OfflinerDoneRequestSucceeded) {
414 // Add a request to the queue, wait for callbacks to finish. 415 // Add a request to the queue, wait for callbacks to finish.
415 offline_pages::SavePageRequest request( 416 offline_pages::SavePageRequest request(
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 PumpLoop(); 544 PumpLoop();
544 545
545 // Verify the request is not removed from the queue, and wait for callbacks. 546 // Verify the request is not removed from the queue, and wait for callbacks.
546 coordinator()->queue()->GetRequests(base::Bind( 547 coordinator()->queue()->GetRequests(base::Bind(
547 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 548 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
548 PumpLoop(); 549 PumpLoop();
549 550
550 // Request no longer in the queue (for single attempt policy). 551 // Request no longer in the queue (for single attempt policy).
551 EXPECT_EQ(1UL, last_requests().size()); 552 EXPECT_EQ(1UL, last_requests().size());
552 // Verify foreground cancel not counted as an attempt after all. 553 // Verify foreground cancel not counted as an attempt after all.
553 const SavePageRequest& found_request = last_requests().front(); 554 EXPECT_EQ(0L, last_requests().at(0)->completed_attempt_count());
554 EXPECT_EQ(0L, found_request.completed_attempt_count());
555 } 555 }
556 556
557 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) { 557 TEST_F(RequestCoordinatorTest, OfflinerDonePrerenderingCancel) {
558 // Add a request to the queue, wait for callbacks to finish. 558 // Add a request to the queue, wait for callbacks to finish.
559 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1, 559 offline_pages::SavePageRequest request(kRequestId1, kUrl1, kClientId1,
560 base::Time::Now(), kUserRequested); 560 base::Time::Now(), kUserRequested);
561 request.MarkAttemptStarted(base::Time::Now()); 561 request.MarkAttemptStarted(base::Time::Now());
562 coordinator()->queue()->AddRequest( 562 coordinator()->queue()->AddRequest(
563 request, base::Bind(&RequestCoordinatorTest::AddRequestDone, 563 request, base::Bind(&RequestCoordinatorTest::AddRequestDone,
564 base::Unretained(this))); 564 base::Unretained(this)));
(...skipping 17 matching lines...) Expand all
582 PumpLoop(); 582 PumpLoop();
583 583
584 // Verify the request is not removed from the queue, and wait for callbacks. 584 // Verify the request is not removed from the queue, and wait for callbacks.
585 coordinator()->queue()->GetRequests(base::Bind( 585 coordinator()->queue()->GetRequests(base::Bind(
586 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this))); 586 &RequestCoordinatorTest::GetRequestsDone, base::Unretained(this)));
587 PumpLoop(); 587 PumpLoop();
588 588
589 // Request still in the queue. 589 // Request still in the queue.
590 EXPECT_EQ(1UL, last_requests().size()); 590 EXPECT_EQ(1UL, last_requests().size());
591 // Verify prerendering cancel not counted as an attempt after all. 591 // Verify prerendering cancel not counted as an attempt after all.
592 const SavePageRequest& found_request = last_requests().front(); 592 const std::unique_ptr<SavePageRequest>& found_request =
593 EXPECT_EQ(0L, found_request.completed_attempt_count()); 593 last_requests().front();
594 EXPECT_EQ(0L, found_request->completed_attempt_count());
594 } 595 }
595 596
596 // If one item completes, and there are no more user requeted items left, 597 // If one item completes, and there are no more user requeted items left,
597 // we should make a scheduler entry for a non-user requested item. 598 // we should make a scheduler entry for a non-user requested item.
598 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) { 599 TEST_F(RequestCoordinatorTest, RequestNotPickedNonUserRequestedItemsRemain) {
599 // Call start processing just to set up a scheduler callback. 600 // Call start processing just to set up a scheduler callback.
600 DeviceConditions device_conditions(false, 75, 601 DeviceConditions device_conditions(false, 75,
601 net::NetworkChangeNotifier::CONNECTION_3G); 602 net::NetworkChangeNotifier::CONNECTION_3G);
602 base::Callback<void(bool)> callback = base::Bind( 603 base::Callback<void(bool)> callback = base::Bind(
603 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this)); 604 &RequestCoordinatorTest::EmptyCallbackFunction, base::Unretained(this));
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
891 coordinator()->GetAllRequests(base::Bind( 892 coordinator()->GetAllRequests(base::Bind(
892 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this))); 893 &RequestCoordinatorTest::GetQueuedRequestsDone, base::Unretained(this)));
893 PumpLoop(); 894 PumpLoop();
894 895
895 // Wait for async get to finish. 896 // Wait for async get to finish.
896 WaitForCallback(); 897 WaitForCallback();
897 PumpLoop(); 898 PumpLoop();
898 899
899 // Check that the statuses found in the callback match what we expect. 900 // Check that the statuses found in the callback match what we expect.
900 EXPECT_EQ(2UL, last_requests().size()); 901 EXPECT_EQ(2UL, last_requests().size());
901 EXPECT_EQ(kRequestId1, last_requests().at(0).request_id()); 902 EXPECT_EQ(kRequestId1, last_requests().at(0)->request_id());
902 EXPECT_EQ(kRequestId2, last_requests().at(1).request_id()); 903 EXPECT_EQ(kRequestId2, last_requests().at(1)->request_id());
903 } 904 }
904 905
905 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) { 906 TEST_F(RequestCoordinatorTest, PauseAndResumeObserver) {
906 // Add a request to the queue. 907 // Add a request to the queue.
907 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1, 908 offline_pages::SavePageRequest request1(kRequestId1, kUrl1, kClientId1,
908 base::Time::Now(), kUserRequested); 909 base::Time::Now(), kUserRequested);
909 coordinator()->queue()->AddRequest( 910 coordinator()->queue()->AddRequest(
910 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone, 911 request1, base::Bind(&RequestCoordinatorTest::AddRequestDone,
911 base::Unretained(this))); 912 base::Unretained(this)));
912 PumpLoop(); 913 PumpLoop();
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G); 1008 net::NetworkChangeNotifier::ConnectionType::CONNECTION_3G);
1008 1009
1009 // Resume the request while connected. 1010 // Resume the request while connected.
1010 coordinator()->ResumeRequests(request_ids); 1011 coordinator()->ResumeRequests(request_ids);
1011 EXPECT_FALSE(is_busy()); 1012 EXPECT_FALSE(is_busy());
1012 PumpLoop(); 1013 PumpLoop();
1013 EXPECT_TRUE(is_busy()); 1014 EXPECT_TRUE(is_busy());
1014 } 1015 }
1015 1016
1016 } // namespace offline_pages 1017 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698