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

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: Minor fixes 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();
173 } 198 }
174 199
175 TEST_F(SchedulingRemoteSuggestionsProviderTest, 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();
248 }
249
250 TEST_F(SchedulingRemoteSuggestionsProviderTest,
176 ShouldFetchOnPersistentSchedulerWakeUp) { 251 ShouldFetchOnPersistentSchedulerWakeUp) {
177 // First enable the scheduler. 252 // First enable the scheduler.
178 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 253 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
179 ChangeStatusOfUnderlyingProvider( 254 ChangeStatusOfUnderlyingProvider(
180 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 255 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
181 256
182 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 257 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
183 scheduling_provider_->OnPersistentSchedulerWakeUp(); 258 scheduling_provider_->OnPersistentSchedulerWakeUp();
184 } 259 }
185 260
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 // First enable the scheduler. 301 // First enable the scheduler.
227 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 302 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
228 ChangeStatusOfUnderlyingProvider( 303 ChangeStatusOfUnderlyingProvider(
229 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 304 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
230 305
231 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 306 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
232 scheduling_provider_->OnNTPOpened(); 307 scheduling_provider_->OnNTPOpened();
233 } 308 }
234 309
235 TEST_F(SchedulingRemoteSuggestionsProviderTest, 310 TEST_F(SchedulingRemoteSuggestionsProviderTest,
311 ShouldFetchOnBrowserForegroundedForTheFirstTime) {
312 // First enable the scheduler.
tschumann 2017/01/12 12:44:20 would it make sense to only enable that trigger ma
313 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
314 ChangeStatusOfUnderlyingProvider(
315 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
316
317 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
318 scheduling_provider_->OnBrowserForegrounded();
319 }
320
321 TEST_F(SchedulingRemoteSuggestionsProviderTest,
322 ShouldFetchOnBrowserColdStartForTheFirstTime) {
323 // First enable the scheduler.
324 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
325 ChangeStatusOfUnderlyingProvider(
326 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
327
328 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
329 scheduling_provider_->OnBrowserColdStart();
330 }
331
332 TEST_F(SchedulingRemoteSuggestionsProviderTest,
236 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) { 333 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) {
237 // First enable the scheduler; the second Schedule is called after the 334 // First enable the scheduler; the second Schedule is called after the
238 // successful fetch. 335 // successful fetch.
239 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 336 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
240 ChangeStatusOfUnderlyingProvider( 337 ChangeStatusOfUnderlyingProvider(
241 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 338 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
242 339
243 // Make the first soft fetch successful. 340 // Make the first soft fetch successful.
244 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 341 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
245 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 342 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 } 523 }
427 524
428 TEST_F(SchedulingRemoteSuggestionsProviderTest, 525 TEST_F(SchedulingRemoteSuggestionsProviderTest,
429 ReschedulesWhenWifiParamChanges) { 526 ReschedulesWhenWifiParamChanges) {
430 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 527 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
431 ChangeStatusOfUnderlyingProvider( 528 ChangeStatusOfUnderlyingProvider(
432 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 529 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
433 530
434 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 531 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
435 // null. Change the wifi interval for this class. 532 // null. Change the wifi interval for this class.
436 variations::testing::VariationParamsManager params_manager( 533 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 534
441 // Schedule() should get called for the second time after params have changed. 535 // Schedule() should get called for the second time after params have changed.
442 ChangeStatusOfUnderlyingProvider( 536 ChangeStatusOfUnderlyingProvider(
443 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 537 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
444 } 538 }
445 539
446 TEST_F(SchedulingRemoteSuggestionsProviderTest, 540 TEST_F(SchedulingRemoteSuggestionsProviderTest,
447 ReschedulesWhenFallbackParamChanges) { 541 ReschedulesWhenFallbackParamChanges) {
448 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 542 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
449 ChangeStatusOfUnderlyingProvider( 543 ChangeStatusOfUnderlyingProvider(
450 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 544 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
451 545
452 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 546 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
453 // null. Change the wifi interval for this class. 547 // null. Change the fallback interval for this class.
454 variations::testing::VariationParamsManager params_manager( 548 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user",
455 ntp_snippets::kStudyName, 549 "1.5");
456 {{"fetching_interval_hours-fallback-active_ntp_user", "1.5"}},
457 {kArticleSuggestionsFeature.name});
458 550
459 // Schedule() should get called for the second time after params have changed. 551 // Schedule() should get called for the second time after params have changed.
460 ChangeStatusOfUnderlyingProvider( 552 ChangeStatusOfUnderlyingProvider(
461 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 553 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
462 } 554 }
463 555
464 TEST_F(SchedulingRemoteSuggestionsProviderTest, 556 TEST_F(SchedulingRemoteSuggestionsProviderTest,
465 ReschedulesWhenOnUsageEventParamChanges) { 557 ReschedulesWhenOnUsageEventParamChanges) {
466 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 558 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
467 ChangeStatusOfUnderlyingProvider( 559 ChangeStatusOfUnderlyingProvider(
468 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 560 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
469 561
470 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 562 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
471 // null. Change the wifi interval for this class. 563 // null. Change the on usage interval for this class.
472 variations::testing::VariationParamsManager params_manager( 564 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user",
473 ntp_snippets::kStudyName, 565 "1.5");
474 {{"soft_fetching_interval_hours-active-active_ntp_user", "1.5"}},
475 {kArticleSuggestionsFeature.name});
476 566
477 // Schedule() should get called for the second time after params have changed. 567 // Schedule() should get called for the second time after params have changed.
478 ChangeStatusOfUnderlyingProvider( 568 ChangeStatusOfUnderlyingProvider(
479 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 569 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
480 } 570 }
481 571
482 } // namespace ntp_snippets 572 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698