| 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 <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/bind.h" | 12 #include "base/bind.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/synchronization/waitable_event.h" | 15 #include "base/synchronization/waitable_event.h" |
| 16 #include "base/sys_info.h" | 16 #include "base/sys_info.h" |
| 17 #include "base/test/test_mock_time_task_runner.h" | 17 #include "base/test/test_mock_time_task_runner.h" |
| 18 #include "base/threading/thread_task_runner_handle.h" | 18 #include "base/threading/thread_task_runner_handle.h" |
| 19 #include "base/time/time.h" | 19 #include "base/time/time.h" |
| 20 #include "components/offline_pages/background/device_conditions.h" | 20 #include "components/offline_pages/background/device_conditions.h" |
| 21 #include "components/offline_pages/background/offliner.h" | 21 #include "components/offline_pages/background/offliner.h" |
| 22 #include "components/offline_pages/background/offliner_factory.h" | 22 #include "components/offline_pages/background/offliner_factory.h" |
| 23 #include "components/offline_pages/background/offliner_policy.h" | 23 #include "components/offline_pages/background/offliner_policy.h" |
| 24 #include "components/offline_pages/background/pick_request_task_factory.h" |
| 24 #include "components/offline_pages/background/request_queue.h" | 25 #include "components/offline_pages/background/request_queue.h" |
| 25 #include "components/offline_pages/background/request_queue_in_memory_store.h" | 26 #include "components/offline_pages/background/request_queue_in_memory_store.h" |
| 26 #include "components/offline_pages/background/save_page_request.h" | 27 #include "components/offline_pages/background/save_page_request.h" |
| 27 #include "components/offline_pages/background/scheduler.h" | 28 #include "components/offline_pages/background/scheduler.h" |
| 28 #include "testing/gtest/include/gtest/gtest.h" | 29 #include "testing/gtest/include/gtest/gtest.h" |
| 29 | 30 |
| 30 namespace offline_pages { | 31 namespace offline_pages { |
| 31 | 32 |
| 32 namespace { | 33 namespace { |
| 33 // put test constants here | 34 // put test constants here |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 // Callback function which releases a wait for it. | 255 // Callback function which releases a wait for it. |
| 255 void WaitingCallbackFunction(bool result) { | 256 void WaitingCallbackFunction(bool result) { |
| 256 waiter_.Signal(); | 257 waiter_.Signal(); |
| 257 } | 258 } |
| 258 | 259 |
| 259 net::NetworkChangeNotifier::ConnectionType GetConnectionType() { | 260 net::NetworkChangeNotifier::ConnectionType GetConnectionType() { |
| 260 return coordinator()->GetConnectionType(); | 261 return coordinator()->GetConnectionType(); |
| 261 } | 262 } |
| 262 | 263 |
| 263 // Callback for Add requests. | 264 // Callback for Add requests. |
| 264 void AddRequestDone(RequestQueue::AddRequestResult result, | 265 void AddRequestDone(AddRequestResult result, const SavePageRequest& request); |
| 265 const SavePageRequest& request); | |
| 266 | 266 |
| 267 // Callback for getting requests. | 267 // Callback for getting requests. |
| 268 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 268 void GetRequestsDone(GetRequestsResult result, |
| 269 std::vector<std::unique_ptr<SavePageRequest>> requests); | 269 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 270 | 270 |
| 271 // Callback for removing requests. | 271 // Callback for removing requests. |
| 272 void RemoveRequestsDone(const MultipleItemStatuses& results); | 272 void RemoveRequestsDone(const MultipleItemStatuses& results); |
| 273 | 273 |
| 274 // Callback for getting request statuses. | 274 // Callback for getting request statuses. |
| 275 void GetQueuedRequestsDone( | 275 void GetQueuedRequestsDone( |
| 276 std::vector<std::unique_ptr<SavePageRequest>> requests); | 276 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 277 | 277 |
| 278 void SetupForOfflinerDoneCallbackTest( | 278 void SetupForOfflinerDoneCallbackTest( |
| 279 offline_pages::SavePageRequest* request); | 279 offline_pages::SavePageRequest* request); |
| 280 | 280 |
| 281 void SendOfflinerDoneCallback(const SavePageRequest& request, | 281 void SendOfflinerDoneCallback(const SavePageRequest& request, |
| 282 Offliner::RequestStatus status); | 282 Offliner::RequestStatus status); |
| 283 | 283 |
| 284 RequestQueue::GetRequestsResult last_get_requests_result() const { | 284 GetRequestsResult last_get_requests_result() const { |
| 285 return last_get_requests_result_; | 285 return last_get_requests_result_; |
| 286 } | 286 } |
| 287 | 287 |
| 288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 289 return last_requests_; | 289 return last_requests_; |
| 290 } | 290 } |
| 291 | 291 |
| 292 const MultipleItemStatuses& last_remove_results() const { | 292 const MultipleItemStatuses& last_remove_results() const { |
| 293 return last_remove_results_; | 293 return last_remove_results_; |
| 294 } | 294 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 | 367 |
| 368 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 368 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
| 369 | 369 |
| 370 ObserverStub observer() { return observer_; } | 370 ObserverStub observer() { return observer_; } |
| 371 | 371 |
| 372 bool immediate_schedule_callback_called() const { | 372 bool immediate_schedule_callback_called() const { |
| 373 return immediate_schedule_callback_called_; | 373 return immediate_schedule_callback_called_; |
| 374 } | 374 } |
| 375 | 375 |
| 376 private: | 376 private: |
| 377 RequestQueue::GetRequestsResult last_get_requests_result_; | 377 GetRequestsResult last_get_requests_result_; |
| 378 MultipleItemStatuses last_remove_results_; | 378 MultipleItemStatuses last_remove_results_; |
| 379 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 379 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 380 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 380 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
| 381 base::ThreadTaskRunnerHandle task_runner_handle_; | 381 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 382 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; | 382 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; |
| 383 std::unique_ptr<RequestCoordinator> coordinator_; | 383 std::unique_ptr<RequestCoordinator> coordinator_; |
| 384 OfflinerStub* offliner_; | 384 OfflinerStub* offliner_; |
| 385 base::WaitableEvent waiter_; | 385 base::WaitableEvent waiter_; |
| 386 ObserverStub observer_; | 386 ObserverStub observer_; |
| 387 bool immediate_schedule_callback_called_; | 387 bool immediate_schedule_callback_called_; |
| 388 }; | 388 }; |
| 389 | 389 |
| 390 RequestCoordinatorTest::RequestCoordinatorTest() | 390 RequestCoordinatorTest::RequestCoordinatorTest() |
| 391 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 391 : last_get_requests_result_(GetRequestsResult::STORE_FAILURE), |
| 392 task_runner_(new base::TestMockTimeTaskRunner), | 392 task_runner_(new base::TestMockTimeTaskRunner), |
| 393 task_runner_handle_(task_runner_), | 393 task_runner_handle_(task_runner_), |
| 394 offliner_(nullptr), | 394 offliner_(nullptr), |
| 395 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, | 395 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, |
| 396 base::WaitableEvent::InitialState::NOT_SIGNALED), | 396 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 397 immediate_schedule_callback_called_(false) {} | 397 immediate_schedule_callback_called_(false) {} |
| 398 | 398 |
| 399 RequestCoordinatorTest::~RequestCoordinatorTest() {} | 399 RequestCoordinatorTest::~RequestCoordinatorTest() {} |
| 400 | 400 |
| 401 void RequestCoordinatorTest::SetUp() { | 401 void RequestCoordinatorTest::SetUp() { |
| 402 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); | 402 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); |
| 403 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); | 403 std::unique_ptr<OfflinerFactory> offliner_factory(new OfflinerFactoryStub()); |
| 404 // Save the offliner for use by the tests. | 404 // Save the offliner for use by the tests. |
| 405 offliner_ = | 405 offliner_ = reinterpret_cast<OfflinerStub*>( |
| 406 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); | 406 offliner_factory->GetOffliner(policy.get())); |
| 407 std::unique_ptr<RequestQueueInMemoryStore> | 407 std::unique_ptr<RequestQueueInMemoryStore> |
| 408 store(new RequestQueueInMemoryStore()); | 408 store(new RequestQueueInMemoryStore()); |
| 409 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); | 409 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); |
| 410 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); | 410 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); |
| 411 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); | 411 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); |
| 412 coordinator_.reset(new RequestCoordinator( | 412 coordinator_.reset(new RequestCoordinator( |
| 413 std::move(policy), std::move(factory), std::move(queue), | 413 std::move(policy), std::move(offliner_factory), std::move(queue), |
| 414 std::move(scheduler_stub), network_quality_estimator_.get())); | 414 std::move(scheduler_stub), network_quality_estimator_.get())); |
| 415 coordinator_->AddObserver(&observer_); | 415 coordinator_->AddObserver(&observer_); |
| 416 SetNetworkConnected(true); | 416 SetNetworkConnected(true); |
| 417 std::unique_ptr<PickRequestTaskFactory> picker_factory( |
| 418 new PickRequestTaskFactory( |
| 419 coordinator_->policy(), |
| 420 static_cast<RequestNotifier*>(coordinator_.get()), |
| 421 coordinator_->GetLogger())); |
| 422 coordinator_->queue()->SetPickerFactory(std::move(picker_factory)); |
| 417 } | 423 } |
| 418 | 424 |
| 419 void RequestCoordinatorTest::PumpLoop() { | 425 void RequestCoordinatorTest::PumpLoop() { |
| 420 task_runner_->RunUntilIdle(); | 426 task_runner_->RunUntilIdle(); |
| 421 } | 427 } |
| 422 | 428 |
| 423 void RequestCoordinatorTest::GetRequestsDone( | 429 void RequestCoordinatorTest::GetRequestsDone( |
| 424 RequestQueue::GetRequestsResult result, | 430 GetRequestsResult result, |
| 425 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 431 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 426 last_get_requests_result_ = result; | 432 last_get_requests_result_ = result; |
| 427 last_requests_ = std::move(requests); | 433 last_requests_ = std::move(requests); |
| 428 } | 434 } |
| 429 | 435 |
| 430 void RequestCoordinatorTest::RemoveRequestsDone( | 436 void RequestCoordinatorTest::RemoveRequestsDone( |
| 431 const MultipleItemStatuses& results) { | 437 const MultipleItemStatuses& results) { |
| 432 last_remove_results_ = results; | 438 last_remove_results_ = results; |
| 433 waiter_.Signal(); | 439 waiter_.Signal(); |
| 434 } | 440 } |
| 435 | 441 |
| 436 void RequestCoordinatorTest::GetQueuedRequestsDone( | 442 void RequestCoordinatorTest::GetQueuedRequestsDone( |
| 437 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 443 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 438 last_requests_ = std::move(requests); | 444 last_requests_ = std::move(requests); |
| 439 waiter_.Signal(); | 445 waiter_.Signal(); |
| 440 } | 446 } |
| 441 | 447 |
| 442 void RequestCoordinatorTest::AddRequestDone( | 448 void RequestCoordinatorTest::AddRequestDone(AddRequestResult result, |
| 443 RequestQueue::AddRequestResult result, | 449 const SavePageRequest& request) {} |
| 444 const SavePageRequest& request) {} | |
| 445 | 450 |
| 446 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( | 451 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( |
| 447 offline_pages::SavePageRequest* request) { | 452 offline_pages::SavePageRequest* request) { |
| 448 // Mark request as started and add it to the queue, | 453 // Mark request as started and add it to the queue, |
| 449 // then wait for callback to finish. | 454 // then wait for callback to finish. |
| 450 request->MarkAttemptStarted(base::Time::Now()); | 455 request->MarkAttemptStarted(base::Time::Now()); |
| 451 coordinator()->queue()->AddRequest( | 456 coordinator()->queue()->AddRequest( |
| 452 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 457 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 453 base::Unretained(this))); | 458 base::Unretained(this))); |
| 454 PumpLoop(); | 459 PumpLoop(); |
| (...skipping 957 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1412 // Now whether processing triggered immediately depends on whether test | 1417 // Now whether processing triggered immediately depends on whether test |
| 1413 // is run on svelte device or not. | 1418 // is run on svelte device or not. |
| 1414 if (base::SysInfo::IsLowEndDevice()) { | 1419 if (base::SysInfo::IsLowEndDevice()) { |
| 1415 EXPECT_FALSE(is_busy()); | 1420 EXPECT_FALSE(is_busy()); |
| 1416 } else { | 1421 } else { |
| 1417 EXPECT_TRUE(is_busy()); | 1422 EXPECT_TRUE(is_busy()); |
| 1418 } | 1423 } |
| 1419 } | 1424 } |
| 1420 | 1425 |
| 1421 } // namespace offline_pages | 1426 } // namespace offline_pages |
| OLD | NEW |