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

Side by Side Diff: components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc

Issue 2626433005: [Background fetching] Configure and report fetching triggers (Closed)
Patch Set: Tim's comments #2 Created 3 years, 11 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 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/ntp_snippets/remote/scheduling_remote_suggestions_provider. h" 5 #include "components/ntp_snippets/remote/scheduling_remote_suggestions_provider. h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <set> 8 #include <set>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 void(Category, const DismissedSuggestionsCallback&)); 113 void(Category, const DismissedSuggestionsCallback&));
114 MOCK_METHOD0(OnSignInStateChanged, void()); 114 MOCK_METHOD0(OnSignInStateChanged, void());
115 }; 115 };
116 116
117 } // namespace 117 } // namespace
118 118
119 class SchedulingRemoteSuggestionsProviderTest 119 class SchedulingRemoteSuggestionsProviderTest
120 : public ::testing::Test { 120 : public ::testing::Test {
121 public: 121 public:
122 SchedulingRemoteSuggestionsProviderTest() 122 SchedulingRemoteSuggestionsProviderTest()
123 : underlying_provider_(nullptr), 123 : // For the test we enabled all trigger types.
124 default_variation_params_{{"scheduler_trigger_types",
125 "persistent_scheduler_wake_up,ntp_opened,"
126 "browser_foregrounded,browser_cold_start"}},
127 params_manager_(ntp_snippets::kStudyName,
128 default_variation_params_,
129 {kArticleSuggestionsFeature.name}),
130 underlying_provider_(nullptr),
124 scheduling_provider_(nullptr), 131 scheduling_provider_(nullptr),
125 user_classifier_(/*pref_service=*/nullptr) { 132 user_classifier_(/*pref_service=*/nullptr) {
126 SchedulingRemoteSuggestionsProvider::RegisterProfilePrefs( 133 SchedulingRemoteSuggestionsProvider::RegisterProfilePrefs(
127 utils_.pref_service()->registry()); 134 utils_.pref_service()->registry());
135 ResetProvider();
136 }
128 137
138 void ResetProvider() {
129 auto underlying_provider = 139 auto underlying_provider =
130 base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>( 140 base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>(
131 /*observer=*/nullptr); 141 /*observer=*/nullptr);
132 underlying_provider_ = underlying_provider.get(); 142 underlying_provider_ = underlying_provider.get();
133 143
134 // SchedulingRemoteSuggestionsProvider calls SetProviderStatusCallback(_) to 144 // SchedulingRemoteSuggestionsProvider calls SetProviderStatusCallback(_) to
135 // stay in the loop of status changes. 145 // stay in the loop of status changes.
136 EXPECT_CALL(*underlying_provider_, SetProviderStatusCallback(_)) 146 EXPECT_CALL(*underlying_provider_, SetProviderStatusCallback(_))
137 .WillOnce(SaveArg<0>(&provider_status_callback_)); 147 .WillOnce(SaveArg<0>(&provider_status_callback_));
138 148
139 auto test_clock = base::MakeUnique<base::SimpleTestClock>(); 149 auto test_clock = base::MakeUnique<base::SimpleTestClock>();
140 test_clock_ = test_clock.get(); 150 test_clock_ = test_clock.get();
141 test_clock_->SetNow(base::Time::Now()); 151 test_clock_->SetNow(base::Time::Now());
142 152
143 scheduling_provider_ = 153 scheduling_provider_ =
144 base::MakeUnique<SchedulingRemoteSuggestionsProvider>( 154 base::MakeUnique<SchedulingRemoteSuggestionsProvider>(
145 /*observer=*/nullptr, std::move(underlying_provider), 155 /*observer=*/nullptr, std::move(underlying_provider),
146 &persistent_scheduler_, &user_classifier_, utils_.pref_service(), 156 &persistent_scheduler_, &user_classifier_, utils_.pref_service(),
147 std::move(test_clock)); 157 std::move(test_clock));
148 } 158 }
149 159
160 void SetVariationParameter(const std::string& param_name,
161 const std::string& param_value) {
162 std::map<std::string, std::string> params = default_variation_params_;
163 params[param_name] = param_value;
164
165 params_manager_.ClearAllVariationParams();
166 params_manager_.SetVariationParamsWithFeatureAssociations(
167 ntp_snippets::kStudyName, params,
168 {ntp_snippets::kArticleSuggestionsFeature.name});
169 }
170
150 protected: 171 protected:
172 std::map<std::string, std::string> default_variation_params_;
173 variations::testing::VariationParamsManager params_manager_;
151 StrictMock<MockPersistentScheduler> persistent_scheduler_; 174 StrictMock<MockPersistentScheduler> persistent_scheduler_;
152 StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_; 175 StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_;
153 std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_; 176 std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_;
154 RemoteSuggestionsProvider::ProviderStatusCallback provider_status_callback_; 177 RemoteSuggestionsProvider::ProviderStatusCallback provider_status_callback_;
155 base::SimpleTestClock* test_clock_; 178 base::SimpleTestClock* test_clock_;
156 179
157 void ChangeStatusOfUnderlyingProvider( 180 void ChangeStatusOfUnderlyingProvider(
158 RemoteSuggestionsProvider::ProviderStatus new_status) { 181 RemoteSuggestionsProvider::ProviderStatus new_status) {
159 provider_status_callback_.Run(new_status); 182 provider_status_callback_.Run(new_status);
160 } 183 }
161 184
162 private: 185 private:
163 test::RemoteSuggestionsTestUtils utils_; 186 test::RemoteSuggestionsTestUtils utils_;
164 UserClassifier user_classifier_; 187 UserClassifier user_classifier_;
165 188
166 DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProviderTest); 189 DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProviderTest);
167 }; 190 };
168 191
169 TEST_F(SchedulingRemoteSuggestionsProviderTest, 192 TEST_F(SchedulingRemoteSuggestionsProviderTest,
170 ShouldIgnoreSignalsWhenNotEnabled) { 193 ShouldIgnoreSignalsWhenNotEnabled) {
171 scheduling_provider_->OnPersistentSchedulerWakeUp(); 194 scheduling_provider_->OnPersistentSchedulerWakeUp();
172 scheduling_provider_->OnNTPOpened(); 195 scheduling_provider_->OnNTPOpened();
196 scheduling_provider_->OnBrowserForegrounded();
197 scheduling_provider_->OnBrowserColdStart();
198 }
199
200 TEST_F(SchedulingRemoteSuggestionsProviderTest,
201 ShouldIgnoreSignalsWhenDisabledByParam) {
202 // First set an empty list of allowed trigger types.
203 SetVariationParameter("scheduler_trigger_types", "-");
204 ResetProvider();
205
206 // Then enable the scheduler.
207 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
208 ChangeStatusOfUnderlyingProvider(
209 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
210
211 scheduling_provider_->OnPersistentSchedulerWakeUp();
212 scheduling_provider_->OnNTPOpened();
213 scheduling_provider_->OnBrowserForegrounded();
214 scheduling_provider_->OnBrowserColdStart();
215 }
216
217 TEST_F(SchedulingRemoteSuggestionsProviderTest,
218 ShouldHandleEmptyParamForTriggerTypes) {
219 // First set an empty param for allowed trigger types -> should result in the
220 // default list.
221 SetVariationParameter("scheduler_trigger_types", "");
222 ResetProvider();
223
224 // Then enable the scheduler.
225 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
226 ChangeStatusOfUnderlyingProvider(
227 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
228
229 // For instance, persistent scheduler wake up should be enabled by default.
230 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
231 scheduling_provider_->OnPersistentSchedulerWakeUp();
232 }
233
234 TEST_F(SchedulingRemoteSuggestionsProviderTest,
235 ShouldHandleIncorrentParamForTriggerTypes) {
236 // First set an invalid list of allowed trigger types.
237 SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;");
238 ResetProvider();
239
240 // Then enable the scheduler.
241 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
242 ChangeStatusOfUnderlyingProvider(
243 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
244
245 // For instance, persistent scheduler wake up should be enabled by default.
246 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
247 scheduling_provider_->OnPersistentSchedulerWakeUp();
173 } 248 }
174 249
175 TEST_F(SchedulingRemoteSuggestionsProviderTest, 250 TEST_F(SchedulingRemoteSuggestionsProviderTest,
176 ShouldFetchOnPersistentSchedulerWakeUp) { 251 ShouldFetchOnPersistentSchedulerWakeUp) {
177 // First enable the scheduler. 252 // First set only this type to be allowed.
253 SetVariationParameter("scheduler_trigger_types",
254 "persistent_scheduler_wake_up");
255 ResetProvider();
256
257 // Then enable the scheduler.
178 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 258 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
179 ChangeStatusOfUnderlyingProvider( 259 ChangeStatusOfUnderlyingProvider(
180 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 260 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
181 261
182 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 262 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
183 scheduling_provider_->OnPersistentSchedulerWakeUp(); 263 scheduling_provider_->OnPersistentSchedulerWakeUp();
184 } 264 }
185 265
186 TEST_F(SchedulingRemoteSuggestionsProviderTest, 266 TEST_F(SchedulingRemoteSuggestionsProviderTest,
187 ShouldFetchOnPersistentSchedulerWakeUpRepeated) { 267 ShouldFetchOnPersistentSchedulerWakeUpRepeated) {
(...skipping 28 matching lines...) Expand all
216 ChangeStatusOfUnderlyingProvider( 296 ChangeStatusOfUnderlyingProvider(
217 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 297 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
218 // Make the first persistent fetch never finish. 298 // Make the first persistent fetch never finish.
219 scheduling_provider_->OnPersistentSchedulerWakeUp(); 299 scheduling_provider_->OnPersistentSchedulerWakeUp();
220 // Make the second fetch. 300 // Make the second fetch.
221 scheduling_provider_->OnPersistentSchedulerWakeUp(); 301 scheduling_provider_->OnPersistentSchedulerWakeUp();
222 } 302 }
223 303
224 TEST_F(SchedulingRemoteSuggestionsProviderTest, 304 TEST_F(SchedulingRemoteSuggestionsProviderTest,
225 ShouldFetchOnNTPOpenedForTheFirstTime) { 305 ShouldFetchOnNTPOpenedForTheFirstTime) {
226 // First enable the scheduler. 306 // First set only this type to be allowed.
307 SetVariationParameter("scheduler_trigger_types", "ntp_opened");
308 ResetProvider();
309
310 // Then enable the scheduler.
227 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 311 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
228 ChangeStatusOfUnderlyingProvider( 312 ChangeStatusOfUnderlyingProvider(
229 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 313 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
230 314
231 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 315 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
232 scheduling_provider_->OnNTPOpened(); 316 scheduling_provider_->OnNTPOpened();
233 } 317 }
234 318
235 TEST_F(SchedulingRemoteSuggestionsProviderTest, 319 TEST_F(SchedulingRemoteSuggestionsProviderTest,
320 ShouldFetchOnBrowserForegroundedForTheFirstTime) {
321 // First set only this type to be allowed.
322 SetVariationParameter("scheduler_trigger_types", "browser_foregrounded");
323 ResetProvider();
324
325 // Then enable the scheduler.
326 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
327 ChangeStatusOfUnderlyingProvider(
328 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
329
330 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
331 scheduling_provider_->OnBrowserForegrounded();
332 }
333
334 TEST_F(SchedulingRemoteSuggestionsProviderTest,
335 ShouldFetchOnBrowserColdStartForTheFirstTime) {
336 // First set only this type to be allowed.
337 SetVariationParameter("scheduler_trigger_types", "browser_cold_start");
338 ResetProvider();
339
340 // Then enable the scheduler.
341 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
342 ChangeStatusOfUnderlyingProvider(
343 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
344
345 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
346 scheduling_provider_->OnBrowserColdStart();
347 }
348
349 TEST_F(SchedulingRemoteSuggestionsProviderTest,
236 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) { 350 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) {
237 // First enable the scheduler; the second Schedule is called after the 351 // First enable the scheduler; the second Schedule is called after the
238 // successful fetch. 352 // successful fetch.
239 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 353 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
240 ChangeStatusOfUnderlyingProvider( 354 ChangeStatusOfUnderlyingProvider(
241 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 355 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
242 356
243 // Make the first soft fetch successful. 357 // Make the first soft fetch successful.
244 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 358 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
245 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 359 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 540 }
427 541
428 TEST_F(SchedulingRemoteSuggestionsProviderTest, 542 TEST_F(SchedulingRemoteSuggestionsProviderTest,
429 ReschedulesWhenWifiParamChanges) { 543 ReschedulesWhenWifiParamChanges) {
430 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 544 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
431 ChangeStatusOfUnderlyingProvider( 545 ChangeStatusOfUnderlyingProvider(
432 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 546 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
433 547
434 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 548 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
435 // null. Change the wifi interval for this class. 549 // null. Change the wifi interval for this class.
436 variations::testing::VariationParamsManager params_manager( 550 SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5");
437 ntp_snippets::kStudyName,
438 {{"fetching_interval_hours-wifi-active_ntp_user", "1.5"}},
439 {kArticleSuggestionsFeature.name});
440 551
441 // Schedule() should get called for the second time after params have changed. 552 // Schedule() should get called for the second time after params have changed.
442 ChangeStatusOfUnderlyingProvider( 553 ChangeStatusOfUnderlyingProvider(
443 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 554 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
444 } 555 }
445 556
446 TEST_F(SchedulingRemoteSuggestionsProviderTest, 557 TEST_F(SchedulingRemoteSuggestionsProviderTest,
447 ReschedulesWhenFallbackParamChanges) { 558 ReschedulesWhenFallbackParamChanges) {
448 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 559 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
449 ChangeStatusOfUnderlyingProvider( 560 ChangeStatusOfUnderlyingProvider(
450 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 561 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
451 562
452 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 563 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
453 // null. Change the wifi interval for this class. 564 // null. Change the fallback interval for this class.
454 variations::testing::VariationParamsManager params_manager( 565 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user",
455 ntp_snippets::kStudyName, 566 "1.5");
456 {{"fetching_interval_hours-fallback-active_ntp_user", "1.5"}},
457 {kArticleSuggestionsFeature.name});
458 567
459 // Schedule() should get called for the second time after params have changed. 568 // Schedule() should get called for the second time after params have changed.
460 ChangeStatusOfUnderlyingProvider( 569 ChangeStatusOfUnderlyingProvider(
461 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 570 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
462 } 571 }
463 572
464 TEST_F(SchedulingRemoteSuggestionsProviderTest, 573 TEST_F(SchedulingRemoteSuggestionsProviderTest,
465 ReschedulesWhenOnUsageEventParamChanges) { 574 ReschedulesWhenOnUsageEventParamChanges) {
466 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 575 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
467 ChangeStatusOfUnderlyingProvider( 576 ChangeStatusOfUnderlyingProvider(
468 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 577 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
469 578
470 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 579 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
471 // null. Change the wifi interval for this class. 580 // null. Change the on usage interval for this class.
472 variations::testing::VariationParamsManager params_manager( 581 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user",
473 ntp_snippets::kStudyName, 582 "1.5");
474 {{"soft_fetching_interval_hours-active-active_ntp_user", "1.5"}},
475 {kArticleSuggestionsFeature.name});
476 583
477 // Schedule() should get called for the second time after params have changed. 584 // Schedule() should get called for the second time after params have changed.
478 ChangeStatusOfUnderlyingProvider( 585 ChangeStatusOfUnderlyingProvider(
479 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 586 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
480 } 587 }
481 588
482 } // namespace ntp_snippets 589 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698