OLD | NEW |
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 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
412 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) | 412 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) |
413 .WillOnce(SaveArg<0>(&signal_fetch_done)); | 413 .WillOnce(SaveArg<0>(&signal_fetch_done)); |
414 scheduling_provider_->OnPersistentSchedulerWakeUp(); | 414 scheduling_provider_->OnPersistentSchedulerWakeUp(); |
415 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); | 415 signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, "")); |
416 | 416 |
417 // The second call is ignored if it happens right after the first one. | 417 // The second call is ignored if it happens right after the first one. |
418 scheduling_provider_->OnNTPOpened(); | 418 scheduling_provider_->OnNTPOpened(); |
419 } | 419 } |
420 | 420 |
421 TEST_F(SchedulingRemoteSuggestionsProviderTest, | 421 TEST_F(SchedulingRemoteSuggestionsProviderTest, |
422 ShouldFetchAgainOnNTPOpenedLaterAgain) { | 422 ShouldFetchAgainOnBrowserForgroundLaterAgain) { |
423 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; | 423 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
424 { | 424 { |
425 InSequence s; | 425 InSequence s; |
426 // Initial scheduling after being enabled. | 426 // Initial scheduling after being enabled. |
427 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); | 427 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
428 // The first call to NTPOpened results in a fetch. | 428 // The first call to NTPOpened results in a fetch. |
429 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) | 429 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) |
430 .WillOnce(SaveArg<0>(&signal_fetch_done)); | 430 .WillOnce(SaveArg<0>(&signal_fetch_done)); |
431 // Rescheduling after a succesful fetch. | 431 // Rescheduling after a succesful fetch. |
432 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); | 432 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
433 // The second call to NTPOpened 2hrs later again results in a fetch. | 433 // The second call to NTPOpened 2hrs later again results in a fetch. |
434 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); | 434 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
435 } | 435 } |
436 | 436 |
437 // First enable the scheduler. | 437 // First enable the scheduler. |
438 ChangeStatusOfUnderlyingProvider( | 438 ChangeStatusOfUnderlyingProvider( |
439 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); | 439 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
440 // Make the first soft fetch successful. | 440 // Make the first soft fetch successful. |
441 scheduling_provider_->OnNTPOpened(); | 441 scheduling_provider_->OnBrowserForegrounded(); |
442 signal_fetch_done.Run(Status::Success()); | 442 signal_fetch_done.Run(Status::Success()); |
443 // Open NTP again after 2hrs. | 443 // Open NTP again after 2hrs. |
444 test_clock_->Advance(base::TimeDelta::FromHours(2)); | 444 test_clock_->Advance(base::TimeDelta::FromHours(2)); |
445 scheduling_provider_->OnNTPOpened(); | 445 scheduling_provider_->OnBrowserForegrounded(); |
446 } | 446 } |
447 | 447 |
448 TEST_F(SchedulingRemoteSuggestionsProviderTest, | 448 TEST_F(SchedulingRemoteSuggestionsProviderTest, |
449 ShouldRescheduleOnRescheduleFetching) { | 449 ShouldRescheduleOnRescheduleFetching) { |
450 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); | 450 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
451 scheduling_provider_->RescheduleFetching(); | 451 scheduling_provider_->RescheduleFetching(); |
452 } | 452 } |
453 | 453 |
454 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnActivation) { | 454 TEST_F(SchedulingRemoteSuggestionsProviderTest, ShouldScheduleOnActivation) { |
455 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); | 455 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
579 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is | 579 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
580 // null. Change the on usage interval for this class. | 580 // null. Change the on usage interval for this class. |
581 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", | 581 SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", |
582 "1.5"); | 582 "1.5"); |
583 | 583 |
584 // Schedule() should get called for the second time after params have changed. | 584 // Schedule() should get called for the second time after params have changed. |
585 ChangeStatusOfUnderlyingProvider( | 585 ChangeStatusOfUnderlyingProvider( |
586 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); | 586 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
587 } | 587 } |
588 | 588 |
| 589 TEST_F(SchedulingRemoteSuggestionsProviderTest, |
| 590 ReschedulesWhenOnNtpOpenedParamChanges) { |
| 591 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)).Times(2); |
| 592 ChangeStatusOfUnderlyingProvider( |
| 593 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
| 594 |
| 595 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| 596 // null. Change the fallback interval for this class. |
| 597 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", |
| 598 "1.5"); |
| 599 |
| 600 // Schedule() should get called for the second time after params have changed. |
| 601 ChangeStatusOfUnderlyingProvider( |
| 602 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
| 603 } |
| 604 |
| 605 TEST_F(SchedulingRemoteSuggestionsProviderTest, |
| 606 FetchIntervalForNtpOpenedTrigger) { |
| 607 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| 608 { |
| 609 InSequence s; |
| 610 // Initial scheduling after being enabled. |
| 611 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
| 612 // The first call to NTPOpened results in a fetch. |
| 613 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) |
| 614 .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| 615 // Rescheduling after a succesful fetch. |
| 616 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
| 617 // The third call to NTPOpened 35min later again results in a fetch. |
| 618 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
| 619 } |
| 620 |
| 621 ChangeStatusOfUnderlyingProvider( |
| 622 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
| 623 |
| 624 scheduling_provider_->OnNTPOpened(); |
| 625 signal_fetch_done.Run(Status::Success()); |
| 626 |
| 627 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time |
| 628 // interval by default for soft backgroudn fetches on ntp open events. |
| 629 |
| 630 // Open NTP again after 20min. This time no fetch is executed. |
| 631 test_clock_->Advance(base::TimeDelta::FromMinutes(20)); |
| 632 scheduling_provider_->OnNTPOpened(); |
| 633 |
| 634 // Open NTP again after 101min (121min since first opened). Since the default |
| 635 // time interval has passed refetch again. |
| 636 test_clock_->Advance(base::TimeDelta::FromMinutes(101)); |
| 637 scheduling_provider_->OnNTPOpened(); |
| 638 } |
| 639 |
| 640 TEST_F(SchedulingRemoteSuggestionsProviderTest, |
| 641 OverrideFetchIntervalForNtpOpenedTrigger) { |
| 642 // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| 643 // null. Change the on usage interval for this class from 2h to 30min. |
| 644 SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", |
| 645 "0.5"); |
| 646 |
| 647 RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| 648 { |
| 649 InSequence s; |
| 650 // Initial scheduling after being enabled. |
| 651 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
| 652 // The first call to NTPOpened results in a fetch. |
| 653 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)) |
| 654 .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| 655 // Rescheduling after a succesful fetch. |
| 656 EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
| 657 // The third call to NTPOpened 35min later again results in a fetch. |
| 658 EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
| 659 } |
| 660 |
| 661 ChangeStatusOfUnderlyingProvider( |
| 662 RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
| 663 |
| 664 scheduling_provider_->OnNTPOpened(); |
| 665 signal_fetch_done.Run(Status::Success()); |
| 666 |
| 667 // Open NTP again after 20min. No fetch request is issues since the 30 min |
| 668 // time interval has not passed yet. |
| 669 test_clock_->Advance(base::TimeDelta::FromMinutes(20)); |
| 670 scheduling_provider_->OnNTPOpened(); |
| 671 |
| 672 // Open NTP again after 15min (35min since first opened) |
| 673 test_clock_->Advance(base::TimeDelta::FromMinutes(15)); |
| 674 scheduling_provider_->OnNTPOpened(); |
| 675 } |
| 676 |
589 } // namespace ntp_snippets | 677 } // namespace ntp_snippets |
OLD | NEW |