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

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

Issue 2774663002: [Remote suggestions] Refactor the scheduler (Closed)
Patch Set: Marc's nits #2 Created 3 years, 8 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/remote_suggestions_scheduler_impl.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>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 bool(base::TimeDelta period_wifi, 65 bool(base::TimeDelta period_wifi,
66 base::TimeDelta period_fallback)); 66 base::TimeDelta period_fallback));
67 MOCK_METHOD0(Unschedule, bool()); 67 MOCK_METHOD0(Unschedule, bool());
68 }; 68 };
69 69
70 // TODO(jkrcal): Move into its own library to reuse in other unit-tests? 70 // TODO(jkrcal): Move into its own library to reuse in other unit-tests?
71 class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider { 71 class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider {
72 public: 72 public:
73 MockRemoteSuggestionsProvider(Observer* observer) 73 MockRemoteSuggestionsProvider(Observer* observer)
74 : RemoteSuggestionsProvider(observer) {} 74 : RemoteSuggestionsProvider(observer) {}
75
76 MOCK_METHOD1(SetRemoteSuggestionsScheduler,
77 void(RemoteSuggestionsScheduler*));
78
79 // Move-only params are not supported by GMock. We want to mock out 75 // Move-only params are not supported by GMock. We want to mock out
80 // RefetchInTheBackground() which takes a unique_ptr<>. Instead, we add a new 76 // RefetchInTheBackground() which takes a unique_ptr<>. Instead, we add a new
81 // mock function which takes a copy of the callback and override the 77 // mock function which takes a copy of the callback and override the
82 // RemoteSuggestionsProvider's method to forward the call into the new mock 78 // RemoteSuggestionsProvider's method to forward the call into the new mock
83 // function. 79 // function.
84 void RefetchInTheBackground( 80 void RefetchInTheBackground(
85 std::unique_ptr<RemoteSuggestionsProvider::FetchStatusCallback> callback) 81 std::unique_ptr<RemoteSuggestionsProvider::FetchStatusCallback> callback)
86 override { 82 override {
87 RefetchInTheBackground(*callback); 83 RefetchInTheBackground(*callback);
88 } 84 }
(...skipping 19 matching lines...) Expand all
108 MOCK_METHOD1(DismissSuggestion, void(const ContentSuggestion::ID&)); 104 MOCK_METHOD1(DismissSuggestion, void(const ContentSuggestion::ID&));
109 MOCK_METHOD2(FetchSuggestionImage, 105 MOCK_METHOD2(FetchSuggestionImage,
110 void(const ContentSuggestion::ID&, const ImageFetchedCallback&)); 106 void(const ContentSuggestion::ID&, const ImageFetchedCallback&));
111 MOCK_METHOD2(GetDismissedSuggestionsForDebugging, 107 MOCK_METHOD2(GetDismissedSuggestionsForDebugging,
112 void(Category, const DismissedSuggestionsCallback&)); 108 void(Category, const DismissedSuggestionsCallback&));
113 MOCK_METHOD0(OnSignInStateChanged, void()); 109 MOCK_METHOD0(OnSignInStateChanged, void());
114 }; 110 };
115 111
116 } // namespace 112 } // namespace
117 113
118 class SchedulingRemoteSuggestionsProviderTest : public ::testing::Test { 114 class RemoteSuggestionsSchedulerImplTest : public ::testing::Test {
119 public: 115 public:
120 SchedulingRemoteSuggestionsProviderTest() 116 RemoteSuggestionsSchedulerImplTest()
121 : // For the test we enabled all trigger types. 117 : // For the test we enabled all trigger types.
122 default_variation_params_{{"scheduler_trigger_types", 118 default_variation_params_{{"scheduler_trigger_types",
123 "persistent_scheduler_wake_up,ntp_opened," 119 "persistent_scheduler_wake_up,ntp_opened,"
124 "browser_foregrounded,browser_cold_start"}}, 120 "browser_foregrounded,browser_cold_start"}},
125 params_manager_(ntp_snippets::kStudyName, 121 params_manager_(ntp_snippets::kStudyName,
126 default_variation_params_, 122 default_variation_params_,
127 {kArticleSuggestionsFeature.name}), 123 {kArticleSuggestionsFeature.name}),
128 user_classifier_(/*pref_service=*/nullptr, 124 user_classifier_(/*pref_service=*/nullptr,
129 base::MakeUnique<base::DefaultClock>()) { 125 base::MakeUnique<base::DefaultClock>()) {
130 SchedulingRemoteSuggestionsProvider::RegisterProfilePrefs( 126 RemoteSuggestionsSchedulerImpl::RegisterProfilePrefs(
131 utils_.pref_service()->registry()); 127 utils_.pref_service()->registry());
132 RequestThrottler::RegisterProfilePrefs(utils_.pref_service()->registry()); 128 RequestThrottler::RegisterProfilePrefs(utils_.pref_service()->registry());
133 // TODO(jkrcal) Create a static function in EulaAcceptedNotifier that 129 // TODO(jkrcal) Create a static function in EulaAcceptedNotifier that
134 // registers this pref and replace the call in browser_process_impl.cc & in 130 // registers this pref and replace the call in browser_process_impl.cc & in
135 // eula_accepted_notifier_unittest.cc with the new static function. 131 // eula_accepted_notifier_unittest.cc with the new static function.
136 local_state_.registry()->RegisterBooleanPref(::prefs::kEulaAccepted, false); 132 local_state_.registry()->RegisterBooleanPref(::prefs::kEulaAccepted, false);
137 ResetProvider(); 133 ResetProvider();
138 } 134 }
139 135
140 void ResetProvider() { 136 void ResetProvider() {
141 auto underlying_provider = 137 provider_ = base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>(
142 base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>( 138 /*observer=*/nullptr);
143 /*observer=*/nullptr);
144 underlying_provider_ = underlying_provider.get();
145 139
146 auto test_clock = base::MakeUnique<base::SimpleTestClock>(); 140 auto test_clock = base::MakeUnique<base::SimpleTestClock>();
147 test_clock_ = test_clock.get(); 141 test_clock_ = test_clock.get();
148 test_clock_->SetNow(base::Time::Now()); 142 test_clock_->SetNow(base::Time::Now());
149 143
150 scheduling_provider_ = 144 scheduler_ = base::MakeUnique<RemoteSuggestionsSchedulerImpl>(
151 base::MakeUnique<SchedulingRemoteSuggestionsProvider>( 145 &persistent_scheduler_, &user_classifier_, utils_.pref_service(),
152 /*observer=*/nullptr, std::move(underlying_provider), 146 &local_state_, std::move(test_clock));
153 &persistent_scheduler_, &user_classifier_, utils_.pref_service(), 147 scheduler_->SetProvider(provider_.get());
154 &local_state_, std::move(test_clock));
155 } 148 }
156 149
157 void SetVariationParameter(const std::string& param_name, 150 void SetVariationParameter(const std::string& param_name,
158 const std::string& param_value) { 151 const std::string& param_value) {
159 std::map<std::string, std::string> params = default_variation_params_; 152 std::map<std::string, std::string> params = default_variation_params_;
160 params[param_name] = param_value; 153 params[param_name] = param_value;
161 154
162 params_manager_.ClearAllVariationParams(); 155 params_manager_.ClearAllVariationParams();
163 params_manager_.SetVariationParamsWithFeatureAssociations( 156 params_manager_.SetVariationParamsWithFeatureAssociations(
164 ntp_snippets::kStudyName, params, 157 ntp_snippets::kStudyName, params,
(...skipping 17 matching lines...) Expand all
182 fetch_done, 175 fetch_done,
183 Status status_code, 176 Status status_code,
184 std::vector<ContentSuggestion> suggestions) { 177 std::vector<ContentSuggestion> suggestions) {
185 fetch_done->Call(status_code, suggestions); 178 fetch_done->Call(status_code, suggestions);
186 } 179 }
187 180
188 protected: 181 protected:
189 std::map<std::string, std::string> default_variation_params_; 182 std::map<std::string, std::string> default_variation_params_;
190 variations::testing::VariationParamsManager params_manager_; 183 variations::testing::VariationParamsManager params_manager_;
191 184
192 void ActivateUnderlyingProvider() { 185 void ActivateProvider() {
193 SetEulaAcceptedPref(); 186 SetEulaAcceptedPref();
194 scheduling_provider()->OnProviderActivated(); 187 scheduler_->OnProviderActivated();
195 } 188 }
196 189
197 void InactivateUnderlyingProvider() { 190 void DeactivateProvider() { scheduler_->OnProviderDeactivated(); }
198 scheduling_provider()->OnProviderDeactivated();
199 }
200 191
201 MockPersistentScheduler* persistent_scheduler() { 192 MockPersistentScheduler* persistent_scheduler() {
202 return &persistent_scheduler_; 193 return &persistent_scheduler_;
203 } 194 }
204 base::SimpleTestClock* test_clock() { return test_clock_; } 195 base::SimpleTestClock* test_clock() { return test_clock_; }
205 MockRemoteSuggestionsProvider* underlying_provider() { 196 MockRemoteSuggestionsProvider* provider() { return provider_.get(); }
206 return underlying_provider_; 197 RemoteSuggestionsSchedulerImpl* scheduler() { return scheduler_.get(); }
207 }
208 SchedulingRemoteSuggestionsProvider* scheduling_provider() {
209 return scheduling_provider_.get();
210 }
211 198
212 private: 199 private:
213 test::RemoteSuggestionsTestUtils utils_; 200 test::RemoteSuggestionsTestUtils utils_;
214 UserClassifier user_classifier_; 201 UserClassifier user_classifier_;
215 TestingPrefServiceSimple local_state_; 202 TestingPrefServiceSimple local_state_;
216 StrictMock<MockPersistentScheduler> persistent_scheduler_; 203 StrictMock<MockPersistentScheduler> persistent_scheduler_;
217 base::SimpleTestClock* test_clock_; 204 base::SimpleTestClock* test_clock_;
218 StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_; 205 std::unique_ptr<MockRemoteSuggestionsProvider> provider_;
219 std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_; 206 std::unique_ptr<RemoteSuggestionsSchedulerImpl> scheduler_;
220 207
221 DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProviderTest); 208 DISALLOW_COPY_AND_ASSIGN(RemoteSuggestionsSchedulerImplTest);
222 }; 209 };
223 210
224 TEST_F(SchedulingRemoteSuggestionsProviderTest, 211 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldIgnoreSignalsWhenNotEnabled) {
225 ShouldIgnoreSignalsWhenNotEnabled) { 212 scheduler()->OnPersistentSchedulerWakeUp();
226 scheduling_provider()->OnPersistentSchedulerWakeUp(); 213 scheduler()->OnNTPOpened();
227 scheduling_provider()->OnNTPOpened(); 214 scheduler()->OnBrowserForegrounded();
228 scheduling_provider()->OnBrowserForegrounded(); 215 scheduler()->OnBrowserColdStart();
229 scheduling_provider()->OnBrowserColdStart();
230 } 216 }
231 217
232 TEST_F(SchedulingRemoteSuggestionsProviderTest, 218 TEST_F(RemoteSuggestionsSchedulerImplTest,
233 ShouldIgnoreEulaStateOnPlatformsWhereNotAvaiable) { 219 ShouldIgnoreEulaStateOnPlatformsWhereNotAvaiable) {
234 // Only run this tests on platforms that don't support Eula. 220 // Only run this tests on platforms that don't support Eula.
235 if (IsEulaNotifierAvailable()) { 221 if (IsEulaNotifierAvailable()) {
236 return; 222 return;
237 } 223 }
238 224
239 // Activating the provider should schedule the persistent background fetches. 225 // Activating the provider should schedule the persistent background fetches.
240 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 226 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
241 scheduling_provider()->OnProviderActivated(); 227 scheduler()->OnProviderActivated();
242 228
243 // Verify fetches get triggered. 229 // Verify fetches get triggered.
244 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 230 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
245 scheduling_provider()->OnPersistentSchedulerWakeUp(); 231 scheduler()->OnPersistentSchedulerWakeUp();
246 } 232 }
247 233
248 TEST_F(SchedulingRemoteSuggestionsProviderTest, 234 TEST_F(RemoteSuggestionsSchedulerImplTest,
249 ShouldIgnoreSignalsWhenEulaNotAccepted) { 235 ShouldIgnoreSignalsWhenEulaNotAccepted) {
250 // Only run this tests on platforms supporting Eula. 236 // Only run this tests on platforms supporting Eula.
251 if (!IsEulaNotifierAvailable()) { 237 if (!IsEulaNotifierAvailable()) {
252 return; 238 return;
253 } 239 }
254 // Activating the provider should schedule the persistent background fetches. 240 // Activating the provider should schedule the persistent background fetches.
255 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 241 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
256 scheduling_provider()->OnProviderActivated(); 242 scheduler()->OnProviderActivated();
257 243
258 // All signals are ignored because of Eula not being accepted. 244 // All signals are ignored because of Eula not being accepted.
259 scheduling_provider()->OnPersistentSchedulerWakeUp(); 245 scheduler()->OnPersistentSchedulerWakeUp();
260 scheduling_provider()->OnNTPOpened(); 246 scheduler()->OnNTPOpened();
261 scheduling_provider()->OnBrowserForegrounded(); 247 scheduler()->OnBrowserForegrounded();
262 scheduling_provider()->OnBrowserColdStart(); 248 scheduler()->OnBrowserColdStart();
263 } 249 }
264 250
265 TEST_F(SchedulingRemoteSuggestionsProviderTest, 251 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldFetchWhenEulaGetsAccepted) {
266 ShouldFetchWhenEulaGetsAccepted) {
267 // Only run this tests on platforms supporting Eula. 252 // Only run this tests on platforms supporting Eula.
268 if (!IsEulaNotifierAvailable()) { 253 if (!IsEulaNotifierAvailable()) {
269 return; 254 return;
270 } 255 }
271 // Activating the provider should schedule the persistent background fetches. 256 // Activating the provider should schedule the persistent background fetches.
272 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 257 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
273 scheduling_provider()->OnProviderActivated(); 258 scheduler()->OnProviderActivated();
274 259
275 // Make one (ignored) call to make sure we are interested in eula state. 260 // Make one (ignored) call to make sure we are interested in eula state.
276 scheduling_provider()->OnPersistentSchedulerWakeUp(); 261 scheduler()->OnPersistentSchedulerWakeUp();
277 262
278 // Accepting Eula afterwards results in a background fetch. 263 // Accepting Eula afterwards results in a background fetch.
279 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 264 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
280 SetEulaAcceptedPref(); 265 SetEulaAcceptedPref();
281 } 266 }
282 267
283 TEST_F(SchedulingRemoteSuggestionsProviderTest, 268 TEST_F(RemoteSuggestionsSchedulerImplTest,
284 ShouldIgnoreSignalsWhenDisabledByParam) { 269 ShouldIgnoreSignalsWhenDisabledByParam) {
285 // First set an empty list of allowed trigger types. 270 // First set an empty list of allowed trigger types.
286 SetVariationParameter("scheduler_trigger_types", "-"); 271 SetVariationParameter("scheduler_trigger_types", "-");
287 ResetProvider(); 272 ResetProvider();
288 273
289 // Then enable the scheduler. 274 // Then enable the scheduler.
290 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 275 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
291 ActivateUnderlyingProvider(); 276 ActivateProvider();
292 277
293 scheduling_provider()->OnPersistentSchedulerWakeUp(); 278 scheduler()->OnPersistentSchedulerWakeUp();
294 scheduling_provider()->OnNTPOpened(); 279 scheduler()->OnNTPOpened();
295 scheduling_provider()->OnBrowserForegrounded(); 280 scheduler()->OnBrowserForegrounded();
296 scheduling_provider()->OnBrowserColdStart(); 281 scheduler()->OnBrowserColdStart();
297 } 282 }
298 283
299 TEST_F(SchedulingRemoteSuggestionsProviderTest, 284 TEST_F(RemoteSuggestionsSchedulerImplTest,
300 ShouldHandleEmptyParamForTriggerTypes) { 285 ShouldHandleEmptyParamForTriggerTypes) {
301 // First set an empty param for allowed trigger types -> should result in the 286 // First set an empty param for allowed trigger types -> should result in the
302 // default list. 287 // default list.
303 SetVariationParameter("scheduler_trigger_types", ""); 288 SetVariationParameter("scheduler_trigger_types", "");
304 ResetProvider(); 289 ResetProvider();
305 290
306 // Then enable the scheduler. 291 // Then enable the scheduler.
307 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 292 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
308 ActivateUnderlyingProvider(); 293 ActivateProvider();
309 294
310 // For instance, persistent scheduler wake up should be enabled by default. 295 // For instance, persistent scheduler wake up should be enabled by default.
311 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 296 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
312 scheduling_provider()->OnPersistentSchedulerWakeUp(); 297 scheduler()->OnPersistentSchedulerWakeUp();
313 } 298 }
314 299
315 TEST_F(SchedulingRemoteSuggestionsProviderTest, 300 TEST_F(RemoteSuggestionsSchedulerImplTest,
316 ShouldHandleIncorrentParamForTriggerTypes) { 301 ShouldHandleIncorrentParamForTriggerTypes) {
317 // First set an invalid list of allowed trigger types. 302 // First set an invalid list of allowed trigger types.
318 SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;"); 303 SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;");
319 ResetProvider(); 304 ResetProvider();
320 305
321 // Then enable the scheduler. 306 // Then enable the scheduler.
322 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 307 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
323 ActivateUnderlyingProvider(); 308 ActivateProvider();
324 309
325 // For instance, persistent scheduler wake up should be enabled by default. 310 // For instance, persistent scheduler wake up should be enabled by default.
326 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 311 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
327 scheduling_provider()->OnPersistentSchedulerWakeUp(); 312 scheduler()->OnPersistentSchedulerWakeUp();
328 } 313 }
329 314
330 TEST_F(SchedulingRemoteSuggestionsProviderTest, 315 TEST_F(RemoteSuggestionsSchedulerImplTest,
331 ShouldFetchOnPersistentSchedulerWakeUp) { 316 ShouldFetchOnPersistentSchedulerWakeUp) {
332 // First set only this type to be allowed. 317 // First set only this type to be allowed.
333 SetVariationParameter("scheduler_trigger_types", 318 SetVariationParameter("scheduler_trigger_types",
334 "*persistent_scheduler()wake_up"); 319 "persistent_scheduler_wake_up");
335 ResetProvider(); 320 ResetProvider();
336 321
337 // Then enable the scheduler. 322 // Then enable the scheduler.
338 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 323 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
339 ActivateUnderlyingProvider(); 324 ActivateProvider();
340 325
341 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 326 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
342 scheduling_provider()->OnPersistentSchedulerWakeUp(); 327 scheduler()->OnPersistentSchedulerWakeUp();
343 } 328 }
344 329
345 TEST_F(SchedulingRemoteSuggestionsProviderTest, 330 TEST_F(RemoteSuggestionsSchedulerImplTest,
346 ShouldFetchOnPersistentSchedulerWakeUpRepeated) { 331 ShouldFetchOnPersistentSchedulerWakeUpRepeated) {
347 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 332 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
348 { 333 {
349 InSequence s; 334 InSequence s;
350 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 335 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
351 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 336 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
352 .WillOnce(SaveArg<0>(&signal_fetch_done)); 337 .WillOnce(SaveArg<0>(&signal_fetch_done));
353 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 338 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
354 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 339 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
355 } 340 }
356 // First enable the scheduler -- calling Schedule() for the first time. 341 // First enable the scheduler -- calling Schedule() for the first time.
357 ActivateUnderlyingProvider(); 342 ActivateProvider();
358 // Make the first persistent fetch successful -- calling Schedule() again. 343 // Make the first persistent fetch successful -- calling Schedule() again.
359 scheduling_provider()->OnPersistentSchedulerWakeUp(); 344 scheduler()->OnPersistentSchedulerWakeUp();
360 signal_fetch_done.Run(Status::Success()); 345 signal_fetch_done.Run(Status::Success());
361 // Make the second fetch. 346 // Make the second fetch.
362 scheduling_provider()->OnPersistentSchedulerWakeUp(); 347 scheduler()->OnPersistentSchedulerWakeUp();
363 } 348 }
364 349
365 TEST_F(SchedulingRemoteSuggestionsProviderTest, 350 TEST_F(RemoteSuggestionsSchedulerImplTest,
366 ShouldNotTriggerBackgroundFetchIfAlreadyInProgess) { 351 ShouldNotTriggerBackgroundFetchIfAlreadyInProgess) {
367 { 352 {
368 InSequence s; 353 InSequence s;
369 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 354 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
370 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 355 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
371 // RefetchInTheBackground is not called after the second trigger. 356 // RefetchInTheBackground is not called after the second trigger.
372 } 357 }
373 // First enable the scheduler -- calling Schedule() for the first time. 358 // First enable the scheduler -- calling Schedule() for the first time.
374 ActivateUnderlyingProvider(); 359 ActivateProvider();
375 // Make the first persistent fetch never finish. 360 // Make the first persistent fetch never finish.
376 scheduling_provider()->OnPersistentSchedulerWakeUp(); 361 scheduler()->OnPersistentSchedulerWakeUp();
377 // Make the second fetch. 362 // Make the second fetch.
378 scheduling_provider()->OnPersistentSchedulerWakeUp(); 363 scheduler()->OnPersistentSchedulerWakeUp();
379 } 364 }
380 365
381 TEST_F(SchedulingRemoteSuggestionsProviderTest, 366 TEST_F(RemoteSuggestionsSchedulerImplTest,
382 ShouldFetchOnNTPOpenedForTheFirstTime) { 367 ShouldFetchOnNTPOpenedForTheFirstTime) {
383 // First set only this type to be allowed. 368 // First set only this type to be allowed.
384 SetVariationParameter("scheduler_trigger_types", "ntp_opened"); 369 SetVariationParameter("scheduler_trigger_types", "ntp_opened");
385 ResetProvider(); 370 ResetProvider();
386 371
387 // Then enable the scheduler. 372 // Then enable the scheduler.
388 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 373 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
389 ActivateUnderlyingProvider(); 374 ActivateProvider();
390 375
391 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 376 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
392 scheduling_provider()->OnNTPOpened(); 377 scheduler()->OnNTPOpened();
393 } 378 }
394 379
395 TEST_F(SchedulingRemoteSuggestionsProviderTest, 380 TEST_F(RemoteSuggestionsSchedulerImplTest,
396 ShouldFetchOnBrowserForegroundedForTheFirstTime) { 381 ShouldFetchOnBrowserForegroundedForTheFirstTime) {
397 // First set only this type to be allowed. 382 // First set only this type to be allowed.
398 SetVariationParameter("scheduler_trigger_types", "browser_foregrounded"); 383 SetVariationParameter("scheduler_trigger_types", "browser_foregrounded");
399 ResetProvider(); 384 ResetProvider();
400 385
401 // Then enable the scheduler. 386 // Then enable the scheduler.
402 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 387 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
403 ActivateUnderlyingProvider(); 388 ActivateProvider();
404 389
405 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 390 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
406 scheduling_provider()->OnBrowserForegrounded(); 391 scheduler()->OnBrowserForegrounded();
407 } 392 }
408 393
409 TEST_F(SchedulingRemoteSuggestionsProviderTest, 394 TEST_F(RemoteSuggestionsSchedulerImplTest,
410 ShouldFetchOnBrowserColdStartForTheFirstTime) { 395 ShouldFetchOnBrowserColdStartForTheFirstTime) {
411 // First set only this type to be allowed. 396 // First set only this type to be allowed.
412 SetVariationParameter("scheduler_trigger_types", "browser_cold_start"); 397 SetVariationParameter("scheduler_trigger_types", "browser_cold_start");
413 ResetProvider(); 398 ResetProvider();
414 399
415 // Then enable the scheduler. 400 // Then enable the scheduler.
416 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 401 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
417 ActivateUnderlyingProvider(); 402 ActivateProvider();
418 403
419 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 404 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
420 scheduling_provider()->OnBrowserColdStart(); 405 scheduler()->OnBrowserColdStart();
421 } 406 }
422 407
423 TEST_F(SchedulingRemoteSuggestionsProviderTest, 408 TEST_F(RemoteSuggestionsSchedulerImplTest,
424 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) { 409 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) {
425 // First enable the scheduler; the second Schedule is called after the 410 // First enable the scheduler; the second Schedule is called after the
426 // successful fetch. 411 // successful fetch.
427 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 412 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
428 ActivateUnderlyingProvider(); 413 ActivateProvider();
429 414
430 // Make the first soft fetch successful. 415 // Make the first soft fetch successful.
431 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 416 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
432 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 417 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
433 .WillOnce(SaveArg<0>(&signal_fetch_done)); 418 .WillOnce(SaveArg<0>(&signal_fetch_done));
434 scheduling_provider()->OnNTPOpened(); 419 scheduler()->OnNTPOpened();
435 signal_fetch_done.Run(Status::Success()); 420 signal_fetch_done.Run(Status::Success());
436 // The second call is ignored if it happens right after the first one. 421 // The second call is ignored if it happens right after the first one.
437 scheduling_provider()->OnNTPOpened(); 422 scheduler()->OnNTPOpened();
438 } 423 }
439 424
440 TEST_F(SchedulingRemoteSuggestionsProviderTest, 425 TEST_F(RemoteSuggestionsSchedulerImplTest,
441 ShouldNotFetchOnNTPOpenedAfterSuccessfulPersistentFetch) { 426 ShouldNotFetchOnNTPOpenedAfterSuccessfulPersistentFetch) {
442 // First enable the scheduler; the second Schedule is called after the 427 // First enable the scheduler; the second Schedule is called after the
443 // successful fetch. 428 // successful fetch.
444 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 429 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
445 ActivateUnderlyingProvider(); 430 ActivateProvider();
446 431
447 // Make the first persistent fetch successful. 432 // Make the first persistent fetch successful.
448 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 433 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
449 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 434 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
450 .WillOnce(SaveArg<0>(&signal_fetch_done)); 435 .WillOnce(SaveArg<0>(&signal_fetch_done));
451 scheduling_provider()->OnPersistentSchedulerWakeUp(); 436 scheduler()->OnPersistentSchedulerWakeUp();
452 signal_fetch_done.Run(Status::Success()); 437 signal_fetch_done.Run(Status::Success());
453 // The second call is ignored if it happens right after the first one. 438 // The second call is ignored if it happens right after the first one.
454 scheduling_provider()->OnNTPOpened(); 439 scheduler()->OnNTPOpened();
455 } 440 }
456 441
457 TEST_F(SchedulingRemoteSuggestionsProviderTest, 442 TEST_F(RemoteSuggestionsSchedulerImplTest,
458 ShouldNotFetchOnNTPOpenedAfterFailedSoftFetch) { 443 ShouldNotFetchOnNTPOpenedAfterFailedSoftFetch) {
459 // First enable the scheduler. 444 // First enable the scheduler.
460 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 445 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
461 ActivateUnderlyingProvider(); 446 ActivateProvider();
462 447
463 // Make the first soft fetch failed. 448 // Make the first soft fetch failed.
464 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 449 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
465 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 450 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
466 .WillOnce(SaveArg<0>(&signal_fetch_done)); 451 .WillOnce(SaveArg<0>(&signal_fetch_done));
467 scheduling_provider()->OnNTPOpened(); 452 scheduler()->OnNTPOpened();
468 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 453 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
469 454
470 // The second call is ignored if it happens right after the first one. 455 // The second call is ignored if it happens right after the first one.
471 scheduling_provider()->OnNTPOpened(); 456 scheduler()->OnNTPOpened();
472 } 457 }
473 458
474 TEST_F(SchedulingRemoteSuggestionsProviderTest, 459 TEST_F(RemoteSuggestionsSchedulerImplTest,
475 ShouldNotFetchOnNTPOpenedAfterFailedPersistentFetch) { 460 ShouldNotFetchOnNTPOpenedAfterFailedPersistentFetch) {
476 // First enable the scheduler. 461 // First enable the scheduler.
477 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 462 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
478 ActivateUnderlyingProvider(); 463 ActivateProvider();
479 464
480 // Make the first persistent fetch failed. 465 // Make the first persistent fetch failed.
481 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 466 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
482 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 467 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
483 .WillOnce(SaveArg<0>(&signal_fetch_done)); 468 .WillOnce(SaveArg<0>(&signal_fetch_done));
484 scheduling_provider()->OnPersistentSchedulerWakeUp(); 469 scheduler()->OnPersistentSchedulerWakeUp();
485 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 470 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
486 471
487 // The second call is ignored if it happens right after the first one. 472 // The second call is ignored if it happens right after the first one.
488 scheduling_provider()->OnNTPOpened(); 473 scheduler()->OnNTPOpened();
489 } 474 }
490 475
491 TEST_F(SchedulingRemoteSuggestionsProviderTest, 476 TEST_F(RemoteSuggestionsSchedulerImplTest,
492 ShouldFetchAgainOnBrowserForgroundLaterAgain) { 477 ShouldFetchAgainOnBrowserForgroundLaterAgain) {
493 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 478 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
494 { 479 {
495 InSequence s; 480 InSequence s;
496 // Initial scheduling after being enabled. 481 // Initial scheduling after being enabled.
497 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 482 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
498 // The first call to NTPOpened results in a fetch. 483 // The first call to NTPOpened results in a fetch.
499 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 484 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
500 .WillOnce(SaveArg<0>(&signal_fetch_done)); 485 .WillOnce(SaveArg<0>(&signal_fetch_done));
501 // Rescheduling after a succesful fetch. 486 // Rescheduling after a succesful fetch.
502 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 487 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
503 // The second call to NTPOpened 2hrs later again results in a fetch. 488 // The second call to NTPOpened 2hrs later again results in a fetch.
504 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 489 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
505 } 490 }
506 491
507 // First enable the scheduler. 492 // First enable the scheduler.
508 ActivateUnderlyingProvider(); 493 ActivateProvider();
509 // Make the first soft fetch successful. 494 // Make the first soft fetch successful.
510 scheduling_provider()->OnBrowserForegrounded(); 495 scheduler()->OnBrowserForegrounded();
511 signal_fetch_done.Run(Status::Success()); 496 signal_fetch_done.Run(Status::Success());
512 // Open NTP again after 2hrs. 497 // Open NTP again after 2hrs.
513 test_clock()->Advance(base::TimeDelta::FromHours(2)); 498 test_clock()->Advance(base::TimeDelta::FromHours(2));
514 scheduling_provider()->OnBrowserForegrounded(); 499 scheduler()->OnBrowserForegrounded();
515 } 500 }
516 501
517 TEST_F(SchedulingRemoteSuggestionsProviderTest, 502 TEST_F(RemoteSuggestionsSchedulerImplTest,
518 ShouldRescheduleOnRescheduleFetching) { 503 ShouldRescheduleOnRescheduleFetching) {
519 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 504 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
520 scheduling_provider()->RescheduleFetching(); 505 scheduler()->RescheduleFetching();
521 } 506 }
522 507
523 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnActivation) { 508 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnActivation) {
524 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 509 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
525 ActivateUnderlyingProvider(); 510 ActivateProvider();
526 } 511 }
527 512
528 TEST_F(SchedulingRemoteSuggestionsProviderTest, 513 TEST_F(RemoteSuggestionsSchedulerImplTest,
529 ShouldUnscheduleOnLaterInactivation) { 514 ShouldUnscheduleOnLaterInactivation) {
530 { 515 {
531 InSequence s; 516 InSequence s;
532 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 517 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
533 EXPECT_CALL(*persistent_scheduler(), Unschedule()); 518 EXPECT_CALL(*persistent_scheduler(), Unschedule());
534 } 519 }
535 ActivateUnderlyingProvider(); 520 ActivateProvider();
536 InactivateUnderlyingProvider(); 521 DeactivateProvider();
537 } 522 }
538 523
539 TEST_F(SchedulingRemoteSuggestionsProviderTest, 524 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnLaterActivation) {
540 ShouldScheduleOnLaterActivation) {
541 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 525 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
542 // There is no schedule yet, so inactivation does not trigger unschedule. 526 // There is no schedule yet, so inactivation does not trigger unschedule.
543 InactivateUnderlyingProvider(); 527 DeactivateProvider();
544 ActivateUnderlyingProvider(); 528 ActivateProvider();
545 } 529 }
546 530
547 TEST_F(SchedulingRemoteSuggestionsProviderTest, 531 TEST_F(RemoteSuggestionsSchedulerImplTest,
548 ShouldRescheduleAfterSuccessfulFetch) { 532 ShouldRescheduleAfterSuccessfulFetch) {
549 // First reschedule on becoming active. 533 // First reschedule on becoming active.
550 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 534 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
551 ActivateUnderlyingProvider(); 535 ActivateProvider();
552 536
553 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 537 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
554 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 538 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
555 .WillOnce(SaveArg<0>(&signal_fetch_done)); 539 .WillOnce(SaveArg<0>(&signal_fetch_done));
556 540
557 // Trigger a fetch. 541 // Trigger a fetch.
558 scheduling_provider()->OnPersistentSchedulerWakeUp(); 542 scheduler()->OnPersistentSchedulerWakeUp();
559 // Second reschedule after a successful fetch. 543 // Second reschedule after a successful fetch.
560 signal_fetch_done.Run(Status::Success()); 544 signal_fetch_done.Run(Status::Success());
561 } 545 }
562 546
563 TEST_F(SchedulingRemoteSuggestionsProviderTest, 547 TEST_F(RemoteSuggestionsSchedulerImplTest,
564 ShouldNotRescheduleAfterFailedFetch) { 548 ShouldNotRescheduleAfterFailedFetch) {
565 // Only reschedule on becoming active. 549 // Only reschedule on becoming active.
566 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 550 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
567 ActivateUnderlyingProvider(); 551 ActivateProvider();
568 552
569 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 553 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
570 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 554 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
571 .WillOnce(SaveArg<0>(&signal_fetch_done)); 555 .WillOnce(SaveArg<0>(&signal_fetch_done));
572 556
573 // Trigger a fetch. 557 // Trigger a fetch.
574 scheduling_provider()->OnPersistentSchedulerWakeUp(); 558 scheduler()->OnPersistentSchedulerWakeUp();
575 // No furter reschedule after a failure. 559 // No furter reschedule after a failure.
576 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 560 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
577 } 561 }
578 562
579 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnlyOnce) { 563 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnlyOnce) {
580 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 564 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
581 ActivateUnderlyingProvider(); 565 ActivateProvider();
582 // No further call to Schedule on a second status callback. 566 // No further call to Schedule on a second status callback.
583 ActivateUnderlyingProvider(); 567 ActivateProvider();
584 } 568 }
585 569
586 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldUnscheduleOnlyOnce) { 570 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) {
587 { 571 {
588 InSequence s; 572 InSequence s;
589 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 573 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
590 EXPECT_CALL(*persistent_scheduler(), Unschedule()); 574 EXPECT_CALL(*persistent_scheduler(), Unschedule());
591 } 575 }
592 // First schedule so that later we really unschedule. 576 // First schedule so that later we really unschedule.
593 ActivateUnderlyingProvider(); 577 ActivateProvider();
594 InactivateUnderlyingProvider(); 578 DeactivateProvider();
595 // No further call to Unschedule on second status callback. 579 // No further call to Unschedule on second status callback.
596 InactivateUnderlyingProvider(); 580 DeactivateProvider();
597 } 581 }
598 582
599 TEST_F(SchedulingRemoteSuggestionsProviderTest, 583 TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) {
600 ReschedulesWhenWifiParamChanges) {
601 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 584 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
602 ActivateUnderlyingProvider(); 585 ActivateProvider();
603 586
604 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 587 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
605 // null. Change the wifi interval for this class. 588 // null. Change the wifi interval for this class.
606 SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5"); 589 SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5");
607 590
608 // Schedule() should get called for the second time after params have changed. 591 // Schedule() should get called for the second time after params have changed.
609 ActivateUnderlyingProvider(); 592 ActivateProvider();
610 } 593 }
611 594
612 TEST_F(SchedulingRemoteSuggestionsProviderTest, 595 TEST_F(RemoteSuggestionsSchedulerImplTest,
613 ReschedulesWhenFallbackParamChanges) { 596 ReschedulesWhenFallbackParamChanges) {
614 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 597 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
615 ActivateUnderlyingProvider(); 598 ActivateProvider();
616 599
617 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 600 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
618 // null. Change the fallback interval for this class. 601 // null. Change the fallback interval for this class.
619 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user", 602 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user",
620 "1.5"); 603 "1.5");
621 604
622 // Schedule() should get called for the second time after params have changed. 605 // Schedule() should get called for the second time after params have changed.
623 ActivateUnderlyingProvider(); 606 ActivateProvider();
624 } 607 }
625 608
626 TEST_F(SchedulingRemoteSuggestionsProviderTest, 609 TEST_F(RemoteSuggestionsSchedulerImplTest,
627 ReschedulesWhenOnUsageEventParamChanges) { 610 ReschedulesWhenOnUsageEventParamChanges) {
628 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 611 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
629 ActivateUnderlyingProvider(); 612 ActivateProvider();
630 613
631 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 614 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
632 // null. Change the on usage interval for this class. 615 // null. Change the on usage interval for this class.
633 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", 616 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user",
634 "1.5"); 617 "1.5");
635 618
636 // Schedule() should get called for the second time after params have changed. 619 // Schedule() should get called for the second time after params have changed.
637 ActivateUnderlyingProvider(); 620 ActivateProvider();
638 } 621 }
639 622
640 TEST_F(SchedulingRemoteSuggestionsProviderTest, 623 TEST_F(RemoteSuggestionsSchedulerImplTest,
641 ReschedulesWhenOnNtpOpenedParamChanges) { 624 ReschedulesWhenOnNtpOpenedParamChanges) {
642 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); 625 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
643 ActivateUnderlyingProvider(); 626 ActivateProvider();
644 627
645 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 628 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
646 // null. Change the fallback interval for this class. 629 // null. Change the fallback interval for this class.
647 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", 630 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user",
648 "1.5"); 631 "1.5");
649 632
650 // Schedule() should get called for the second time after params have changed. 633 // Schedule() should get called for the second time after params have changed.
651 ActivateUnderlyingProvider(); 634 ActivateProvider();
652 } 635 }
653 636
654 TEST_F(SchedulingRemoteSuggestionsProviderTest, 637 TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForNtpOpenedTrigger) {
655 FetchIntervalForNtpOpenedTrigger) {
656 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 638 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
657 { 639 {
658 InSequence s; 640 InSequence s;
659 // Initial scheduling after being enabled. 641 // Initial scheduling after being enabled.
660 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 642 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
661 // The first call to NTPOpened results in a fetch. 643 // The first call to NTPOpened results in a fetch.
662 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 644 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
663 .WillOnce(SaveArg<0>(&signal_fetch_done)); 645 .WillOnce(SaveArg<0>(&signal_fetch_done));
664 // Rescheduling after a succesful fetch. 646 // Rescheduling after a succesful fetch.
665 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 647 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
666 // The third call to NTPOpened 35min later again results in a fetch. 648 // The third call to NTPOpened 35min later again results in a fetch.
667 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 649 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
668 } 650 }
669 651
670 ActivateUnderlyingProvider(); 652 ActivateProvider();
671 653
672 scheduling_provider()->OnNTPOpened(); 654 scheduler()->OnNTPOpened();
673 signal_fetch_done.Run(Status::Success()); 655 signal_fetch_done.Run(Status::Success());
674 656
675 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time 657 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time
676 // interval by default for soft backgroudn fetches on ntp open events. 658 // interval by default for soft backgroudn fetches on ntp open events.
677 659
678 // Open NTP again after 20min. This time no fetch is executed. 660 // Open NTP again after 20min. This time no fetch is executed.
679 test_clock()->Advance(base::TimeDelta::FromMinutes(20)); 661 test_clock()->Advance(base::TimeDelta::FromMinutes(20));
680 scheduling_provider()->OnNTPOpened(); 662 scheduler()->OnNTPOpened();
681 663
682 // Open NTP again after 101min (121min since first opened). Since the default 664 // Open NTP again after 101min (121min since first opened). Since the default
683 // time interval has passed refetch again. 665 // time interval has passed refetch again.
684 test_clock()->Advance(base::TimeDelta::FromMinutes(101)); 666 test_clock()->Advance(base::TimeDelta::FromMinutes(101));
685 scheduling_provider()->OnNTPOpened(); 667 scheduler()->OnNTPOpened();
686 } 668 }
687 669
688 TEST_F(SchedulingRemoteSuggestionsProviderTest, 670 TEST_F(RemoteSuggestionsSchedulerImplTest,
689 OverrideFetchIntervalForNtpOpenedTrigger) { 671 OverrideFetchIntervalForNtpOpenedTrigger) {
690 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 672 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
691 // null. Change the on usage interval for this class from 2h to 30min. 673 // null. Change the on usage interval for this class from 2h to 30min.
692 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", 674 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user",
693 "0.5"); 675 "0.5");
694 676
695 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 677 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
696 { 678 {
697 InSequence s; 679 InSequence s;
698 // Initial scheduling after being enabled. 680 // Initial scheduling after being enabled.
699 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 681 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
700 // The first call to NTPOpened results in a fetch. 682 // The first call to NTPOpened results in a fetch.
701 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 683 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
702 .WillOnce(SaveArg<0>(&signal_fetch_done)); 684 .WillOnce(SaveArg<0>(&signal_fetch_done));
703 // Rescheduling after a succesful fetch. 685 // Rescheduling after a succesful fetch.
704 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 686 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
705 // The third call to NTPOpened 35min later again results in a fetch. 687 // The third call to NTPOpened 35min later again results in a fetch.
706 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 688 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
707 } 689 }
708 690
709 ActivateUnderlyingProvider(); 691 ActivateProvider();
710 692
711 scheduling_provider()->OnNTPOpened(); 693 scheduler()->OnNTPOpened();
712 signal_fetch_done.Run(Status::Success()); 694 signal_fetch_done.Run(Status::Success());
713 695
714 // Open NTP again after 20min. No fetch request is issues since the 30 min 696 // Open NTP again after 20min. No fetch request is issues since the 30 min
715 // time interval has not passed yet. 697 // time interval has not passed yet.
716 test_clock()->Advance(base::TimeDelta::FromMinutes(20)); 698 test_clock()->Advance(base::TimeDelta::FromMinutes(20));
717 scheduling_provider()->OnNTPOpened(); 699 scheduler()->OnNTPOpened();
718 700
719 // Open NTP again after 15min (35min since first opened) 701 // Open NTP again after 15min (35min since first opened)
720 test_clock()->Advance(base::TimeDelta::FromMinutes(15)); 702 test_clock()->Advance(base::TimeDelta::FromMinutes(15));
721 scheduling_provider()->OnNTPOpened(); 703 scheduler()->OnNTPOpened();
722 } 704 }
723 705
724 TEST_F(SchedulingRemoteSuggestionsProviderTest, 706 TEST_F(RemoteSuggestionsSchedulerImplTest,
725 ShouldBlockFetchingForSomeTimeAfterHistoryCleared) { 707 ShouldBlockFetchingForSomeTimeAfterHistoryCleared) {
726 // First enable the scheduler -- this will trigger the persistent scheduling. 708 // First enable the scheduler -- this will trigger the persistent scheduling.
727 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 709 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
728 ActivateUnderlyingProvider(); 710 ActivateProvider();
729 // Clear the history. 711 // Clear the history.
730 scheduling_provider()->OnHistoryCleared(); 712 scheduler()->OnHistoryCleared();
731 713
732 // A trigger after 15 minutes is ignored. 714 // A trigger after 15 minutes is ignored.
733 test_clock()->Advance(base::TimeDelta::FromMinutes(15)); 715 test_clock()->Advance(base::TimeDelta::FromMinutes(15));
734 scheduling_provider()->OnBrowserForegrounded(); 716 scheduler()->OnBrowserForegrounded();
735 717
736 // A trigger after another 16 minutes is performed (more than 30m after 718 // A trigger after another 16 minutes is performed (more than 30m after
737 // clearing the history). 719 // clearing the history).
738 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)); 720 EXPECT_CALL(*provider(), RefetchInTheBackground(_));
739 test_clock()->Advance(base::TimeDelta::FromMinutes(16)); 721 test_clock()->Advance(base::TimeDelta::FromMinutes(16));
740 scheduling_provider()->OnBrowserForegrounded(); 722 scheduler()->OnBrowserForegrounded();
741 } 723 }
742 724
743 TEST_F(SchedulingRemoteSuggestionsProviderTest, 725 TEST_F(RemoteSuggestionsSchedulerImplTest,
744 ShouldImmediatelyFetchAfterSuggestionsCleared) { 726 ShouldImmediatelyFetchAfterSuggestionsCleared) {
745 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 727 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
746 728
747 // First enable the scheduler -- this will trigger the persistent scheduling. 729 // First enable the scheduler -- this will trigger the persistent scheduling.
748 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 730 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
749 ActivateUnderlyingProvider(); 731 ActivateProvider();
750 732
751 // The first trigger results in a fetch. 733 // The first trigger results in a fetch.
752 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 734 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
753 .WillOnce(SaveArg<0>(&signal_fetch_done)); 735 .WillOnce(SaveArg<0>(&signal_fetch_done));
754 scheduling_provider()->OnBrowserForegrounded(); 736 scheduler()->OnBrowserForegrounded();
755 // Make the fetch successful -- this results in rescheduling. 737 // Make the fetch successful -- this results in rescheduling.
756 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); 738 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
757 signal_fetch_done.Run(Status::Success()); 739 signal_fetch_done.Run(Status::Success());
758 740
759 // Clear the suggestions - results in an immediate fetch. 741 // Clear the suggestions - results in an immediate fetch.
760 EXPECT_CALL(*underlying_provider(), ReloadSuggestions()); 742 EXPECT_CALL(*provider(), ReloadSuggestions());
761 scheduling_provider()->OnSuggestionsCleared(); 743 scheduler()->OnSuggestionsCleared();
762 } 744 }
763 745
764 TEST_F(SchedulingRemoteSuggestionsProviderTest, 746 TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldThrottleInteractiveRequests) {
765 ShouldThrottleInteractiveRequests) {
766 // Change the quota for interactive requests ("active NTP user" is the default 747 // Change the quota for interactive requests ("active NTP user" is the default
767 // class in tests). 748 // class in tests).
768 SetVariationParameter("interactive_quota_SuggestionFetcherActiveNTPUser", 749 SetVariationParameter("interactive_quota_SuggestionFetcherActiveNTPUser",
769 "10"); 750 "10");
770 ResetProvider(); 751 ResetProvider();
771 752
772 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); 753 for (int x = 0; x < 10; ++x) {
773 std::set<std::string> known_suggestions; 754 EXPECT_THAT(scheduler()->AcquireQuotaForInteractiveFetch(), Eq(true));
774
775 // Both Fetch(..) and ReloadSuggestions() consume the same quota. As long as
776 // the quota suffices, the call gets through.
777 EXPECT_CALL(*underlying_provider(), ReloadSuggestions()).Times(5);
778 for (int x = 0; x < 5; ++x) {
779 scheduling_provider()->ReloadSuggestions();
780 } 755 }
781 756
782 // Expect underlying provider being called and store the callback to inform 757 // Now the quota is over.
783 // scheduling provider. 758 EXPECT_THAT(scheduler()->AcquireQuotaForInteractiveFetch(), Eq(false));
784 FetchDoneCallback signal_fetch_done_from_underlying_provider;
785 EXPECT_CALL(*underlying_provider(), Fetch(_, _, _))
786 .Times(5)
787 .WillRepeatedly(SaveArg<2>(&signal_fetch_done_from_underlying_provider));
788 // Expect scheduling provider to pass the information through.
789 MockFunction<void(Status status_code,
790 const std::vector<ContentSuggestion>& suggestions)>
791 fetch_done_from_scheduling_provider;
792 EXPECT_CALL(fetch_done_from_scheduling_provider,
793 Call(Field(&Status::code, StatusCode::SUCCESS), _))
794 .Times(5);
795 // Scheduling is not activated, each successful fetch results in Unschedule().
796 EXPECT_CALL(*persistent_scheduler(), Unschedule()).Times(5);
797 for (int x = 0; x < 5; ++x) {
798 scheduling_provider()->Fetch(
799 category, known_suggestions,
800 base::Bind(&SchedulingRemoteSuggestionsProviderTest::FetchDoneWrapper,
801 base::Unretained(this),
802 &fetch_done_from_scheduling_provider));
803 // Inform scheduling provider the fetc is successful (with no suggestions).
804 signal_fetch_done_from_underlying_provider.Run(
805 Status::Success(), std::vector<ContentSuggestion>{});
806 }
807
808 // When the quota expires, it is blocked by the scheduling provider, directly
809 // calling the callback.
810 EXPECT_CALL(fetch_done_from_scheduling_provider,
811 Call(Field(&Status::code, StatusCode::TEMPORARY_ERROR), _));
812 scheduling_provider()->ReloadSuggestions();
813 scheduling_provider()->Fetch(
814 category, known_suggestions,
815 base::Bind(&SchedulingRemoteSuggestionsProviderTest::FetchDoneWrapper,
816 base::Unretained(this), &fetch_done_from_scheduling_provider));
817 } 759 }
818 760
819 TEST_F(SchedulingRemoteSuggestionsProviderTest, 761 TEST_F(RemoteSuggestionsSchedulerImplTest,
820 ShouldThrottleNonInteractiveRequests) { 762 ShouldThrottleNonInteractiveRequests) {
821 // Change the quota for interactive requests ("active NTP user" is the default 763 // Change the quota for interactive requests ("active NTP user" is the default
822 // class in tests). 764 // class in tests).
823 SetVariationParameter("quota_SuggestionFetcherActiveNTPUser", "5"); 765 SetVariationParameter("quota_SuggestionFetcherActiveNTPUser", "5");
824 ResetProvider(); 766 ResetProvider();
825 767
826 // One scheduling on start, 5 times after successful fetches. 768 // One scheduling on start, 5 times after successful fetches.
827 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(6); 769 EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(6);
828 770
829 // First enable the scheduler -- this will trigger the persistent scheduling. 771 // First enable the scheduler -- this will trigger the persistent scheduling.
830 ActivateUnderlyingProvider(); 772 ActivateProvider();
831 773
832 // As long as the quota suffices, the call gets through. 774 // As long as the quota suffices, the call gets through.
833 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 775 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
834 EXPECT_CALL(*underlying_provider(), RefetchInTheBackground(_)) 776 EXPECT_CALL(*provider(), RefetchInTheBackground(_))
835 .Times(5) 777 .Times(5)
836 .WillRepeatedly(SaveArg<0>(&signal_fetch_done)); 778 .WillRepeatedly(SaveArg<0>(&signal_fetch_done));
837 for (int x = 0; x < 5; ++x) { 779 for (int x = 0; x < 5; ++x) {
838 scheduling_provider()->OnPersistentSchedulerWakeUp(); 780 scheduler()->OnPersistentSchedulerWakeUp();
839 signal_fetch_done.Run(Status::Success()); 781 signal_fetch_done.Run(Status::Success());
840 } 782 }
841 783
842 // For the 6th time, it is blocked by the scheduling provider. 784 // For the 6th time, it is blocked by the scheduling provider.
843 scheduling_provider()->OnPersistentSchedulerWakeUp(); 785 scheduler()->OnPersistentSchedulerWakeUp();
844 } 786 }
845 787
846 } // namespace ntp_snippets 788 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698