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

Side by Side Diff: components/previews/core/previews_black_list_unittest.cc

Issue 2442013003: Add non-host functionality to the previews blacklist (Closed)
Patch Set: tbansal comments Created 4 years, 1 month 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 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/previews/core/previews_black_list.h" 5 #include "components/previews/core/previews_black_list.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 16 matching lines...) Expand all
27 namespace { 27 namespace {
28 28
29 using PreviewsBlackListTest = testing::Test; 29 using PreviewsBlackListTest = testing::Test;
30 30
31 } // namespace 31 } // namespace
32 32
33 namespace previews { 33 namespace previews {
34 34
35 namespace { 35 namespace {
36 36
37 void RunLoadCallback(LoadBlackListCallback callback, 37 void RunLoadCallback(
38 std::unique_ptr<BlackListItemMap> black_list_item_map) { 38 LoadBlackListCallback callback,
39 callback.Run(std::move(black_list_item_map)); 39 std::unique_ptr<BlackListItemMap> black_list_item_map,
40 std::unique_ptr<PreviewsBlackListItem> host_indifferent_black_list_item) {
41 callback.Run(std::move(black_list_item_map),
42 std::move(host_indifferent_black_list_item));
40 } 43 }
41 44
42 class TestPreviewsOptOutStore : public PreviewsOptOutStore { 45 class TestPreviewsOptOutStore : public PreviewsOptOutStore {
43 public: 46 public:
44 TestPreviewsOptOutStore() : clear_blacklist_count_(0) {} 47 TestPreviewsOptOutStore() : clear_blacklist_count_(0) {}
45 ~TestPreviewsOptOutStore() override {} 48 ~TestPreviewsOptOutStore() override {}
46 49
47 int clear_blacklist_count() { return clear_blacklist_count_; } 50 int clear_blacklist_count() { return clear_blacklist_count_; }
48 51
49 private: 52 private:
50 // PreviewsOptOutStore implementation: 53 // PreviewsOptOutStore implementation:
51 void AddPreviewNavigation(bool opt_out, 54 void AddPreviewNavigation(bool opt_out,
52 const std::string& host_name, 55 const std::string& host_name,
53 PreviewsType type, 56 PreviewsType type,
54 base::Time now) override {} 57 base::Time now) override {}
55 58
56 void LoadBlackList(LoadBlackListCallback callback) override { 59 void LoadBlackList(LoadBlackListCallback callback) override {
57 std::unique_ptr<BlackListItemMap> black_list_item_map( 60 std::unique_ptr<BlackListItemMap> black_list_item_map(
58 new BlackListItemMap()); 61 new BlackListItemMap());
62 std::unique_ptr<PreviewsBlackListItem> host_indifferent_black_list_item =
63 PreviewsBlackList::CreateHostIndifferentBlackListItem();
59 base::ThreadTaskRunnerHandle::Get()->PostTask( 64 base::ThreadTaskRunnerHandle::Get()->PostTask(
60 FROM_HERE, base::Bind(&RunLoadCallback, callback, 65 FROM_HERE, base::Bind(&RunLoadCallback, callback,
61 base::Passed(&black_list_item_map))); 66 base::Passed(&black_list_item_map),
67 base::Passed(&host_indifferent_black_list_item)));
62 } 68 }
63 69
64 void ClearBlackList(base::Time begin_time, base::Time end_time) override { 70 void ClearBlackList(base::Time begin_time, base::Time end_time) override {
65 ++clear_blacklist_count_; 71 ++clear_blacklist_count_;
66 } 72 }
67 73
68 int clear_blacklist_count_; 74 int clear_blacklist_count_;
69 }; 75 };
70 76
71 } // namespace 77 } // namespace
72 78
73 TEST_F(PreviewsBlackListTest, BlackListNoStore) { 79 TEST_F(PreviewsBlackListTest, PerHostBlackListNoStore) {
74 // Tests the black list behavior when a null OptOutSture is passed in. 80 // Tests the black list behavior when a null OptOutSture is passed in.
75 const GURL url_a("http://www.url_a.com"); 81 const GURL url_a("http://www.url_a.com");
76 const GURL url_b("http://www.url_b.com"); 82 const GURL url_b("http://www.url_b.com");
77 const size_t history = 4; 83 const size_t per_host_history = 4;
78 const int threshold = 2; 84 const int per_host_threshold = 2;
85 // Host indifferent blacklisting should have no effect with the following
86 // params.
87 const size_t host_indifferent_history = 1;
88 const int host_indifferent_threshold = 2;
79 const int duration_in_days = 365; 89 const int duration_in_days = 365;
80 base::FieldTrialList field_trial_list(nullptr); 90 base::FieldTrialList field_trial_list(nullptr);
81 std::map<std::string, std::string> params; 91 std::map<std::string, std::string> params;
82 params["stored_history_length"] = base::SizeTToString(history); 92 params["per_host_max_stored_history_length"] =
83 params["opt_out_threshold"] = base::IntToString(threshold); 93 base::SizeTToString(per_host_history);
84 params["black_list_duration_in_days"] = base::IntToString(duration_in_days); 94 params["host_indifferent_max_stored_history_length"] =
95 base::SizeTToString(host_indifferent_history);
96 params["per_host_opt_out_threshold"] = base::IntToString(per_host_threshold);
97 params["host_indifferent_opt_out_threshold"] =
98 base::IntToString(host_indifferent_threshold);
99 params["per_host_black_list_duration_in_days"] =
100 base::IntToString(duration_in_days);
85 ASSERT_TRUE( 101 ASSERT_TRUE(
86 variations::AssociateVariationParams("ClientSidePreviews", "Enabled", 102 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
87 params) && 103 params) &&
88 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled")); 104 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
89 105
90 base::SimpleTestClock* test_clock = new base::SimpleTestClock(); 106 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
91 base::Time start = test_clock->Now(); 107 base::Time start = test_clock->Now();
92 test_clock->Advance(base::TimeDelta::FromSeconds(1)); 108 test_clock->Advance(base::TimeDelta::FromSeconds(1));
93 109
94 std::unique_ptr<PreviewsBlackList> black_list( 110 std::unique_ptr<PreviewsBlackList> black_list(
95 new PreviewsBlackList(nullptr, base::WrapUnique(test_clock))); 111 new PreviewsBlackList(nullptr, base::WrapUnique(test_clock)));
96 112
97 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 113 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
98 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 114 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
99 115
100 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE); 116 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE);
117 test_clock->Advance(base::TimeDelta::FromSeconds(1));
101 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE); 118 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE);
119 test_clock->Advance(base::TimeDelta::FromSeconds(1));
102 120
103 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 121 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
104 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 122 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
105 123
106 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE); 124 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
125 test_clock->Advance(base::TimeDelta::FromSeconds(1));
107 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE); 126 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
127 test_clock->Advance(base::TimeDelta::FromSeconds(1));
108 128
109 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 129 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
110 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 130 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
111 131
112 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 132 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
133 test_clock->Advance(base::TimeDelta::FromSeconds(1));
113 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 134 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
135 test_clock->Advance(base::TimeDelta::FromSeconds(1));
114 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 136 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
137 test_clock->Advance(base::TimeDelta::FromSeconds(1));
115 138
116 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 139 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
117 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 140 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
118 141
119 test_clock->Advance(base::TimeDelta::FromSeconds(1));
120 black_list->ClearBlackList(start, test_clock->Now()); 142 black_list->ClearBlackList(start, test_clock->Now());
121 143
122 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 144 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
123 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 145 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
124 146
125 variations::testing::ClearAllVariationParams(); 147 variations::testing::ClearAllVariationParams();
126 } 148 }
127 149
128 TEST_F(PreviewsBlackListTest, BlackListWithStore) { 150 TEST_F(PreviewsBlackListTest, PerHostBlackListWithStore) {
129 // Tests the black list behavior when a non-null OptOutSture is passed in. 151 // Tests the black list behavior when a non-null OptOutSture is passed in.
130 const GURL url_a1("http://www.url_a.com/a1"); 152 const GURL url_a1("http://www.url_a.com/a1");
131 const GURL url_a2("http://www.url_a.com/a2"); 153 const GURL url_a2("http://www.url_a.com/a2");
132 const GURL url_b("http://www.url_b.com"); 154 const GURL url_b("http://www.url_b.com");
133 const size_t history = 4; 155 const size_t per_host_history = 4;
134 const int threshold = 2; 156 const int per_host_threshold = 2;
157 // Host indifferent blacklisting should have no effect with the following
158 // params.
159 const size_t host_indifferent_history = 1;
160 const int host_indifferent_threshold = 2;
135 const int duration_in_days = 365; 161 const int duration_in_days = 365;
136 base::FieldTrialList field_trial_list(nullptr); 162 base::FieldTrialList field_trial_list(nullptr);
137 std::map<std::string, std::string> params; 163 std::map<std::string, std::string> params;
138 params["stored_history_length"] = base::SizeTToString(history); 164 params["per_host_max_stored_history_length"] =
139 params["opt_out_threshold"] = base::IntToString(threshold); 165 base::SizeTToString(per_host_history);
140 params["black_list_duration_in_days"] = base::IntToString(duration_in_days); 166 params["host_indifferent_max_stored_history_length"] =
167 base::SizeTToString(host_indifferent_history);
168 params["per_host_opt_out_threshold"] = base::IntToString(per_host_threshold);
169 params["host_indifferent_opt_out_threshold"] =
170 base::IntToString(host_indifferent_threshold);
171 params["per_host_black_list_duration_in_days"] =
172 base::IntToString(duration_in_days);
141 ASSERT_TRUE( 173 ASSERT_TRUE(
142 variations::AssociateVariationParams("ClientSidePreviews", "Enabled", 174 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
143 params) && 175 params) &&
144 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled")); 176 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
145 177
146 base::MessageLoop loop; 178 base::MessageLoop loop;
147 179
148 base::SimpleTestClock* test_clock = new base::SimpleTestClock(); 180 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
149 base::Time start = test_clock->Now(); 181 base::Time start = test_clock->Now();
150 test_clock->Advance(base::TimeDelta::FromSeconds(1)); 182 test_clock->Advance(base::TimeDelta::FromSeconds(1));
151 183
152 TestPreviewsOptOutStore* opt_out_store = new TestPreviewsOptOutStore(); 184 TestPreviewsOptOutStore* opt_out_store = new TestPreviewsOptOutStore();
153 185
154 std::unique_ptr<PreviewsBlackList> black_list(new PreviewsBlackList( 186 std::unique_ptr<PreviewsBlackList> black_list(new PreviewsBlackList(
155 base::WrapUnique(opt_out_store), base::WrapUnique(test_clock))); 187 base::WrapUnique(opt_out_store), base::WrapUnique(test_clock)));
156 188
157 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 189 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
158 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 190 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
159 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 191 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
160 192
161 base::RunLoop().RunUntilIdle(); 193 base::RunLoop().RunUntilIdle();
162 194
163 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 195 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
164 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 196 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
165 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 197 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
166 198
167 black_list->AddPreviewNavigation(url_a1, true, PreviewsType::OFFLINE); 199 black_list->AddPreviewNavigation(url_a1, true, PreviewsType::OFFLINE);
200 test_clock->Advance(base::TimeDelta::FromSeconds(1));
168 black_list->AddPreviewNavigation(url_a1, true, PreviewsType::OFFLINE); 201 black_list->AddPreviewNavigation(url_a1, true, PreviewsType::OFFLINE);
169 202 test_clock->Advance(base::TimeDelta::FromSeconds(1));
170 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 203
171 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 204 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
172 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 205 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
173 206 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
174 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE); 207
175 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE); 208 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
209 test_clock->Advance(base::TimeDelta::FromSeconds(1));
210 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
211 test_clock->Advance(base::TimeDelta::FromSeconds(1));
176 212
177 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 213 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
178 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 214 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
179 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 215 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
180 216
181 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 217 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
218 test_clock->Advance(base::TimeDelta::FromSeconds(1));
182 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 219 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
220 test_clock->Advance(base::TimeDelta::FromSeconds(1));
183 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE); 221 black_list->AddPreviewNavigation(url_b, false, PreviewsType::OFFLINE);
184 222 test_clock->Advance(base::TimeDelta::FromSeconds(1));
185 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 223
186 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 224 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
187 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 225 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
188 226 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
189 test_clock->Advance(base::TimeDelta::FromSeconds(1)); 227
190 EXPECT_EQ(0, opt_out_store->clear_blacklist_count()); 228 EXPECT_EQ(0, opt_out_store->clear_blacklist_count());
191 black_list->ClearBlackList(start, base::Time::Now()); 229 black_list->ClearBlackList(start, base::Time::Now());
192 EXPECT_EQ(1, opt_out_store->clear_blacklist_count()); 230 EXPECT_EQ(1, opt_out_store->clear_blacklist_count());
193 231
194 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 232 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
195 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE)); 233 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a2, PreviewsType::OFFLINE));
196 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 234 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
197 235
198 base::RunLoop().RunUntilIdle(); 236 base::RunLoop().RunUntilIdle();
199 EXPECT_EQ(1, opt_out_store->clear_blacklist_count()); 237 EXPECT_EQ(1, opt_out_store->clear_blacklist_count());
200 238
201 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 239 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
202 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE)); 240 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a1, PreviewsType::OFFLINE));
203 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE)); 241 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
204 242
205 variations::testing::ClearAllVariationParams(); 243 variations::testing::ClearAllVariationParams();
206 } 244 }
207 245
246 TEST_F(PreviewsBlackListTest, HostIndifferentBlackListNoStore) {
247 // Tests the black list behavior when a null OptOutSture is passed in.
248 const GURL url_a("http://www.url_a.com");
249 const GURL url_b("http://www.url_b.com");
250 const GURL url_c("http://www.url_c.com");
251 const GURL url_d("http://www.url_d.com");
252 // Per host blacklisting should have no effect with the following params.
253 const size_t per_host_history = 1;
254 const int per_host_threshold = 2;
255 const size_t host_indifferent_history = 4;
256 const int host_indifferent_threshold = 4;
257 const int duration_in_days = 365;
258 base::FieldTrialList field_trial_list(nullptr);
259 std::map<std::string, std::string> params;
260 params["per_host_max_stored_history_length"] =
261 base::SizeTToString(per_host_history);
262 params["host_indifferent_max_stored_history_length"] =
263 base::SizeTToString(host_indifferent_history);
264 params["per_host_opt_out_threshold"] = base::IntToString(per_host_threshold);
265 params["host_indifferent_opt_out_threshold"] =
266 base::IntToString(host_indifferent_threshold);
267 params["per_host_black_list_duration_in_days"] =
268 base::IntToString(duration_in_days);
269 ASSERT_TRUE(
270 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
271 params) &&
272 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
273
274 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
275 test_clock->Advance(base::TimeDelta::FromSeconds(1));
276
277 std::unique_ptr<PreviewsBlackList> black_list(
278 new PreviewsBlackList(nullptr, base::WrapUnique(test_clock)));
279
280 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
281 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
282 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
283 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
284
285 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE);
286 test_clock->Advance(base::TimeDelta::FromSeconds(1));
287 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
288
289 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
290 test_clock->Advance(base::TimeDelta::FromSeconds(1));
291 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
292
293 black_list->AddPreviewNavigation(url_c, true, PreviewsType::OFFLINE);
294 test_clock->Advance(base::TimeDelta::FromSeconds(1));
295 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
296
297 black_list->AddPreviewNavigation(url_d, true, PreviewsType::OFFLINE);
298 test_clock->Advance(base::TimeDelta::FromSeconds(1));
299 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
300 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
301 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
302 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
303
304 black_list->AddPreviewNavigation(url_d, false, PreviewsType::OFFLINE);
305 test_clock->Advance(base::TimeDelta::FromSeconds(1));
306
307 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
tbansal1 2016/10/25 16:15:48 Why did these become true?
RyanSturm 2016/10/25 18:15:44 Added comment.
308 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
309 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
310 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
311
312 variations::testing::ClearAllVariationParams();
313 }
314
315 TEST_F(PreviewsBlackListTest, HostIndifferentBlackListWithStore) {
tbansal1 2016/10/25 16:15:48 IIUC, this test is not really much different from
RyanSturm 2016/10/25 18:15:44 Adding that seems like overkill. When I add the op
tbansal1 2016/10/28 21:59:33 May be. What I am suggesting is testing the integr
316 // Tests the black list behavior when a non-null OptOutSture is passed in.
317 const GURL url_a("http://www.url_a.com");
318 const GURL url_b("http://www.url_b.com");
319 const GURL url_c("http://www.url_c.com");
320 const GURL url_d("http://www.url_d.com");
321 // Per host blacklisting should have no effect with the following params.
322 const size_t per_host_history = 1;
323 const int per_host_threshold = 2;
324 const size_t host_indifferent_history = 4;
325 const int host_indifferent_threshold = 4;
326 const int duration_in_days = 365;
327 base::FieldTrialList field_trial_list(nullptr);
328 std::map<std::string, std::string> params;
329 params["per_host_max_stored_history_length"] =
330 base::SizeTToString(per_host_history);
331 params["host_indifferent_max_stored_history_length"] =
332 base::SizeTToString(host_indifferent_history);
333 params["per_host_opt_out_threshold"] = base::IntToString(per_host_threshold);
334 params["host_indifferent_opt_out_threshold"] =
335 base::IntToString(host_indifferent_threshold);
336 params["per_host_black_list_duration_in_days"] =
337 base::IntToString(duration_in_days);
338 ASSERT_TRUE(
339 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
340 params) &&
341 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
342
343 base::MessageLoop loop;
344
345 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
346 test_clock->Advance(base::TimeDelta::FromSeconds(1));
347
348 TestPreviewsOptOutStore* opt_out_store = new TestPreviewsOptOutStore();
349
350 std::unique_ptr<PreviewsBlackList> black_list(new PreviewsBlackList(
351 base::WrapUnique(opt_out_store), base::WrapUnique(test_clock)));
352
353 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
354 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
355 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
356 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
357
358 base::RunLoop().RunUntilIdle();
359
360 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
361 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
362 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
363 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
364
365 black_list->AddPreviewNavigation(url_a, true, PreviewsType::OFFLINE);
366 test_clock->Advance(base::TimeDelta::FromSeconds(1));
367 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
368
369 black_list->AddPreviewNavigation(url_b, true, PreviewsType::OFFLINE);
370 test_clock->Advance(base::TimeDelta::FromSeconds(1));
371 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
372
373 black_list->AddPreviewNavigation(url_c, true, PreviewsType::OFFLINE);
374 test_clock->Advance(base::TimeDelta::FromSeconds(1));
375 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
376
377 black_list->AddPreviewNavigation(url_d, true, PreviewsType::OFFLINE);
378 test_clock->Advance(base::TimeDelta::FromSeconds(1));
379 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
380 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
381 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
382 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
383
384 black_list->AddPreviewNavigation(url_d, false, PreviewsType::OFFLINE);
385 test_clock->Advance(base::TimeDelta::FromSeconds(1));
386
387 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
388 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_b, PreviewsType::OFFLINE));
389 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_c, PreviewsType::OFFLINE));
390 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
391
392 variations::testing::ClearAllVariationParams();
393 }
394
208 TEST_F(PreviewsBlackListTest, QueueBehavior) { 395 TEST_F(PreviewsBlackListTest, QueueBehavior) {
209 // Tests the black list asynchronous queue behavior. Methods called while 396 // Tests the black list asynchronous queue behavior. Methods called while
210 // loading are queued and should run in the order they were queued. 397 // loading are queued and should run in the order they were queued.
211 const GURL url("http://www.url.com"); 398 const GURL url("http://www.url.com");
212 const GURL url2("http://www.url2.com"); 399 const GURL url2("http://www.url2.com");
400 // Host indifferent blacklisting should have no effect with the following
401 // params.
402 const size_t host_indifferent_history = 1;
403 const int host_indifferent_threshold = 2;
213 const int duration_in_days = 365; 404 const int duration_in_days = 365;
214 base::FieldTrialList field_trial_list(nullptr); 405 base::FieldTrialList field_trial_list(nullptr);
215 std::map<std::string, std::string> params; 406 std::map<std::string, std::string> params;
216 params["black_list_duration_in_days"] = base::IntToString(duration_in_days); 407 params["per_host_black_list_duration_in_days"] =
408 base::IntToString(duration_in_days);
409 params["host_indifferent_max_stored_history_length"] =
410 base::SizeTToString(host_indifferent_history);
411 params["host_indifferent_opt_out_threshold"] =
412 base::IntToString(host_indifferent_threshold);
217 ASSERT_TRUE( 413 ASSERT_TRUE(
218 variations::AssociateVariationParams("ClientSidePreviews", "Enabled", 414 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
219 params) && 415 params) &&
220 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled")); 416 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
221 417
222 base::MessageLoop loop; 418 base::MessageLoop loop;
223 419
224 std::vector<bool> test_opt_out{true, false}; 420 std::vector<bool> test_opt_out{true, false};
225 421
226 for (auto opt_out : test_opt_out) { 422 for (auto opt_out : test_opt_out) {
227 base::SimpleTestClock* test_clock = new base::SimpleTestClock(); 423 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
424 base::Time start = test_clock->Now();
228 425
229 TestPreviewsOptOutStore* opt_out_store = new TestPreviewsOptOutStore(); 426 TestPreviewsOptOutStore* opt_out_store = new TestPreviewsOptOutStore();
230 427
231 std::unique_ptr<PreviewsBlackList> black_list(new PreviewsBlackList( 428 std::unique_ptr<PreviewsBlackList> black_list(new PreviewsBlackList(
232 base::WrapUnique(opt_out_store), base::WrapUnique(test_clock))); 429 base::WrapUnique(opt_out_store), base::WrapUnique(test_clock)));
233 430
234 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE)); 431 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE));
235 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE); 432 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE);
236 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE); 433 test_clock->Advance(base::TimeDelta::FromSeconds(1));
434 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE);
435 test_clock->Advance(base::TimeDelta::FromSeconds(1));
237 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE)); 436 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE));
238 base::RunLoop().RunUntilIdle(); 437 base::RunLoop().RunUntilIdle();
239 EXPECT_EQ(!opt_out, 438 EXPECT_EQ(!opt_out,
240 black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE)); 439 black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE));
241 440 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE);
242 base::Time start = test_clock->Now(); 441 test_clock->Advance(base::TimeDelta::FromSeconds(1));
243 test_clock->Advance(base::TimeDelta::FromSeconds(1));
244 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE);
245 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE); 442 black_list->AddPreviewNavigation(url, opt_out, PreviewsType::OFFLINE);
246 test_clock->Advance(base::TimeDelta::FromSeconds(1)); 443 test_clock->Advance(base::TimeDelta::FromSeconds(1));
247 EXPECT_EQ(0, opt_out_store->clear_blacklist_count()); 444 EXPECT_EQ(0, opt_out_store->clear_blacklist_count());
248 black_list->ClearBlackList( 445 black_list->ClearBlackList(
249 start, test_clock->Now() + base::TimeDelta::FromSeconds(1)); 446 start, test_clock->Now() + base::TimeDelta::FromSeconds(1));
250 EXPECT_EQ(1, opt_out_store->clear_blacklist_count()); 447 EXPECT_EQ(1, opt_out_store->clear_blacklist_count());
251 black_list->AddPreviewNavigation(url2, opt_out, PreviewsType::OFFLINE); 448 black_list->AddPreviewNavigation(url2, opt_out, PreviewsType::OFFLINE);
449 test_clock->Advance(base::TimeDelta::FromSeconds(1));
252 black_list->AddPreviewNavigation(url2, opt_out, PreviewsType::OFFLINE); 450 black_list->AddPreviewNavigation(url2, opt_out, PreviewsType::OFFLINE);
451 test_clock->Advance(base::TimeDelta::FromSeconds(1));
253 base::RunLoop().RunUntilIdle(); 452 base::RunLoop().RunUntilIdle();
254 EXPECT_EQ(1, opt_out_store->clear_blacklist_count()); 453 EXPECT_EQ(1, opt_out_store->clear_blacklist_count());
255 454
256 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE)); 455 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url, PreviewsType::OFFLINE));
257 EXPECT_EQ(!opt_out, 456 EXPECT_EQ(!opt_out,
258 black_list->IsLoadedAndAllowed(url2, PreviewsType::OFFLINE)); 457 black_list->IsLoadedAndAllowed(url2, PreviewsType::OFFLINE));
259 } 458 }
260 459
261 variations::testing::ClearAllVariationParams(); 460 variations::testing::ClearAllVariationParams();
262 } 461 }
263 462
264 TEST_F(PreviewsBlackListTest, MaxHosts) { 463 TEST_F(PreviewsBlackListTest, MaxHosts) {
265 // Test that the black list only stores n hosts, and it stores the correct n 464 // Test that the black list only stores n hosts, and it stores the correct n
266 // hosts. 465 // hosts.
267 const GURL url_a("http://www.url_a.com"); 466 const GURL url_a("http://www.url_a.com");
268 const GURL url_b("http://www.url_b.com"); 467 const GURL url_b("http://www.url_b.com");
269 const GURL url_c("http://www.url_c.com"); 468 const GURL url_c("http://www.url_c.com");
270 const GURL url_d("http://www.url_d.com"); 469 const GURL url_d("http://www.url_d.com");
271 const GURL url_e("http://www.url_e.com"); 470 const GURL url_e("http://www.url_e.com");
272 const size_t stored_history_length = 1; 471 const size_t stored_history_length = 1;
273 const int opt_out_threshold = 1; 472 const int opt_out_threshold = 1;
274 const int black_list_duration_in_days = 365; 473 const int black_list_duration_in_days = 365;
275 const size_t max_hosts_in_blacklist = 2; 474 const size_t max_hosts_in_blacklist = 2;
475 // Host indifferent blacklisting should have no effect with the following
476 // params.
477 const size_t host_indifferent_history = 1;
478 const int host_indifferent_threshold = 2;
276 base::FieldTrialList field_trial_list(nullptr); 479 base::FieldTrialList field_trial_list(nullptr);
277 std::map<std::string, std::string> params; 480 std::map<std::string, std::string> params;
278 params["stored_history_length"] = base::SizeTToString(stored_history_length); 481 params["per_host_stored_history_length"] =
279 params["opt_out_threshold"] = base::IntToString(opt_out_threshold); 482 base::SizeTToString(stored_history_length);
280 params["black_list_duration_in_days"] = 483 params["per_host_opt_out_threshold"] = base::IntToString(opt_out_threshold);
484 params["per_host_black_list_duration_in_days"] =
281 base::IntToString(black_list_duration_in_days); 485 base::IntToString(black_list_duration_in_days);
282 params["max_hosts_in_blacklist"] = 486 params["max_hosts_in_blacklist"] =
283 base::SizeTToString(max_hosts_in_blacklist); 487 base::SizeTToString(max_hosts_in_blacklist);
488 params["host_indifferent_max_stored_history_length"] =
489 base::SizeTToString(host_indifferent_history);
490 params["host_indifferent_opt_out_threshold"] =
491 base::IntToString(host_indifferent_threshold);
284 ASSERT_TRUE( 492 ASSERT_TRUE(
285 variations::AssociateVariationParams("ClientSidePreviews", "Enabled", 493 variations::AssociateVariationParams("ClientSidePreviews", "Enabled",
286 params) && 494 params) &&
287 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled")); 495 base::FieldTrialList::CreateFieldTrial("ClientSidePreviews", "Enabled"));
288 496
289 base::MessageLoop loop; 497 base::MessageLoop loop;
290 498
291 base::SimpleTestClock* test_clock = new base::SimpleTestClock(); 499 base::SimpleTestClock* test_clock = new base::SimpleTestClock();
292 500
293 std::unique_ptr<PreviewsBlackList> black_list( 501 std::unique_ptr<PreviewsBlackList> black_list(
(...skipping 15 matching lines...) Expand all
309 black_list->AddPreviewNavigation(url_e, true, PreviewsType::OFFLINE); 517 black_list->AddPreviewNavigation(url_e, true, PreviewsType::OFFLINE);
310 // url_d and url_e should remain in the map, but url_a should be evicted. 518 // url_d and url_e should remain in the map, but url_a should be evicted.
311 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE)); 519 EXPECT_TRUE(black_list->IsLoadedAndAllowed(url_a, PreviewsType::OFFLINE));
312 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE)); 520 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_d, PreviewsType::OFFLINE));
313 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_e, PreviewsType::OFFLINE)); 521 EXPECT_FALSE(black_list->IsLoadedAndAllowed(url_e, PreviewsType::OFFLINE));
314 522
315 variations::testing::ClearAllVariationParams(); 523 variations::testing::ClearAllVariationParams();
316 } 524 }
317 525
318 } // namespace previews 526 } // namespace previews
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698