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 |