Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(118)

Side by Side Diff: components/offline_pages/core/prefetch/prefetch_dispatcher_impl_unittest.cc

Issue 2920083002: Prefetching: Introduce store commands abstractions to be used by tasks. (Closed)
Patch Set: Minor changes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/core/prefetch/prefetch_dispatcher_impl.h" 5 #include "components/offline_pages/core/prefetch/prefetch_dispatcher_impl.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/test/scoped_feature_list.h" 9 #include "base/test/scoped_feature_list.h"
10 #include "base/test/test_simple_task_runner.h" 10 #include "base/test/test_simple_task_runner.h"
11 #include "base/threading/thread_task_runner_handle.h" 11 #include "base/threading/thread_task_runner_handle.h"
12 #include "components/offline_pages/core/client_namespace_constants.h" 12 #include "components/offline_pages/core/client_namespace_constants.h"
13 #include "components/offline_pages/core/offline_event_logger.h" 13 #include "components/offline_pages/core/offline_event_logger.h"
14 #include "components/offline_pages/core/offline_page_feature.h" 14 #include "components/offline_pages/core/offline_page_feature.h"
15 #include "components/offline_pages/core/prefetch/prefetch_in_memory_store.h"
16 #include "components/offline_pages/core/prefetch/prefetch_service.h" 15 #include "components/offline_pages/core/prefetch/prefetch_service.h"
17 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 #include "url/gurl.h"
18 18
19 namespace offline_pages { 19 namespace offline_pages {
20 20
21 namespace {
22
21 class TestScopedBackgroundTask 23 class TestScopedBackgroundTask
22 : public PrefetchDispatcher::ScopedBackgroundTask { 24 : public PrefetchDispatcher::ScopedBackgroundTask {
23 public: 25 public:
24 TestScopedBackgroundTask() = default; 26 TestScopedBackgroundTask() = default;
25 ~TestScopedBackgroundTask() override = default; 27 ~TestScopedBackgroundTask() override = default;
26 28
27 void SetNeedsReschedule(bool reschedule, bool backoff) override { 29 void SetNeedsReschedule(bool reschedule, bool backoff) override {
28 needs_reschedule_called = true; 30 needs_reschedule_called = true;
29 } 31 }
30 32
31 bool needs_reschedule_called = false; 33 bool needs_reschedule_called = false;
32 }; 34 };
33 35
36 } // namespace
37
34 class PrefetchDispatcherTest : public testing::Test, public PrefetchService { 38 class PrefetchDispatcherTest : public testing::Test, public PrefetchService {
35 public: 39 public:
40 const std::string TEST_NAMESPACE = "TestPrefetchClientNamespace";
41
36 PrefetchDispatcherTest(); 42 PrefetchDispatcherTest();
37 43
38 // Test implementation. 44 // Test implementation.
39 void SetUp() override; 45 void SetUp() override;
40 void TearDown() override; 46 void TearDown() override;
41 47
42 // PrefetchService implementation: 48 // PrefetchService implementation:
43 OfflineEventLogger* GetLogger() override; 49 OfflineEventLogger* GetLogger() override;
44 OfflineMetricsCollector* GetOfflineMetricsCollector() override; 50 OfflineMetricsCollector* GetOfflineMetricsCollector() override;
45 PrefetchDispatcher* GetPrefetchDispatcher() override; 51 PrefetchDispatcher* GetPrefetchDispatcher() override;
46 PrefetchGCMHandler* GetPrefetchGCMHandler() override; 52 PrefetchGCMHandler* GetPrefetchGCMHandler() override;
47 PrefetchStore* GetPrefetchStore() override;
48 SuggestedArticlesObserver* GetSuggestedArticlesObserver() override; 53 SuggestedArticlesObserver* GetSuggestedArticlesObserver() override;
49 54
50 // KeyedService implementation. 55 // KeyedService implementation.
51 void Shutdown() override {} 56 void Shutdown() override {}
52 57
53 void PumpLoop(); 58 void PumpLoop();
54 PrefetchDispatcher::ScopedBackgroundTask* GetBackgroundTask() { 59 PrefetchDispatcher::ScopedBackgroundTask* GetBackgroundTask() {
55 return dispatcher_impl_->task_.get(); 60 return dispatcher_impl_->task_.get();
56 } 61 }
57 62
58 TaskQueue* dispatcher_task_queue() { return &dispatcher_impl_->task_queue_; } 63 TaskQueue* dispatcher_task_queue() { return &dispatcher_impl_->task_queue_; }
59 64
65 protected:
66 std::vector<PrefetchURL> test_urls_;
67
60 private: 68 private:
69 std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
61 OfflineEventLogger logger_; 70 OfflineEventLogger logger_;
62 base::test::ScopedFeatureList feature_list_; 71 base::test::ScopedFeatureList feature_list_;
63
64 std::unique_ptr<PrefetchInMemoryStore> in_memory_store_;
65 std::unique_ptr<PrefetchDispatcherImpl> dispatcher_impl_;
66
67 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 72 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
68 base::ThreadTaskRunnerHandle task_runner_handle_; 73 base::ThreadTaskRunnerHandle task_runner_handle_;
69 }; 74 };
70 75
71 PrefetchDispatcherTest::PrefetchDispatcherTest() 76 PrefetchDispatcherTest::PrefetchDispatcherTest()
72 : task_runner_(new base::TestSimpleTaskRunner), 77 : task_runner_(new base::TestSimpleTaskRunner),
73 task_runner_handle_(task_runner_) { 78 task_runner_handle_(task_runner_) {
74 feature_list_.InitAndEnableFeature(kPrefetchingOfflinePagesFeature); 79 feature_list_.InitAndEnableFeature(kPrefetchingOfflinePagesFeature);
75 } 80 }
76 81
77 void PrefetchDispatcherTest::SetUp() { 82 void PrefetchDispatcherTest::SetUp() {
78 ASSERT_EQ(base::ThreadTaskRunnerHandle::Get(), task_runner_); 83 ASSERT_EQ(base::ThreadTaskRunnerHandle::Get(), task_runner_);
79 ASSERT_FALSE(task_runner_->HasPendingTask()); 84 ASSERT_FALSE(task_runner_->HasPendingTask());
80 in_memory_store_ = base::MakeUnique<PrefetchInMemoryStore>();
81 dispatcher_impl_ = base::MakeUnique<PrefetchDispatcherImpl>(); 85 dispatcher_impl_ = base::MakeUnique<PrefetchDispatcherImpl>();
82 dispatcher_impl_->SetService(this); 86 dispatcher_impl_->SetService(this);
87
88 ASSERT_TRUE(test_urls_.empty());
89 test_urls_.push_back({"1", GURL("http://testurl.com/foo")});
90 test_urls_.push_back({"2", GURL("https://testurl.com/bar")});
83 } 91 }
84 92
85 void PrefetchDispatcherTest::TearDown() { 93 void PrefetchDispatcherTest::TearDown() {
86 task_runner_->ClearPendingTasks(); 94 task_runner_->ClearPendingTasks();
87 } 95 }
88 96
89 OfflineEventLogger* PrefetchDispatcherTest::GetLogger() { 97 OfflineEventLogger* PrefetchDispatcherTest::GetLogger() {
90 return &logger_; 98 return &logger_;
91 } 99 }
92 100
93 OfflineMetricsCollector* PrefetchDispatcherTest::GetOfflineMetricsCollector() { 101 OfflineMetricsCollector* PrefetchDispatcherTest::GetOfflineMetricsCollector() {
94 NOTREACHED(); 102 NOTREACHED();
95 return nullptr; 103 return nullptr;
96 } 104 }
97 105
98 PrefetchDispatcher* PrefetchDispatcherTest::GetPrefetchDispatcher() { 106 PrefetchDispatcher* PrefetchDispatcherTest::GetPrefetchDispatcher() {
99 return dispatcher_impl_.get(); 107 return dispatcher_impl_.get();
100 } 108 }
101 109
102 PrefetchGCMHandler* PrefetchDispatcherTest::GetPrefetchGCMHandler() { 110 PrefetchGCMHandler* PrefetchDispatcherTest::GetPrefetchGCMHandler() {
103 NOTREACHED(); 111 NOTREACHED();
104 return nullptr; 112 return nullptr;
105 } 113 }
106 114
107 PrefetchStore* PrefetchDispatcherTest::GetPrefetchStore() {
108 return in_memory_store_.get();
109 }
110
111 SuggestedArticlesObserver* 115 SuggestedArticlesObserver*
112 PrefetchDispatcherTest::GetSuggestedArticlesObserver() { 116 PrefetchDispatcherTest::GetSuggestedArticlesObserver() {
113 NOTREACHED(); 117 NOTREACHED();
114 return nullptr; 118 return nullptr;
115 } 119 }
116 120
117 void PrefetchDispatcherTest::PumpLoop() { 121 void PrefetchDispatcherTest::PumpLoop() {
118 task_runner_->RunUntilIdle(); 122 task_runner_->RunUntilIdle();
119 } 123 }
120 124
121 TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) { 125 TEST_F(PrefetchDispatcherTest, DispatcherDoesNotCrash) {
122 GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>()); 126 GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
123 GetPrefetchDispatcher()->RemoveAllUnprocessedPrefetchURLs( 127 GetPrefetchDispatcher()->RemoveAllUnprocessedPrefetchURLs(
124 kSuggestedArticlesNamespace); 128 kSuggestedArticlesNamespace);
125 GetPrefetchDispatcher()->RemovePrefetchURLsByClientId( 129 GetPrefetchDispatcher()->RemovePrefetchURLsByClientId(
126 {kSuggestedArticlesNamespace, "123"}); 130 {kSuggestedArticlesNamespace, "123"});
127 } 131 }
128 132
129 TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTask) { 133 TEST_F(PrefetchDispatcherTest, AddCandidatePrefetchURLsTask) {
130 GetPrefetchDispatcher()->AddCandidatePrefetchURLs(std::vector<PrefetchURL>()); 134 GetPrefetchDispatcher()->AddCandidatePrefetchURLs(TEST_NAMESPACE, test_urls_);
131 EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks()); 135 EXPECT_TRUE(dispatcher_task_queue()->HasPendingTasks());
132 EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask()); 136 EXPECT_TRUE(dispatcher_task_queue()->HasRunningTask());
133 PumpLoop(); 137 PumpLoop();
134 EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks()); 138 EXPECT_FALSE(dispatcher_task_queue()->HasPendingTasks());
135 EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask()); 139 EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
136 } 140 }
137 141
138 TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) { 142 TEST_F(PrefetchDispatcherTest, DispatcherDoesNothingIfFeatureNotEnabled) {
139 base::test::ScopedFeatureList disabled_feature_list; 143 base::test::ScopedFeatureList disabled_feature_list;
140 disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature); 144 disabled_feature_list.InitAndDisableFeature(kPrefetchingOfflinePagesFeature);
141 145
142 // Don't add a task for new prefetch URLs. 146 // Don't add a task for new prefetch URLs.
143 ClientId client_id("namespace", "id"); 147 PrefetchURL prefetch_url("id", GURL("https://www.chromium.org"));
144 PrefetchURL prefetch_url(client_id, GURL("https://www.chromium.org"));
145 GetPrefetchDispatcher()->AddCandidatePrefetchURLs( 148 GetPrefetchDispatcher()->AddCandidatePrefetchURLs(
146 std::vector<PrefetchURL>(1, prefetch_url)); 149 TEST_NAMESPACE, std::vector<PrefetchURL>(1, prefetch_url));
147 EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask()); 150 EXPECT_FALSE(dispatcher_task_queue()->HasRunningTask());
148 151
149 // Do nothing with a new background task. 152 // Do nothing with a new background task.
150 GetPrefetchDispatcher()->BeginBackgroundTask( 153 GetPrefetchDispatcher()->BeginBackgroundTask(
151 base::MakeUnique<TestScopedBackgroundTask>()); 154 base::MakeUnique<TestScopedBackgroundTask>());
152 EXPECT_EQ(nullptr, GetBackgroundTask()); 155 EXPECT_EQ(nullptr, GetBackgroundTask());
153 156
154 // Everything else is unimplemented. 157 // Everything else is unimplemented.
155 } 158 }
156 159
157 } // namespace offline_pages 160 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698