| Index: components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
 | 
| diff --git a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
 | 
| index 0a0bd961d48bad5e40043b5722d0a71b2c1c900c..58167a4c8238c3559f399e68a43aa7aa0b56e0a4 100644
 | 
| --- a/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
 | 
| +++ b/components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc
 | 
| @@ -4,21 +4,106 @@
 | 
|  
 | 
|  #include "components/offline_pages/core/prefetch/prefetch_dispatcher_impl.h"
 | 
|  
 | 
| +#include "base/logging.h"
 | 
|  #include "base/memory/ptr_util.h"
 | 
| +#include "base/test/test_simple_task_runner.h"
 | 
| +#include "base/threading/thread_task_runner_handle.h"
 | 
|  #include "components/offline_pages/core/client_namespace_constants.h"
 | 
| -#include "components/offline_pages/core/prefetch/prefetch_dispatcher.h"
 | 
| +#include "components/offline_pages/core/prefetch/prefetch_in_memory_store.h"
 | 
| +#include "components/offline_pages/core/prefetch/prefetch_service.h"
 | 
|  #include "testing/gtest/include/gtest/gtest.h"
 | 
| -#include "url/gurl.h"
 | 
|  
 | 
|  namespace offline_pages {
 | 
|  
 | 
| -TEST(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
 | 
| -  PrefetchDispatcherImpl dispatcher;
 | 
| +class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
 | 
| + public:
 | 
| +  PrefetchDispatcherTest();
 | 
|  
 | 
| -  dispatcher.AddCandidatePrefetchURLs(
 | 
| -      std::vector<PrefetchDispatcher::PrefetchURL>());
 | 
| -  dispatcher.RemoveAllUnprocessedPrefetchURLs(kSuggestedArticlesNamespace);
 | 
| -  dispatcher.RemovePrefetchURLsByClientId({kSuggestedArticlesNamespace, "123"});
 | 
| +  // Test implementation.
 | 
| +  void SetUp() override;
 | 
| +  void TearDown() override;
 | 
| +
 | 
| +  // PrefetchService implementation:
 | 
| +  PrefetchDispatcher* GetPrefetchDispatcher() override;
 | 
| +  OfflineMetricsCollector* GetOfflineMetricsCollector() override;
 | 
| +  PrefetchGCMHandler* GetPrefetchGCMHandler() override;
 | 
| +  PrefetchStore* GetPrefetchStore() override;
 | 
| +  void ObserveContentSuggestionsService(
 | 
| +      ntp_snippets::ContentSuggestionsService* service) override;
 | 
| +
 | 
| +  // KeyedService implementation.
 | 
| +  void Shutdown() override {}
 | 
| +
 | 
| +  void PumpLoop();
 | 
| +
 | 
| +  TaskQueue* dispatcher_task_queue() { return &dispatcher_impl_->task_queue_; }
 | 
| +
 | 
| + private:
 | 
| +  std::unique_ptr<PrefetchInMemoryStore> in_memory_store_;
 | 
| +  std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
 | 
| +
 | 
| +  scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
 | 
| +  base::ThreadTaskRunnerHandle task_runner_handle_;
 | 
| +};
 | 
| +
 | 
| +PrefetchDispatcherTest::PrefetchDispatcherTest()
 | 
| +    : task_runner_(new base::TestSimpleTaskRunner),
 | 
| +      task_runner_handle_(task_runner_) {}
 | 
| +
 | 
| +void PrefetchDispatcherTest::SetUp() {
 | 
| +  ASSERT_EQ(base::ThreadTaskRunnerHandle::Get(), task_runner_);
 | 
| +  ASSERT_FALSE(task_runner_->HasPendingTask());
 | 
| +  in_memory_store_ = base::MakeUnique<PrefetchInMemoryStore>();
 | 
| +  dispatcher_impl_ = base::MakeUnique<PrefetchDispatcherImpl>();
 | 
| +  dispatcher_impl_->SetService(this);
 | 
| +}
 | 
| +
 | 
| +void PrefetchDispatcherTest::TearDown() {
 | 
| +  task_runner_->ClearPendingTasks();
 | 
| +}
 | 
| +
 | 
| +PrefetchDispatcher* PrefetchDispatcherTest::GetPrefetchDispatcher() {
 | 
| +  return dispatcher_impl_.get();
 | 
| +}
 | 
| +
 | 
| +OfflineMetricsCollector* PrefetchDispatcherTest::GetOfflineMetricsCollector() {
 | 
| +  NOTREACHED();
 | 
| +  return nullptr;
 | 
| +}
 | 
| +
 | 
| +PrefetchGCMHandler* PrefetchDispatcherTest::GetPrefetchGCMHandler() {
 | 
| +  NOTREACHED();
 | 
| +  return nullptr;
 | 
| +}
 | 
| +
 | 
| +PrefetchStore* PrefetchDispatcherTest::GetPrefetchStore() {
 | 
| +  return in_memory_store_.get();
 | 
| +}
 | 
| +
 | 
| +void PrefetchDispatcherTest::ObserveContentSuggestionsService(
 | 
| +    ntp_snippets::ContentSuggestionsService* service) {
 | 
| +  NOTREACHED();
 | 
| +}
 | 
| +
 | 
| +void PrefetchDispatcherTest::PumpLoop() {
 | 
| +  task_runner_->RunUntilIdle();
 | 
| +}
 | 
| +
 | 
| +TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
 | 
| +  GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
 | 
| +  GetPrefetchDispatcher()->RemoveAllUnprocessedPrefetchURLs(
 | 
| +      kSuggestedArticlesNamespace);
 | 
| +  GetPrefetchDispatcher()->RemovePrefetchURLsByClientId(
 | 
| +      {kSuggestedArticlesNamespace, "123"});
 | 
| +}
 | 
| +
 | 
| +TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTask) {
 | 
| +  GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>());
 | 
| +  EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
 | 
| +  EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
 | 
| +  PumpLoop();
 | 
| +  EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
 | 
| +  EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
 | 
|  }
 | 
|  
 | 
|  }  // namespace offline_pages
 | 
| 
 |