| 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_builder.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 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 // Callback function which releases a wait for it. | 254 // Callback function which releases a wait for it. |
| 254 void WaitingCallbackFunction(bool result) { | 255 void WaitingCallbackFunction(bool result) { |
| 255 waiter_.Signal(); | 256 waiter_.Signal(); |
| 256 } | 257 } |
| 257 | 258 |
| 258 net::NetworkChangeNotifier::ConnectionType GetConnectionType() { | 259 net::NetworkChangeNotifier::ConnectionType GetConnectionType() { |
| 259 return coordinator()->GetConnectionType(); | 260 return coordinator()->GetConnectionType(); |
| 260 } | 261 } |
| 261 | 262 |
| 262 // Callback for Add requests. | 263 // Callback for Add requests. |
| 263 void AddRequestDone(RequestQueue::AddRequestResult result, | 264 void AddRequestDone(QueueResults::AddRequestResult result, |
| 264 const SavePageRequest& request); | 265 const SavePageRequest& request); |
| 265 | 266 |
| 266 // Callback for getting requests. | 267 // Callback for getting requests. |
| 267 void GetRequestsDone(RequestQueue::GetRequestsResult result, | 268 void GetRequestsDone(QueueResults::GetRequestsResult result, |
| 268 std::vector<std::unique_ptr<SavePageRequest>> requests); | 269 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 269 | 270 |
| 270 // Callback for removing requests. | 271 // Callback for removing requests. |
| 271 void RemoveRequestsDone(const MultipleItemStatuses& results); | 272 void RemoveRequestsDone(const MultipleItemStatuses& results); |
| 272 | 273 |
| 273 // Callback for getting request statuses. | 274 // Callback for getting request statuses. |
| 274 void GetQueuedRequestsDone( | 275 void GetQueuedRequestsDone( |
| 275 std::vector<std::unique_ptr<SavePageRequest>> requests); | 276 std::vector<std::unique_ptr<SavePageRequest>> requests); |
| 276 | 277 |
| 277 void SetupForOfflinerDoneCallbackTest( | 278 void SetupForOfflinerDoneCallbackTest( |
| 278 offline_pages::SavePageRequest* request); | 279 offline_pages::SavePageRequest* request); |
| 279 | 280 |
| 280 void SendOfflinerDoneCallback(const SavePageRequest& request, | 281 void SendOfflinerDoneCallback(const SavePageRequest& request, |
| 281 Offliner::RequestStatus status); | 282 Offliner::RequestStatus status); |
| 282 | 283 |
| 283 RequestQueue::GetRequestsResult last_get_requests_result() const { | 284 QueueResults::GetRequestsResult last_get_requests_result() const { |
| 284 return last_get_requests_result_; | 285 return last_get_requests_result_; |
| 285 } | 286 } |
| 286 | 287 |
| 287 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { | 288 const std::vector<std::unique_ptr<SavePageRequest>>& last_requests() const { |
| 288 return last_requests_; | 289 return last_requests_; |
| 289 } | 290 } |
| 290 | 291 |
| 291 const MultipleItemStatuses& last_remove_results() const { | 292 const MultipleItemStatuses& last_remove_results() const { |
| 292 return last_remove_results_; | 293 return last_remove_results_; |
| 293 } | 294 } |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 | 353 |
| 353 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } | 354 bool OfflinerWasCanceled() const { return offliner_->cancel_called(); } |
| 354 | 355 |
| 355 ObserverStub observer() { return observer_; } | 356 ObserverStub observer() { return observer_; } |
| 356 | 357 |
| 357 bool immediate_schedule_callback_called() const { | 358 bool immediate_schedule_callback_called() const { |
| 358 return immediate_schedule_callback_called_; | 359 return immediate_schedule_callback_called_; |
| 359 } | 360 } |
| 360 | 361 |
| 361 private: | 362 private: |
| 362 RequestQueue::GetRequestsResult last_get_requests_result_; | 363 QueueResults::GetRequestsResult last_get_requests_result_; |
| 363 MultipleItemStatuses last_remove_results_; | 364 MultipleItemStatuses last_remove_results_; |
| 364 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; | 365 std::vector<std::unique_ptr<SavePageRequest>> last_requests_; |
| 365 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; | 366 scoped_refptr<base::TestMockTimeTaskRunner> task_runner_; |
| 366 base::ThreadTaskRunnerHandle task_runner_handle_; | 367 base::ThreadTaskRunnerHandle task_runner_handle_; |
| 367 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; | 368 std::unique_ptr<NetworkQualityEstimatorStub> network_quality_estimator_; |
| 368 std::unique_ptr<RequestCoordinator> coordinator_; | 369 std::unique_ptr<RequestCoordinator> coordinator_; |
| 369 OfflinerStub* offliner_; | 370 OfflinerStub* offliner_; |
| 370 base::WaitableEvent waiter_; | 371 base::WaitableEvent waiter_; |
| 371 ObserverStub observer_; | 372 ObserverStub observer_; |
| 372 bool immediate_schedule_callback_called_; | 373 bool immediate_schedule_callback_called_; |
| 373 }; | 374 }; |
| 374 | 375 |
| 375 RequestCoordinatorTest::RequestCoordinatorTest() | 376 RequestCoordinatorTest::RequestCoordinatorTest() |
| 376 : last_get_requests_result_(RequestQueue::GetRequestsResult::STORE_FAILURE), | 377 : last_get_requests_result_(QueueResults::GetRequestsResult::STORE_FAILURE), |
| 377 task_runner_(new base::TestMockTimeTaskRunner), | 378 task_runner_(new base::TestMockTimeTaskRunner), |
| 378 task_runner_handle_(task_runner_), | 379 task_runner_handle_(task_runner_), |
| 379 offliner_(nullptr), | 380 offliner_(nullptr), |
| 380 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, | 381 waiter_(base::WaitableEvent::ResetPolicy::MANUAL, |
| 381 base::WaitableEvent::InitialState::NOT_SIGNALED), | 382 base::WaitableEvent::InitialState::NOT_SIGNALED), |
| 382 immediate_schedule_callback_called_(false) {} | 383 immediate_schedule_callback_called_(false) {} |
| 383 | 384 |
| 384 RequestCoordinatorTest::~RequestCoordinatorTest() {} | 385 RequestCoordinatorTest::~RequestCoordinatorTest() {} |
| 385 | 386 |
| 386 void RequestCoordinatorTest::SetUp() { | 387 void RequestCoordinatorTest::SetUp() { |
| 387 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); | 388 std::unique_ptr<OfflinerPolicy> policy(new OfflinerPolicy()); |
| 388 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); | 389 std::unique_ptr<OfflinerFactory> factory(new OfflinerFactoryStub()); |
| 389 // Save the offliner for use by the tests. | 390 // Save the offliner for use by the tests. |
| 390 offliner_ = | 391 offliner_ = |
| 391 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); | 392 reinterpret_cast<OfflinerStub*>(factory->GetOffliner(policy.get())); |
| 392 std::unique_ptr<RequestQueueInMemoryStore> | 393 std::unique_ptr<RequestQueueInMemoryStore> |
| 393 store(new RequestQueueInMemoryStore()); | 394 store(new RequestQueueInMemoryStore()); |
| 394 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); | 395 std::unique_ptr<RequestQueue> queue(new RequestQueue(std::move(store))); |
| 395 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); | 396 std::unique_ptr<Scheduler> scheduler_stub(new SchedulerStub()); |
| 396 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); | 397 network_quality_estimator_.reset(new NetworkQualityEstimatorStub()); |
| 397 coordinator_.reset(new RequestCoordinator( | 398 coordinator_.reset(new RequestCoordinator( |
| 398 std::move(policy), std::move(factory), std::move(queue), | 399 std::move(policy), std::move(factory), std::move(queue), |
| 399 std::move(scheduler_stub), network_quality_estimator_.get())); | 400 std::move(scheduler_stub), network_quality_estimator_.get())); |
| 400 coordinator_->AddObserver(&observer_); | 401 coordinator_->AddObserver(&observer_); |
| 402 PickRequestTaskBuilder* builder = new PickRequestTaskBuilder( |
| 403 coordinator_->policy(), static_cast<RequestNotifier*>(coordinator_.get()), |
| 404 coordinator_->GetLogger()); |
| 405 coordinator_->queue()->SetPickerBuilder(builder); |
| 401 SetEffectiveConnectionTypeForTest( | 406 SetEffectiveConnectionTypeForTest( |
| 402 net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE); | 407 net::EffectiveConnectionType::EFFECTIVE_CONNECTION_TYPE_OFFLINE); |
| 403 SetNetworkConditionsForTest( | 408 SetNetworkConditionsForTest( |
| 404 net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE); | 409 net::NetworkChangeNotifier::ConnectionType::CONNECTION_NONE); |
| 405 } | 410 } |
| 406 | 411 |
| 407 void RequestCoordinatorTest::PumpLoop() { | 412 void RequestCoordinatorTest::PumpLoop() { |
| 408 task_runner_->RunUntilIdle(); | 413 task_runner_->RunUntilIdle(); |
| 409 } | 414 } |
| 410 | 415 |
| 411 void RequestCoordinatorTest::GetRequestsDone( | 416 void RequestCoordinatorTest::GetRequestsDone( |
| 412 RequestQueue::GetRequestsResult result, | 417 QueueResults::GetRequestsResult result, |
| 413 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 418 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 414 last_get_requests_result_ = result; | 419 last_get_requests_result_ = result; |
| 415 last_requests_ = std::move(requests); | 420 last_requests_ = std::move(requests); |
| 416 } | 421 } |
| 417 | 422 |
| 418 void RequestCoordinatorTest::RemoveRequestsDone( | 423 void RequestCoordinatorTest::RemoveRequestsDone( |
| 419 const MultipleItemStatuses& results) { | 424 const MultipleItemStatuses& results) { |
| 420 last_remove_results_ = results; | 425 last_remove_results_ = results; |
| 421 waiter_.Signal(); | 426 waiter_.Signal(); |
| 422 } | 427 } |
| 423 | 428 |
| 424 void RequestCoordinatorTest::GetQueuedRequestsDone( | 429 void RequestCoordinatorTest::GetQueuedRequestsDone( |
| 425 std::vector<std::unique_ptr<SavePageRequest>> requests) { | 430 std::vector<std::unique_ptr<SavePageRequest>> requests) { |
| 426 last_requests_ = std::move(requests); | 431 last_requests_ = std::move(requests); |
| 427 waiter_.Signal(); | 432 waiter_.Signal(); |
| 428 } | 433 } |
| 429 | 434 |
| 430 void RequestCoordinatorTest::AddRequestDone( | 435 void RequestCoordinatorTest::AddRequestDone( |
| 431 RequestQueue::AddRequestResult result, | 436 QueueResults::AddRequestResult result, |
| 432 const SavePageRequest& request) {} | 437 const SavePageRequest& request) {} |
| 433 | 438 |
| 434 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( | 439 void RequestCoordinatorTest::SetupForOfflinerDoneCallbackTest( |
| 435 offline_pages::SavePageRequest* request) { | 440 offline_pages::SavePageRequest* request) { |
| 436 // Mark request as started and add it to the queue, | 441 // Mark request as started and add it to the queue, |
| 437 // then wait for callback to finish. | 442 // then wait for callback to finish. |
| 438 request->MarkAttemptStarted(base::Time::Now()); | 443 request->MarkAttemptStarted(base::Time::Now()); |
| 439 coordinator()->queue()->AddRequest( | 444 coordinator()->queue()->AddRequest( |
| 440 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, | 445 *request, base::Bind(&RequestCoordinatorTest::AddRequestDone, |
| 441 base::Unretained(this))); | 446 base::Unretained(this))); |
| (...skipping 908 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1350 // Now whether processing triggered immediately depends on whether test | 1355 // Now whether processing triggered immediately depends on whether test |
| 1351 // is run on svelte device or not. | 1356 // is run on svelte device or not. |
| 1352 if (base::SysInfo::IsLowEndDevice()) { | 1357 if (base::SysInfo::IsLowEndDevice()) { |
| 1353 EXPECT_FALSE(is_busy()); | 1358 EXPECT_FALSE(is_busy()); |
| 1354 } else { | 1359 } else { |
| 1355 EXPECT_TRUE(is_busy()); | 1360 EXPECT_TRUE(is_busy()); |
| 1356 } | 1361 } |
| 1357 } | 1362 } |
| 1358 | 1363 |
| 1359 } // namespace offline_pages | 1364 } // namespace offline_pages |
| OLD | NEW |