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

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

Issue 2702223004: [Remote suggestions] Move all decisions to fetch to the scheduler (Closed)
Patch Set: Fixing an embarassing bug :) Created 3 years, 9 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 base::TimeDelta period_fallback)); 62 base::TimeDelta period_fallback));
63 MOCK_METHOD0(Unschedule, bool()); 63 MOCK_METHOD0(Unschedule, bool());
64 }; 64 };
65 65
66 // TODO(jkrcal): Move into its own library to reuse in other unit-tests? 66 // TODO(jkrcal): Move into its own library to reuse in other unit-tests?
67 class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider { 67 class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider {
68 public: 68 public:
69 MockRemoteSuggestionsProvider(Observer* observer) 69 MockRemoteSuggestionsProvider(Observer* observer)
70 : RemoteSuggestionsProvider(observer) {} 70 : RemoteSuggestionsProvider(observer) {}
71 71
72 MOCK_METHOD1(SetRemoteSuggestionsScheduler,
73 void(RemoteSuggestionsScheduler*));
74
72 // 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
73 // RefetchInTheBackground() which takes a unique_ptr<>. Instead, we add a new 76 // RefetchInTheBackground() which takes a unique_ptr<>. Instead, we add a new
74 // 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
75 // RemoteSuggestionsProvider's method to forward the call into the new mock 78 // RemoteSuggestionsProvider's method to forward the call into the new mock
76 // function. 79 // function.
77 void SetProviderStatusCallback(
78 std::unique_ptr<RemoteSuggestionsProvider::ProviderStatusCallback>
79 callback) override {
80 SetProviderStatusCallback(*callback);
81 }
82 MOCK_METHOD1(SetProviderStatusCallback,
83 void(RemoteSuggestionsProvider::ProviderStatusCallback));
84
85 // Move-only params are not supported by GMock (same work-around as above).
86 void RefetchInTheBackground( 80 void RefetchInTheBackground(
87 std::unique_ptr<RemoteSuggestionsProvider::FetchStatusCallback> callback) 81 std::unique_ptr<RemoteSuggestionsProvider::FetchStatusCallback> callback)
88 override { 82 override {
89 RefetchInTheBackground(*callback); 83 RefetchInTheBackground(*callback);
90 } 84 }
91 MOCK_METHOD1(RefetchInTheBackground, 85 MOCK_METHOD1(RefetchInTheBackground,
92 void(RemoteSuggestionsProvider::FetchStatusCallback)); 86 void(RemoteSuggestionsProvider::FetchStatusCallback));
93 87
94 MOCK_CONST_METHOD0(suggestions_fetcher_for_debugging, 88 MOCK_CONST_METHOD0(suggestions_fetcher_for_debugging,
95 const RemoteSuggestionsFetcher*()); 89 const RemoteSuggestionsFetcher*());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 utils_.pref_service()->registry()); 128 utils_.pref_service()->registry());
135 ResetProvider(); 129 ResetProvider();
136 } 130 }
137 131
138 void ResetProvider() { 132 void ResetProvider() {
139 auto underlying_provider = 133 auto underlying_provider =
140 base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>( 134 base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>(
141 /*observer=*/nullptr); 135 /*observer=*/nullptr);
142 underlying_provider_ = underlying_provider.get(); 136 underlying_provider_ = underlying_provider.get();
143 137
144 // SchedulingRemoteSuggestionsProvider calls SetProviderStatusCallback(_) to
145 // stay in the loop of status changes.
146 EXPECT_CALL(*underlying_provider_, SetProviderStatusCallback(_))
147 .WillOnce(SaveArg<0>(&provider_status_callback_));
148
149 auto test_clock = base::MakeUnique<base::SimpleTestClock>(); 138 auto test_clock = base::MakeUnique<base::SimpleTestClock>();
150 test_clock_ = test_clock.get(); 139 test_clock_ = test_clock.get();
151 test_clock_->SetNow(base::Time::Now()); 140 test_clock_->SetNow(base::Time::Now());
152 141
153 scheduling_provider_ = 142 scheduling_provider_ =
154 base::MakeUnique<SchedulingRemoteSuggestionsProvider>( 143 base::MakeUnique<SchedulingRemoteSuggestionsProvider>(
155 /*observer=*/nullptr, std::move(underlying_provider), 144 /*observer=*/nullptr, std::move(underlying_provider),
156 &persistent_scheduler_, &user_classifier_, utils_.pref_service(), 145 &persistent_scheduler_, &user_classifier_, utils_.pref_service(),
157 std::move(test_clock)); 146 std::move(test_clock));
158 } 147 }
159 148
160 void SetVariationParameter(const std::string& param_name, 149 void SetVariationParameter(const std::string& param_name,
161 const std::string& param_value) { 150 const std::string& param_value) {
162 std::map<std::string, std::string> params = default_variation_params_; 151 std::map<std::string, std::string> params = default_variation_params_;
163 params[param_name] = param_value; 152 params[param_name] = param_value;
164 153
165 params_manager_.ClearAllVariationParams(); 154 params_manager_.ClearAllVariationParams();
166 params_manager_.SetVariationParamsWithFeatureAssociations( 155 params_manager_.SetVariationParamsWithFeatureAssociations(
167 ntp_snippets::kStudyName, params, 156 ntp_snippets::kStudyName, params,
168 {ntp_snippets::kArticleSuggestionsFeature.name}); 157 {ntp_snippets::kArticleSuggestionsFeature.name});
169 } 158 }
170 159
171 protected: 160 protected:
172 std::map<std::string, std::string> default_variation_params_; 161 std::map<std::string, std::string> default_variation_params_;
173 variations::testing::VariationParamsManager params_manager_; 162 variations::testing::VariationParamsManager params_manager_;
174 StrictMock<MockPersistentScheduler> persistent_scheduler_; 163 StrictMock<MockPersistentScheduler> persistent_scheduler_;
175 StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_; 164 StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_;
176 std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_; 165 std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_;
177 RemoteSuggestionsProvider::ProviderStatusCallback provider_status_callback_;
178 base::SimpleTestClock* test_clock_; 166 base::SimpleTestClock* test_clock_;
179 167
180 void ChangeStatusOfUnderlyingProvider( 168 void ActivateUnderlyingProvider() {
181 RemoteSuggestionsProvider::ProviderStatus new_status) { 169 scheduling_provider_->OnProviderActivated();
182 provider_status_callback_.Run(new_status); 170 }
171
172 void InactivateUnderlyingProvider() {
173 scheduling_provider_->OnProviderDeactivated();
183 } 174 }
184 175
185 private: 176 private:
186 test::RemoteSuggestionsTestUtils utils_; 177 test::RemoteSuggestionsTestUtils utils_;
187 UserClassifier user_classifier_; 178 UserClassifier user_classifier_;
188 179
189 DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProviderTest); 180 DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProviderTest);
190 }; 181 };
191 182
192 TEST_F(SchedulingRemoteSuggestionsProviderTest, 183 TEST_F(SchedulingRemoteSuggestionsProviderTest,
193 ShouldIgnoreSignalsWhenNotEnabled) { 184 ShouldIgnoreSignalsWhenNotEnabled) {
194 scheduling_provider_->OnPersistentSchedulerWakeUp(); 185 scheduling_provider_->OnPersistentSchedulerWakeUp();
195 scheduling_provider_->OnNTPOpened(); 186 scheduling_provider_->OnNTPOpened();
196 scheduling_provider_->OnBrowserForegrounded(); 187 scheduling_provider_->OnBrowserForegrounded();
197 scheduling_provider_->OnBrowserColdStart(); 188 scheduling_provider_->OnBrowserColdStart();
198 } 189 }
199 190
200 TEST_F(SchedulingRemoteSuggestionsProviderTest, 191 TEST_F(SchedulingRemoteSuggestionsProviderTest,
201 ShouldIgnoreSignalsWhenDisabledByParam) { 192 ShouldIgnoreSignalsWhenDisabledByParam) {
202 // First set an empty list of allowed trigger types. 193 // First set an empty list of allowed trigger types.
203 SetVariationParameter("scheduler_trigger_types", "-"); 194 SetVariationParameter("scheduler_trigger_types", "-");
204 ResetProvider(); 195 ResetProvider();
205 196
206 // Then enable the scheduler. 197 // Then enable the scheduler.
207 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 198 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
208 ChangeStatusOfUnderlyingProvider( 199 ActivateUnderlyingProvider();
209 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
210 200
211 scheduling_provider_->OnPersistentSchedulerWakeUp(); 201 scheduling_provider_->OnPersistentSchedulerWakeUp();
212 scheduling_provider_->OnNTPOpened(); 202 scheduling_provider_->OnNTPOpened();
213 scheduling_provider_->OnBrowserForegrounded(); 203 scheduling_provider_->OnBrowserForegrounded();
214 scheduling_provider_->OnBrowserColdStart(); 204 scheduling_provider_->OnBrowserColdStart();
215 } 205 }
216 206
217 TEST_F(SchedulingRemoteSuggestionsProviderTest, 207 TEST_F(SchedulingRemoteSuggestionsProviderTest,
218 ShouldHandleEmptyParamForTriggerTypes) { 208 ShouldHandleEmptyParamForTriggerTypes) {
219 // First set an empty param for allowed trigger types -> should result in the 209 // First set an empty param for allowed trigger types -> should result in the
220 // default list. 210 // default list.
221 SetVariationParameter("scheduler_trigger_types", ""); 211 SetVariationParameter("scheduler_trigger_types", "");
222 ResetProvider(); 212 ResetProvider();
223 213
224 // Then enable the scheduler. 214 // Then enable the scheduler.
225 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 215 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
226 ChangeStatusOfUnderlyingProvider( 216 ActivateUnderlyingProvider();
227 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
228 217
229 // For instance, persistent scheduler wake up should be enabled by default. 218 // For instance, persistent scheduler wake up should be enabled by default.
230 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 219 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
231 scheduling_provider_->OnPersistentSchedulerWakeUp(); 220 scheduling_provider_->OnPersistentSchedulerWakeUp();
232 } 221 }
233 222
234 TEST_F(SchedulingRemoteSuggestionsProviderTest, 223 TEST_F(SchedulingRemoteSuggestionsProviderTest,
235 ShouldHandleIncorrentParamForTriggerTypes) { 224 ShouldHandleIncorrentParamForTriggerTypes) {
236 // First set an invalid list of allowed trigger types. 225 // First set an invalid list of allowed trigger types.
237 SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;"); 226 SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;");
238 ResetProvider(); 227 ResetProvider();
239 228
240 // Then enable the scheduler. 229 // Then enable the scheduler.
241 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 230 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
242 ChangeStatusOfUnderlyingProvider( 231 ActivateUnderlyingProvider();
243 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
244 232
245 // For instance, persistent scheduler wake up should be enabled by default. 233 // For instance, persistent scheduler wake up should be enabled by default.
246 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 234 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
247 scheduling_provider_->OnPersistentSchedulerWakeUp(); 235 scheduling_provider_->OnPersistentSchedulerWakeUp();
248 } 236 }
249 237
250 TEST_F(SchedulingRemoteSuggestionsProviderTest, 238 TEST_F(SchedulingRemoteSuggestionsProviderTest,
251 ShouldFetchOnPersistentSchedulerWakeUp) { 239 ShouldFetchOnPersistentSchedulerWakeUp) {
252 // First set only this type to be allowed. 240 // First set only this type to be allowed.
253 SetVariationParameter("scheduler_trigger_types", 241 SetVariationParameter("scheduler_trigger_types",
254 "persistent_scheduler_wake_up"); 242 "persistent_scheduler_wake_up");
255 ResetProvider(); 243 ResetProvider();
256 244
257 // Then enable the scheduler. 245 // Then enable the scheduler.
258 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 246 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
259 ChangeStatusOfUnderlyingProvider( 247 ActivateUnderlyingProvider();
260 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
261 248
262 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 249 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
263 scheduling_provider_->OnPersistentSchedulerWakeUp(); 250 scheduling_provider_->OnPersistentSchedulerWakeUp();
264 } 251 }
265 252
266 TEST_F(SchedulingRemoteSuggestionsProviderTest, 253 TEST_F(SchedulingRemoteSuggestionsProviderTest,
267 ShouldFetchOnPersistentSchedulerWakeUpRepeated) { 254 ShouldFetchOnPersistentSchedulerWakeUpRepeated) {
268 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 255 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
269 { 256 {
270 InSequence s; 257 InSequence s;
271 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 258 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
272 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 259 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
273 .WillOnce(SaveArg<0>(&signal_fetch_done)); 260 .WillOnce(SaveArg<0>(&signal_fetch_done));
274 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 261 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
275 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 262 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
276 } 263 }
277 // First enable the scheduler -- calling Schedule() for the first time. 264 // First enable the scheduler -- calling Schedule() for the first time.
278 ChangeStatusOfUnderlyingProvider( 265 ActivateUnderlyingProvider();
279 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
280 // Make the first persistent fetch successful -- calling Schedule() again. 266 // Make the first persistent fetch successful -- calling Schedule() again.
281 scheduling_provider_->OnPersistentSchedulerWakeUp(); 267 scheduling_provider_->OnPersistentSchedulerWakeUp();
282 signal_fetch_done.Run(Status::Success()); 268 signal_fetch_done.Run(Status::Success());
283 // Make the second fetch. 269 // Make the second fetch.
284 scheduling_provider_->OnPersistentSchedulerWakeUp(); 270 scheduling_provider_->OnPersistentSchedulerWakeUp();
285 } 271 }
286 272
287 TEST_F(SchedulingRemoteSuggestionsProviderTest, 273 TEST_F(SchedulingRemoteSuggestionsProviderTest,
288 ShouldNotTriggerBackgroundFetchIfAlreadyInProgess) { 274 ShouldNotTriggerBackgroundFetchIfAlreadyInProgess) {
289 { 275 {
290 InSequence s; 276 InSequence s;
291 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 277 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
292 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 278 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
293 // RefetchInTheBackground is not called after the second trigger. 279 // RefetchInTheBackground is not called after the second trigger.
294 } 280 }
295 // First enable the scheduler -- calling Schedule() for the first time. 281 // First enable the scheduler -- calling Schedule() for the first time.
296 ChangeStatusOfUnderlyingProvider( 282 ActivateUnderlyingProvider();
297 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
298 // Make the first persistent fetch never finish. 283 // Make the first persistent fetch never finish.
299 scheduling_provider_->OnPersistentSchedulerWakeUp(); 284 scheduling_provider_->OnPersistentSchedulerWakeUp();
300 // Make the second fetch. 285 // Make the second fetch.
301 scheduling_provider_->OnPersistentSchedulerWakeUp(); 286 scheduling_provider_->OnPersistentSchedulerWakeUp();
302 } 287 }
303 288
304 TEST_F(SchedulingRemoteSuggestionsProviderTest, 289 TEST_F(SchedulingRemoteSuggestionsProviderTest,
305 ShouldFetchOnNTPOpenedForTheFirstTime) { 290 ShouldFetchOnNTPOpenedForTheFirstTime) {
306 // First set only this type to be allowed. 291 // First set only this type to be allowed.
307 SetVariationParameter("scheduler_trigger_types", "ntp_opened"); 292 SetVariationParameter("scheduler_trigger_types", "ntp_opened");
308 ResetProvider(); 293 ResetProvider();
309 294
310 // Then enable the scheduler. 295 // Then enable the scheduler.
311 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 296 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
312 ChangeStatusOfUnderlyingProvider( 297 ActivateUnderlyingProvider();
313 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
314 298
315 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 299 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
316 scheduling_provider_->OnNTPOpened(); 300 scheduling_provider_->OnNTPOpened();
317 } 301 }
318 302
319 TEST_F(SchedulingRemoteSuggestionsProviderTest, 303 TEST_F(SchedulingRemoteSuggestionsProviderTest,
320 ShouldFetchOnBrowserForegroundedForTheFirstTime) { 304 ShouldFetchOnBrowserForegroundedForTheFirstTime) {
321 // First set only this type to be allowed. 305 // First set only this type to be allowed.
322 SetVariationParameter("scheduler_trigger_types", "browser_foregrounded"); 306 SetVariationParameter("scheduler_trigger_types", "browser_foregrounded");
323 ResetProvider(); 307 ResetProvider();
324 308
325 // Then enable the scheduler. 309 // Then enable the scheduler.
326 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 310 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
327 ChangeStatusOfUnderlyingProvider( 311 ActivateUnderlyingProvider();
328 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
329 312
330 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 313 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
331 scheduling_provider_->OnBrowserForegrounded(); 314 scheduling_provider_->OnBrowserForegrounded();
332 } 315 }
333 316
334 TEST_F(SchedulingRemoteSuggestionsProviderTest, 317 TEST_F(SchedulingRemoteSuggestionsProviderTest,
335 ShouldFetchOnBrowserColdStartForTheFirstTime) { 318 ShouldFetchOnBrowserColdStartForTheFirstTime) {
336 // First set only this type to be allowed. 319 // First set only this type to be allowed.
337 SetVariationParameter("scheduler_trigger_types", "browser_cold_start"); 320 SetVariationParameter("scheduler_trigger_types", "browser_cold_start");
338 ResetProvider(); 321 ResetProvider();
339 322
340 // Then enable the scheduler. 323 // Then enable the scheduler.
341 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 324 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
342 ChangeStatusOfUnderlyingProvider( 325 ActivateUnderlyingProvider();
343 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
344 326
345 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 327 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
346 scheduling_provider_->OnBrowserColdStart(); 328 scheduling_provider_->OnBrowserColdStart();
347 } 329 }
348 330
349 TEST_F(SchedulingRemoteSuggestionsProviderTest, 331 TEST_F(SchedulingRemoteSuggestionsProviderTest,
350 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) { 332 ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) {
351 // First enable the scheduler; the second Schedule is called after the 333 // First enable the scheduler; the second Schedule is called after the
352 // successful fetch. 334 // successful fetch.
353 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 335 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
354 ChangeStatusOfUnderlyingProvider( 336 ActivateUnderlyingProvider();
355 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
356 337
357 // Make the first soft fetch successful. 338 // Make the first soft fetch successful.
358 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 339 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
359 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 340 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
360 .WillOnce(SaveArg<0>(&signal_fetch_done)); 341 .WillOnce(SaveArg<0>(&signal_fetch_done));
361 scheduling_provider_->OnNTPOpened(); 342 scheduling_provider_->OnNTPOpened();
362 signal_fetch_done.Run(Status::Success()); 343 signal_fetch_done.Run(Status::Success());
363 // The second call is ignored if it happens right after the first one. 344 // The second call is ignored if it happens right after the first one.
364 scheduling_provider_->OnNTPOpened(); 345 scheduling_provider_->OnNTPOpened();
365 } 346 }
366 347
367 TEST_F(SchedulingRemoteSuggestionsProviderTest, 348 TEST_F(SchedulingRemoteSuggestionsProviderTest,
368 ShouldNotFetchOnNTPOpenedAfterSuccessfulPersistentFetch) { 349 ShouldNotFetchOnNTPOpenedAfterSuccessfulPersistentFetch) {
369 // First enable the scheduler; the second Schedule is called after the 350 // First enable the scheduler; the second Schedule is called after the
370 // successful fetch. 351 // successful fetch.
371 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 352 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
372 ChangeStatusOfUnderlyingProvider( 353 ActivateUnderlyingProvider();
373 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
374 354
375 // Make the first persistent fetch successful. 355 // Make the first persistent fetch successful.
376 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 356 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
377 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 357 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
378 .WillOnce(SaveArg<0>(&signal_fetch_done)); 358 .WillOnce(SaveArg<0>(&signal_fetch_done));
379 scheduling_provider_->OnPersistentSchedulerWakeUp(); 359 scheduling_provider_->OnPersistentSchedulerWakeUp();
380 signal_fetch_done.Run(Status::Success()); 360 signal_fetch_done.Run(Status::Success());
381 // The second call is ignored if it happens right after the first one. 361 // The second call is ignored if it happens right after the first one.
382 scheduling_provider_->OnNTPOpened(); 362 scheduling_provider_->OnNTPOpened();
383 } 363 }
384 364
385 TEST_F(SchedulingRemoteSuggestionsProviderTest, 365 TEST_F(SchedulingRemoteSuggestionsProviderTest,
386 ShouldNotFetchOnNTPOpenedAfterFailedSoftFetch) { 366 ShouldNotFetchOnNTPOpenedAfterFailedSoftFetch) {
387 // First enable the scheduler. 367 // First enable the scheduler.
388 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 368 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
389 ChangeStatusOfUnderlyingProvider( 369 ActivateUnderlyingProvider();
390 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
391 370
392 // Make the first soft fetch failed. 371 // Make the first soft fetch failed.
393 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 372 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
394 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 373 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
395 .WillOnce(SaveArg<0>(&signal_fetch_done)); 374 .WillOnce(SaveArg<0>(&signal_fetch_done));
396 scheduling_provider_->OnNTPOpened(); 375 scheduling_provider_->OnNTPOpened();
397 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 376 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
398 377
399 // The second call is ignored if it happens right after the first one. 378 // The second call is ignored if it happens right after the first one.
400 scheduling_provider_->OnNTPOpened(); 379 scheduling_provider_->OnNTPOpened();
401 } 380 }
402 381
403 TEST_F(SchedulingRemoteSuggestionsProviderTest, 382 TEST_F(SchedulingRemoteSuggestionsProviderTest,
404 ShouldNotFetchOnNTPOpenedAfterFailedPersistentFetch) { 383 ShouldNotFetchOnNTPOpenedAfterFailedPersistentFetch) {
405 // First enable the scheduler. 384 // First enable the scheduler.
406 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 385 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
407 ChangeStatusOfUnderlyingProvider( 386 ActivateUnderlyingProvider();
408 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
409 387
410 // Make the first persistent fetch failed. 388 // Make the first persistent fetch failed.
411 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 389 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
412 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 390 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
413 .WillOnce(SaveArg<0>(&signal_fetch_done)); 391 .WillOnce(SaveArg<0>(&signal_fetch_done));
414 scheduling_provider_->OnPersistentSchedulerWakeUp(); 392 scheduling_provider_->OnPersistentSchedulerWakeUp();
415 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 393 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
416 394
417 // The second call is ignored if it happens right after the first one. 395 // The second call is ignored if it happens right after the first one.
418 scheduling_provider_->OnNTPOpened(); 396 scheduling_provider_->OnNTPOpened();
419 } 397 }
420 398
421 TEST_F(SchedulingRemoteSuggestionsProviderTest, 399 TEST_F(SchedulingRemoteSuggestionsProviderTest,
422 ShouldFetchAgainOnBrowserForgroundLaterAgain) { 400 ShouldFetchAgainOnBrowserForgroundLaterAgain) {
423 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 401 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
424 { 402 {
425 InSequence s; 403 InSequence s;
426 // Initial scheduling after being enabled. 404 // Initial scheduling after being enabled.
427 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 405 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
428 // The first call to NTPOpened results in a fetch. 406 // The first call to NTPOpened results in a fetch.
429 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 407 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
430 .WillOnce(SaveArg<0>(&signal_fetch_done)); 408 .WillOnce(SaveArg<0>(&signal_fetch_done));
431 // Rescheduling after a succesful fetch. 409 // Rescheduling after a succesful fetch.
432 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 410 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
433 // The second call to NTPOpened 2hrs later again results in a fetch. 411 // The second call to NTPOpened 2hrs later again results in a fetch.
434 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 412 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
435 } 413 }
436 414
437 // First enable the scheduler. 415 // First enable the scheduler.
438 ChangeStatusOfUnderlyingProvider( 416 ActivateUnderlyingProvider();
439 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
440 // Make the first soft fetch successful. 417 // Make the first soft fetch successful.
441 scheduling_provider_->OnBrowserForegrounded(); 418 scheduling_provider_->OnBrowserForegrounded();
442 signal_fetch_done.Run(Status::Success()); 419 signal_fetch_done.Run(Status::Success());
443 // Open NTP again after 2hrs. 420 // Open NTP again after 2hrs.
444 test_clock_->Advance(base::TimeDelta::FromHours(2)); 421 test_clock_->Advance(base::TimeDelta::FromHours(2));
445 scheduling_provider_->OnBrowserForegrounded(); 422 scheduling_provider_->OnBrowserForegrounded();
446 } 423 }
447 424
448 TEST_F(SchedulingRemoteSuggestionsProviderTest, 425 TEST_F(SchedulingRemoteSuggestionsProviderTest,
449 ShouldRescheduleOnRescheduleFetching) { 426 ShouldRescheduleOnRescheduleFetching) {
450 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 427 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
451 scheduling_provider_->RescheduleFetching(); 428 scheduling_provider_->RescheduleFetching();
452 } 429 }
453 430
454 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnActivation) { 431 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnActivation) {
455 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 432 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
456 ChangeStatusOfUnderlyingProvider( 433 ActivateUnderlyingProvider();
457 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
458 } 434 }
459 435
460 TEST_F(SchedulingRemoteSuggestionsProviderTest, 436 TEST_F(SchedulingRemoteSuggestionsProviderTest,
461 ShouldUnscheduleOnLaterInactivation) { 437 ShouldUnscheduleOnLaterInactivation) {
462 { 438 {
463 InSequence s; 439 InSequence s;
464 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 440 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
465 EXPECT_CALL(persistent_scheduler_, Unschedule()); 441 EXPECT_CALL(persistent_scheduler_, Unschedule());
466 } 442 }
467 ChangeStatusOfUnderlyingProvider( 443 ActivateUnderlyingProvider();
468 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 444 InactivateUnderlyingProvider();
469 ChangeStatusOfUnderlyingProvider(
470 RemoteSuggestionsProvider::ProviderStatus::INACTIVE);
471 } 445 }
472 446
473 TEST_F(SchedulingRemoteSuggestionsProviderTest, 447 TEST_F(SchedulingRemoteSuggestionsProviderTest,
474 ShouldScheduleOnLaterActivation) { 448 ShouldScheduleOnLaterActivation) {
475 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 449 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
476 // There is no schedule yet, so inactivation does not trigger unschedule. 450 // There is no schedule yet, so inactivation does not trigger unschedule.
477 ChangeStatusOfUnderlyingProvider( 451 InactivateUnderlyingProvider();
478 RemoteSuggestionsProvider::ProviderStatus::INACTIVE); 452 ActivateUnderlyingProvider();
479 ChangeStatusOfUnderlyingProvider(
480 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
481 } 453 }
482 454
483 TEST_F(SchedulingRemoteSuggestionsProviderTest, 455 TEST_F(SchedulingRemoteSuggestionsProviderTest,
484 ShouldRescheduleAfterSuccessfulFetch) { 456 ShouldRescheduleAfterSuccessfulFetch) {
485 // First reschedule on becoming active. 457 // First reschedule on becoming active.
486 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 458 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
487 ChangeStatusOfUnderlyingProvider( 459 ActivateUnderlyingProvider();
488 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
489 460
490 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 461 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
491 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 462 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
492 .WillOnce(SaveArg<0>(&signal_fetch_done)); 463 .WillOnce(SaveArg<0>(&signal_fetch_done));
493 464
494 // Trigger a fetch. 465 // Trigger a fetch.
495 scheduling_provider_->OnPersistentSchedulerWakeUp(); 466 scheduling_provider_->OnPersistentSchedulerWakeUp();
496 // Second reschedule after a successful fetch. 467 // Second reschedule after a successful fetch.
497 signal_fetch_done.Run(Status::Success()); 468 signal_fetch_done.Run(Status::Success());
498 } 469 }
499 470
500 TEST_F(SchedulingRemoteSuggestionsProviderTest, 471 TEST_F(SchedulingRemoteSuggestionsProviderTest,
501 ShouldNotRescheduleAfterFailedFetch) { 472 ShouldNotRescheduleAfterFailedFetch) {
502 // Only reschedule on becoming active. 473 // Only reschedule on becoming active.
503 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 474 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
504 ChangeStatusOfUnderlyingProvider( 475 ActivateUnderlyingProvider();
505 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
506 476
507 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 477 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
508 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 478 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
509 .WillOnce(SaveArg<0>(&signal_fetch_done)); 479 .WillOnce(SaveArg<0>(&signal_fetch_done));
510 480
511 // Trigger a fetch. 481 // Trigger a fetch.
512 scheduling_provider_->OnPersistentSchedulerWakeUp(); 482 scheduling_provider_->OnPersistentSchedulerWakeUp();
513 // No furter reschedule after a failure. 483 // No furter reschedule after a failure.
514 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); 484 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
515 } 485 }
516 486
517 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnlyOnce) { 487 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnlyOnce) {
518 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 488 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
519 ChangeStatusOfUnderlyingProvider( 489 ActivateUnderlyingProvider();
520 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
521 // No further call to Schedule on a second status callback. 490 // No further call to Schedule on a second status callback.
522 ChangeStatusOfUnderlyingProvider( 491 ActivateUnderlyingProvider();
523 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
524 } 492 }
525 493
526 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldUnscheduleOnlyOnce) { 494 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldUnscheduleOnlyOnce) {
527 { 495 {
528 InSequence s; 496 InSequence s;
529 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 497 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
530 EXPECT_CALL(persistent_scheduler_, Unschedule()); 498 EXPECT_CALL(persistent_scheduler_, Unschedule());
531 } 499 }
532 // First schedule so that later we really unschedule. 500 // First schedule so that later we really unschedule.
533 ChangeStatusOfUnderlyingProvider( 501 ActivateUnderlyingProvider();
534 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); 502 InactivateUnderlyingProvider();
535 ChangeStatusOfUnderlyingProvider(
536 RemoteSuggestionsProvider::ProviderStatus::INACTIVE);
537 // No further call to Unschedule on second status callback. 503 // No further call to Unschedule on second status callback.
538 ChangeStatusOfUnderlyingProvider( 504 InactivateUnderlyingProvider();
539 RemoteSuggestionsProvider::ProviderStatus::INACTIVE);
540 } 505 }
541 506
542 TEST_F(SchedulingRemoteSuggestionsProviderTest, 507 TEST_F(SchedulingRemoteSuggestionsProviderTest,
543 ReschedulesWhenWifiParamChanges) { 508 ReschedulesWhenWifiParamChanges) {
544 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 509 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
545 ChangeStatusOfUnderlyingProvider( 510 ActivateUnderlyingProvider();
546 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
547 511
548 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 512 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
549 // null. Change the wifi interval for this class. 513 // null. Change the wifi interval for this class.
550 SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5"); 514 SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5");
551 515
552 // Schedule() should get called for the second time after params have changed. 516 // Schedule() should get called for the second time after params have changed.
553 ChangeStatusOfUnderlyingProvider( 517 ActivateUnderlyingProvider();
554 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
555 } 518 }
556 519
557 TEST_F(SchedulingRemoteSuggestionsProviderTest, 520 TEST_F(SchedulingRemoteSuggestionsProviderTest,
558 ReschedulesWhenFallbackParamChanges) { 521 ReschedulesWhenFallbackParamChanges) {
559 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 522 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
560 ChangeStatusOfUnderlyingProvider( 523 ActivateUnderlyingProvider();
561 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
562 524
563 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 525 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
564 // null. Change the fallback interval for this class. 526 // null. Change the fallback interval for this class.
565 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user", 527 SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user",
566 "1.5"); 528 "1.5");
567 529
568 // Schedule() should get called for the second time after params have changed. 530 // Schedule() should get called for the second time after params have changed.
569 ChangeStatusOfUnderlyingProvider( 531 ActivateUnderlyingProvider();
570 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
571 } 532 }
572 533
573 TEST_F(SchedulingRemoteSuggestionsProviderTest, 534 TEST_F(SchedulingRemoteSuggestionsProviderTest,
574 ReschedulesWhenOnUsageEventParamChanges) { 535 ReschedulesWhenOnUsageEventParamChanges) {
575 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 536 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
576 ChangeStatusOfUnderlyingProvider( 537 ActivateUnderlyingProvider();
577 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
578 538
579 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 539 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
580 // null. Change the on usage interval for this class. 540 // null. Change the on usage interval for this class.
581 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", 541 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user",
582 "1.5"); 542 "1.5");
583 543
584 // Schedule() should get called for the second time after params have changed. 544 // Schedule() should get called for the second time after params have changed.
585 ChangeStatusOfUnderlyingProvider( 545 ActivateUnderlyingProvider();
586 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
587 } 546 }
588 547
589 TEST_F(SchedulingRemoteSuggestionsProviderTest, 548 TEST_F(SchedulingRemoteSuggestionsProviderTest,
590 ReschedulesWhenOnNtpOpenedParamChanges) { 549 ReschedulesWhenOnNtpOpenedParamChanges) {
591 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); 550 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2);
592 ChangeStatusOfUnderlyingProvider( 551 ActivateUnderlyingProvider();
593 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
594 552
595 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is 553 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
596 // null. Change the fallback interval for this class. 554 // null. Change the fallback interval for this class.
597 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", 555 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user",
598 "1.5"); 556 "1.5");
599 557
600 // Schedule() should get called for the second time after params have changed. 558 // Schedule() should get called for the second time after params have changed.
601 ChangeStatusOfUnderlyingProvider( 559 ActivateUnderlyingProvider();
602 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
603 } 560 }
604 561
605 TEST_F(SchedulingRemoteSuggestionsProviderTest, 562 TEST_F(SchedulingRemoteSuggestionsProviderTest,
606 FetchIntervalForNtpOpenedTrigger) { 563 FetchIntervalForNtpOpenedTrigger) {
607 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; 564 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
608 { 565 {
609 InSequence s; 566 InSequence s;
610 // Initial scheduling after being enabled. 567 // Initial scheduling after being enabled.
611 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 568 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
612 // The first call to NTPOpened results in a fetch. 569 // The first call to NTPOpened results in a fetch.
613 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 570 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
614 .WillOnce(SaveArg<0>(&signal_fetch_done)); 571 .WillOnce(SaveArg<0>(&signal_fetch_done));
615 // Rescheduling after a succesful fetch. 572 // Rescheduling after a succesful fetch.
616 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 573 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
617 // The third call to NTPOpened 35min later again results in a fetch. 574 // The third call to NTPOpened 35min later again results in a fetch.
618 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 575 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
619 } 576 }
620 577
621 ChangeStatusOfUnderlyingProvider( 578 ActivateUnderlyingProvider();
622 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
623 579
624 scheduling_provider_->OnNTPOpened(); 580 scheduling_provider_->OnNTPOpened();
625 signal_fetch_done.Run(Status::Success()); 581 signal_fetch_done.Run(Status::Success());
626 582
627 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time 583 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time
628 // interval by default for soft backgroudn fetches on ntp open events. 584 // interval by default for soft backgroudn fetches on ntp open events.
629 585
630 // Open NTP again after 20min. This time no fetch is executed. 586 // Open NTP again after 20min. This time no fetch is executed.
631 test_clock_->Advance(base::TimeDelta::FromMinutes(20)); 587 test_clock_->Advance(base::TimeDelta::FromMinutes(20));
632 scheduling_provider_->OnNTPOpened(); 588 scheduling_provider_->OnNTPOpened();
(...skipping 18 matching lines...) Expand all
651 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 607 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
652 // The first call to NTPOpened results in a fetch. 608 // The first call to NTPOpened results in a fetch.
653 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) 609 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
654 .WillOnce(SaveArg<0>(&signal_fetch_done)); 610 .WillOnce(SaveArg<0>(&signal_fetch_done));
655 // Rescheduling after a succesful fetch. 611 // Rescheduling after a succesful fetch.
656 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); 612 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
657 // The third call to NTPOpened 35min later again results in a fetch. 613 // The third call to NTPOpened 35min later again results in a fetch.
658 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); 614 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
659 } 615 }
660 616
661 ChangeStatusOfUnderlyingProvider( 617 ActivateUnderlyingProvider();
662 RemoteSuggestionsProvider::ProviderStatus::ACTIVE);
663 618
664 scheduling_provider_->OnNTPOpened(); 619 scheduling_provider_->OnNTPOpened();
665 signal_fetch_done.Run(Status::Success()); 620 signal_fetch_done.Run(Status::Success());
666 621
667 // Open NTP again after 20min. No fetch request is issues since the 30 min 622 // Open NTP again after 20min. No fetch request is issues since the 30 min
668 // time interval has not passed yet. 623 // time interval has not passed yet.
669 test_clock_->Advance(base::TimeDelta::FromMinutes(20)); 624 test_clock_->Advance(base::TimeDelta::FromMinutes(20));
670 scheduling_provider_->OnNTPOpened(); 625 scheduling_provider_->OnNTPOpened();
671 626
672 // Open NTP again after 15min (35min since first opened) 627 // Open NTP again after 15min (35min since first opened)
673 test_clock_->Advance(base::TimeDelta::FromMinutes(15)); 628 test_clock_->Advance(base::TimeDelta::FromMinutes(15));
674 scheduling_provider_->OnNTPOpened(); 629 scheduling_provider_->OnNTPOpened();
675 } 630 }
676 631
632 TEST_F(SchedulingRemoteSuggestionsProviderTest,
633 ShouldBlockFetchingForSomeTimeAfterHistoryCleared) {
634 // First enable the scheduler -- this will trigger the persistent scheduling.
635 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
636 ActivateUnderlyingProvider();
637 // Clear the history.
638 scheduling_provider_->OnHistoryCleared();
639
640 // A trigger after 15 minutes is ignored.
641 test_clock_->Advance(base::TimeDelta::FromMinutes(15));
642 scheduling_provider_->OnBrowserForegrounded();
643
644 // A trigger after another 16 minutes is performed (more than 30m after
645 // clearing the history).
646 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
647 test_clock_->Advance(base::TimeDelta::FromMinutes(16));
648 scheduling_provider_->OnBrowserForegrounded();
649 }
650
651 TEST_F(SchedulingRemoteSuggestionsProviderTest,
652 ShouldAllowImmediateFetchingAfterSuggestionsCleared) {
653 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
654
655 // First enable the scheduler -- this will trigger the persistent scheduling.
656 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
657 ActivateUnderlyingProvider();
658
659 // The first trigger results in a fetch.
660 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_))
661 .WillOnce(SaveArg<0>(&signal_fetch_done));
662 scheduling_provider_->OnBrowserForegrounded();
663 // Make the fetch successful -- this results in rescheduling.
664 EXPECT_CALL(persistent_scheduler_, Schedule(_, _));
665 signal_fetch_done.Run(Status::Success());
666
667 // Clear the suggestions.
668 scheduling_provider_->OnSuggestionsCleared();
669 // Another trigger right after results in a fetch again.
670 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_));
671 scheduling_provider_->OnBrowserForegrounded();
672 }
673
677 } // namespace ntp_snippets 674 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698