| 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(QueueResults::AddRequestResult result, |
| 265 const SavePageRequest& request); | 266 const SavePageRequest& request); |
| 266 | 267 |
| 267 // Callback for getting requests. | 268 // Callback for getting requests. |
| 268 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 269 void GetRequestsDone(QueueResults::GetRequestsResult result, |
| 269 std::vector<std::unique_ptr<SavePageRequest>> requests); | 270 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 270 | 271 |
| 271 // Callback for removing requests. | 272 // Callback for removing requests. |
| 272 void RemoveRequestsDone(const MultipleItemStatuses& results); | 273 void RemoveRequestsDone(const MultipleItemStatuses& results); |
| 273 | 274 |
| 274 // Callback for getting request statuses. | 275 // Callback for getting request statuses. |
| 275 void GetQueuedRequestsDone( | 276 void GetQueuedRequestsDone( |
| 276 std::vector<std::unique_ptr<SavePageRequest>> requests); | 277 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 277 | 278 |
| 278 void SetupForOfflinerDoneCallbackTest( | 279 void SetupForOfflinerDoneCallbackTest( |
| 279 offline_pages::SavePageRequest* request); | 280 offline_pages::SavePageRequest* request); |
| 280 | 281 |
| 281 void SendOfflinerDoneCallback(const SavePageRequest& request, | 282 void SendOfflinerDoneCallback(const SavePageRequest& request, |
| 282 Offliner::RequestStatus status); | 283 Offliner::RequestStatus status); |
| 283 | 284 |
| 284 RequestQueue::GetRequestsResult last_get_requests_result() const { | 285 QueueResults::GetRequestsResult last_get_requests_result() const { |
| 285 return last_get_requests_result_; | 286 return last_get_requests_result_; |
| 286 } | 287 } |
| 287 | 288 |
| 288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 289 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 289 return last_requests_; | 290 return last_requests_; |
| 290 } | 291 } |
| 291 | 292 |
| 292 const MultipleItemStatuses& last_remove_results() const { | 293 const MultipleItemStatuses& last_remove_results() const { |
| 293 return last_remove_results_; | 294 return last_remove_results_; |
| 294 } | 295 } |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 | 368 |
| 368 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 369 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
| 369 | 370 |
| 370 ObserverStub observer() { return observer_; } | 371 ObserverStub observer() { return observer_; } |
| 371 | 372 |
| 372 bool immediate_schedule_callback_called() const { | 373 bool immediate_schedule_callback_called() const { |
| 373 return immediate_schedule_callback_called_; | 374 return immediate_schedule_callback_called_; |
| 374 } | 375 } |
| 375 | 376 |
| 376 private: | 377 private: |
| 377 RequestQueue::GetRequestsResult last_get_requests_result_; | 378 QueueResults::GetRequestsResult last_get_requests_result_; |
| 378 MultipleItemStatuses last_remove_results_; | 379 MultipleItemStatuses last_remove_results_; |
| 379 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 380 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 380 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 381 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
| 381 base::ThreadTaskRunnerHandle task_runner_handle_; | 382 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 382 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; | 383 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; |
| 383 std::unique_ptr<RequestCoordinator> coordinator_; | 384 std::unique_ptr<RequestCoordinator> coordinator_; |
| 384 OfflinerStub* offliner_; | 385 OfflinerStub* offliner_; |
| 385 base::WaitableEvent waiter_; | 386 base::WaitableEvent waiter_; |
| 386 ObserverStub observer_; | 387 ObserverStub observer_; |
| 387 bool immediate_schedule_callback_called_; | 388 bool immediate_schedule_callback_called_; |
| 388 }; | 389 }; |
| 389 | 390 |
| 390 RequestCoordinatorTest::RequestCoordinatorTest() | 391 RequestCoordinatorTest::RequestCoordinatorTest() |
| 391 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 392 : last_get_requests_result_(QueueResults::GetRequestsResult::STORE_FAILURE), |
| 392 task_runner_(new base::TestMockTimeTaskRunner), | 393 task_runner_(new base::TestMockTimeTaskRunner), |
| 393 task_runner_handle_(task_runner_), | 394 task_runner_handle_(task_runner_), |
| 394 offliner_(nullptr), | 395 offliner_(nullptr), |
| 395 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, | 396 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, |
| 396 base::WaitableEvent::InitialState::NOT_SIGNALED), | 397 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 397 immediate_schedule_callback_called_(false) {} | 398 immediate_schedule_callback_called_(false) {} |
| 398 | 399 |
| 399 RequestCoordinatorTest::~RequestCoordinatorTest() {} | 400 RequestCoordinatorTest::~RequestCoordinatorTest() {} |
| 400 | 401 |
| 401 void RequestCoordinatorTest::SetUp() { | 402 void RequestCoordinatorTest::SetUp() { |
| 402 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); | 403 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); |
| 403 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); | 404 std::unique_ptr<OfflinerFactory> offliner_factory(new OfflinerFactoryStub()); |
| 404 // Save the offliner for use by the tests. | 405 // Save the offliner for use by the tests. |
| 405 offliner_ = | 406 offliner_ = reinterpret_cast<OfflinerStub*>( |
| 406 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); | 407 offliner_factory->GetOffliner(policy.get())); |
| 407 std::unique_ptr<RequestQueueInMemoryStore> | 408 std::unique_ptr<RequestQueueInMemoryStore> |
| 408 store(new RequestQueueInMemoryStore()); | 409 store(new RequestQueueInMemoryStore()); |
| 409 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); | 410 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); |
| 410 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); | 411 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); |
| 411 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); | 412 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); |
| 412 coordinator_.reset(new RequestCoordinator( | 413 coordinator_.reset(new RequestCoordinator( |
| 413 std::move(policy), std::move(factory), std::move(queue), | 414 std::move(policy), std::move(offliner_factory), std::move(queue), |
| 414 std::move(scheduler_stub), network_quality_estimator_.get())); | 415 std::move(scheduler_stub), network_quality_estimator_.get())); |
| 415 coordinator_->AddObserver(&observer_); | 416 coordinator_->AddObserver(&observer_); |
| 416 SetNetworkConnected(true); | 417 SetNetworkConnected(true); |
| 418 std::unique_ptr<PickRequestTaskFactory> picker_factory( |
| 419 new PickRequestTaskFactory( |
| 420 coordinator_->policy(), |
| 421 static_cast<RequestNotifier*>(coordinator_.get()), |
| 422 coordinator_->GetLogger())); |
| 423 coordinator_->queue()->SetPickerFactory(std::move(picker_factory)); |
| 424 SetEffectiveConnectionTypeForTest( |
| 425 net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE); |
| 426 SetNetworkConditionsForTest( |
| 427 net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE); |
| 417 } | 428 } |
| 418 | 429 |
| 419 void RequestCoordinatorTest::PumpLoop() { | 430 void RequestCoordinatorTest::PumpLoop() { |
| 420 task_runner_->RunUntilIdle(); | 431 task_runner_->RunUntilIdle(); |
| 421 } | 432 } |
| 422 | 433 |
| 423 void RequestCoordinatorTest::GetRequestsDone( | 434 void RequestCoordinatorTest::GetRequestsDone( |
| 424 RequestQueue::GetRequestsResult result, | 435 QueueResults::GetRequestsResult result, |
| 425 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 436 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 426 last_get_requests_result_ = result; | 437 last_get_requests_result_ = result; |
| 427 last_requests_ = std::move(requests); | 438 last_requests_ = std::move(requests); |
| 428 } | 439 } |
| 429 | 440 |
| 430 void RequestCoordinatorTest::RemoveRequestsDone( | 441 void RequestCoordinatorTest::RemoveRequestsDone( |
| 431 const MultipleItemStatuses& results) { | 442 const MultipleItemStatuses& results) { |
| 432 last_remove_results_ = results; | 443 last_remove_results_ = results; |
| 433 waiter_.Signal(); | 444 waiter_.Signal(); |
| 434 } | 445 } |
| 435 | 446 |
| 436 void RequestCoordinatorTest::GetQueuedRequestsDone( | 447 void RequestCoordinatorTest::GetQueuedRequestsDone( |
| 437 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 448 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 438 last_requests_ = std::move(requests); | 449 last_requests_ = std::move(requests); |
| 439 waiter_.Signal(); | 450 waiter_.Signal(); |
| 440 } | 451 } |
| 441 | 452 |
| 442 void RequestCoordinatorTest::AddRequestDone( | 453 void RequestCoordinatorTest::AddRequestDone( |
| 443 RequestQueue::AddRequestResult result, | 454 QueueResults::AddRequestResult result, |
| 444 const SavePageRequest& request) {} | 455 const SavePageRequest& request) {} |
| 445 | 456 |
| 446 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( | 457 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( |
| 447 offline_pages::SavePageRequest* request) { | 458 offline_pages::SavePageRequest* request) { |
| 448 // Mark request as started and add it to the queue, | 459 // Mark request as started and add it to the queue, |
| 449 // then wait for callback to finish. | 460 // then wait for callback to finish. |
| 450 request->MarkAttemptStarted(base::Time::Now()); | 461 request->MarkAttemptStarted(base::Time::Now()); |
| 451 coordinator()->queue()->AddRequest( | 462 coordinator()->queue()->AddRequest( |
| 452 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 463 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 453 base::Unretained(this))); | 464 base::Unretained(this))); |
| (...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 // Now whether processing triggered immediately depends on whether test | 1406 // Now whether processing triggered immediately depends on whether test |
| 1396 // is run on svelte device or not. | 1407 // is run on svelte device or not. |
| 1397 if (base::SysInfo::IsLowEndDevice()) { | 1408 if (base::SysInfo::IsLowEndDevice()) { |
| 1398 EXPECT_FALSE(is_busy()); | 1409 EXPECT_FALSE(is_busy()); |
| 1399 } else { | 1410 } else { |
| 1400 EXPECT_TRUE(is_busy()); | 1411 EXPECT_TRUE(is_busy()); |
| 1401 } | 1412 } |
| 1402 } | 1413 } |
| 1403 | 1414 |
| 1404 } // namespace offline_pages | 1415 } // namespace offline_pages |
| OLD | NEW |