Chromium Code Reviews| Index: components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc |
| diff --git a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc |
| index 3ad44555729eee6d6dc9d63a0d5a28beaf16de76..f7bbf899c048f95f37748a7321d0418aff9665a2 100644 |
| --- a/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc |
| +++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc |
| @@ -32,6 +32,7 @@ |
| #include "components/prefs/testing_pref_service.h" |
| #include "components/variations/variations_params_manager.h" |
| #include "components/web_resource/web_resource_pref_names.h" |
| +#include "net/base/network_change_notifier.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| @@ -97,6 +98,20 @@ class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider { |
| MOCK_METHOD0(OnSignInStateChanged, void()); |
| }; |
| +class FakeNetworkChangeNotifierWIFI : public net::NetworkChangeNotifier { |
|
Marc Treib
2017/04/04 13:28:16
s/WIFI/Wifi/ ?
optional: Merge the two classes an
jkrcal
2017/04/05 17:32:56
Not relevant any more.
|
| + public: |
| + ConnectionType GetCurrentConnectionType() const override { |
| + return NetworkChangeNotifier::CONNECTION_WIFI; |
| + } |
| +}; |
| + |
| +class FakeNetworkChangeNotifier2G : public net::NetworkChangeNotifier { |
| + public: |
| + ConnectionType GetCurrentConnectionType() const override { |
| + return NetworkChangeNotifier::CONNECTION_2G; |
| + } |
| +}; |
| + |
| } // namespace |
| class RemoteSuggestionsSchedulerImplTest : public ::testing::Test { |
| @@ -473,7 +488,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, |
| .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| // Rescheduling after a succesful fetch. |
| EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| - // The second call to NTPOpened 2hrs later again results in a fetch. |
| + // The second call to NTPOpened 4hrs later again results in a fetch. |
| EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| } |
| @@ -482,8 +497,8 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, |
| // Make the first soft fetch successful. |
| scheduler()->OnBrowserForegrounded(); |
| signal_fetch_done.Run(Status::Success()); |
| - // Open NTP again after 2hrs. |
| - test_clock()->Advance(base::TimeDelta::FromHours(2)); |
| + // Open NTP again after 4hrs. |
| + test_clock()->Advance(base::TimeDelta::FromHours(4)); |
| scheduler()->OnBrowserForegrounded(); |
| } |
| @@ -568,7 +583,8 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) { |
| DeactivateProvider(); |
| } |
| -TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) { |
| +TEST_F(RemoteSuggestionsSchedulerImplTest, |
| + ReschedulesWhenPersistentWifiParamChanges) { |
| EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
| ActivateProvider(); |
| @@ -581,7 +597,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) { |
| } |
| TEST_F(RemoteSuggestionsSchedulerImplTest, |
| - ReschedulesWhenFallbackParamChanges) { |
| + ReschedulesWhenPersistentFallbackParamChanges) { |
| EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
| ActivateProvider(); |
| @@ -595,13 +611,13 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, |
| } |
| TEST_F(RemoteSuggestionsSchedulerImplTest, |
| - ReschedulesWhenOnUsageEventParamChanges) { |
| + ReschedulesWhenSoftWifiParamChanges) { |
| EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
| ActivateProvider(); |
| // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| // null. Change the on usage interval for this class. |
| - SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", |
| + SetVariationParameter("soft_fetching_interval_hours-wifi-active_ntp_user", |
| "1.5"); |
| // Schedule() should get called for the second time after params have changed. |
| @@ -609,85 +625,139 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, |
| } |
| TEST_F(RemoteSuggestionsSchedulerImplTest, |
| - ReschedulesWhenOnNtpOpenedParamChanges) { |
| + ReschedulesWhenSoftFallbackParamChanges) { |
| EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
| ActivateProvider(); |
| // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| // null. Change the fallback interval for this class. |
| - SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", |
| + SetVariationParameter("soft_fetching_interval_hours-fallback-active_ntp_user", |
| "1.5"); |
| // Schedule() should get called for the second time after params have changed. |
| ActivateProvider(); |
| } |
| -TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForNtpOpenedTrigger) { |
| - RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| - { |
| - InSequence s; |
| - // Initial scheduling after being enabled. |
| - EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| - // The first call to NTPOpened results in a fetch. |
| - EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| - .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| - // Rescheduling after a succesful fetch. |
| - EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| - // The third call to NTPOpened 35min later again results in a fetch. |
| - EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| - } |
| +TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForSoftTriggerOnWifi) { |
| + // Pretend we are on WiFi. |
| + FakeNetworkChangeNotifierWIFI fake_network_notifier; |
| + // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time |
| + // interval by default for soft background fetches on WiFi. |
| + // Initial scheduling after being enabled. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| ActivateProvider(); |
| + // The first call to NTPOpened results in a fetch. |
| + RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| + .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| scheduler()->OnNTPOpened(); |
| + // Rescheduling after a succesful fetch. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| signal_fetch_done.Run(Status::Success()); |
| - // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 2h time |
| - // interval by default for soft backgroudn fetches on ntp open events. |
| - |
| - // Open NTP again after 20min. This time no fetch is executed. |
| + // Open NTP again after too short delay. This time no fetch is executed. |
| test_clock()->Advance(base::TimeDelta::FromMinutes(20)); |
| scheduler()->OnNTPOpened(); |
| - // Open NTP again after 101min (121min since first opened). Since the default |
| - // time interval has passed refetch again. |
| - test_clock()->Advance(base::TimeDelta::FromMinutes(101)); |
| + // Open NTP after another delay, now together long enough to issue a fetch. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(100)); |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| scheduler()->OnNTPOpened(); |
| } |
| TEST_F(RemoteSuggestionsSchedulerImplTest, |
| - OverrideFetchIntervalForNtpOpenedTrigger) { |
| + OverrideFetchIntervalForSoftTriggerOnWifi) { |
| + // Pretend we are on WiFi. |
| + FakeNetworkChangeNotifierWIFI fake_network_notifier; |
| // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| // null. Change the on usage interval for this class from 2h to 30min. |
| - SetVariationParameter("soft_on_ntp_opened_interval_hours-active_ntp_user", |
| + SetVariationParameter("soft_fetching_interval_hours-wifi-active_ntp_user", |
| "0.5"); |
| + // Initial scheduling after being enabled. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| + ActivateProvider(); |
| + |
| + // The first call to NTPOpened results in a fetch. |
| RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| - { |
| - InSequence s; |
| - // Initial scheduling after being enabled. |
| - EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| - // The first call to NTPOpened results in a fetch. |
| - EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| - .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| - // Rescheduling after a succesful fetch. |
| - EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| - // The third call to NTPOpened 35min later again results in a fetch. |
| - EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| - } |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| + .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| + scheduler()->OnNTPOpened(); |
| + // Rescheduling after a succesful fetch. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| + signal_fetch_done.Run(Status::Success()); |
| + |
| + // Open NTP again after too short delay. This time no fetch is executed. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(20)); |
| + scheduler()->OnNTPOpened(); |
| + |
| + // Open NTP after another delay, now together long enough to issue a fetch. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(10)); |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| + scheduler()->OnNTPOpened(); |
| +} |
| + |
| +TEST_F(RemoteSuggestionsSchedulerImplTest, |
| + FetchIntervalForSoftTriggerOnFallback) { |
| + // Pretend we are on 2G -> fallback connection. |
| + FakeNetworkChangeNotifier2G fake_network_notifier; |
| + // UserClassifier defaults to UserClass::ACTIVE_NTP_USER which uses a 4h time |
| + // interval by default for soft background fetches not on WiFi. |
| + |
| + // Initial scheduling after being enabled. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| + ActivateProvider(); |
| + |
| + // The first call to NTPOpened results in a fetch. |
| + RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| + .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| + scheduler()->OnNTPOpened(); |
| + // Rescheduling after a succesful fetch. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| + signal_fetch_done.Run(Status::Success()); |
| + |
| + // Open NTP again after too short delay. This time no fetch is executed. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(60)); |
| + scheduler()->OnNTPOpened(); |
| + // Open NTP after another delay, now together long enough to issue a fetch. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(180)); |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| + scheduler()->OnNTPOpened(); |
| +} |
| + |
| +TEST_F(RemoteSuggestionsSchedulerImplTest, |
| + OverrideFetchIntervalForSoftTriggerOnFallback) { |
| + // Pretend we are on 2G -> fallback connection. |
| + FakeNetworkChangeNotifier2G fake_network_notifier; |
| + // UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
| + // null. Change the on usage interval for this class from 4h to 30min. |
| + SetVariationParameter("soft_fetching_interval_hours-fallback-active_ntp_user", |
| + "0.5"); |
| + |
| + // Initial scheduling after being enabled. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| ActivateProvider(); |
| + // The first call to NTPOpened results in a fetch. |
| + RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done; |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)) |
| + .WillOnce(SaveArg<0>(&signal_fetch_done)); |
| scheduler()->OnNTPOpened(); |
| + // Rescheduling after a succesful fetch. |
| + EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)); |
| signal_fetch_done.Run(Status::Success()); |
| - // Open NTP again after 20min. No fetch request is issues since the 30 min |
| - // time interval has not passed yet. |
| + // Open NTP again after too short delay. This time no fetch is executed. |
| test_clock()->Advance(base::TimeDelta::FromMinutes(20)); |
| scheduler()->OnNTPOpened(); |
| - // Open NTP again after 15min (35min since first opened) |
| - test_clock()->Advance(base::TimeDelta::FromMinutes(15)); |
| + // Open NTP after another delay, now together long enough to issue a fetch. |
| + test_clock()->Advance(base::TimeDelta::FromMinutes(10)); |
| + EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
| scheduler()->OnNTPOpened(); |
| } |