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..220863e12e5bb748b54aeff9084f8fc4eda8bd54 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" |
@@ -65,6 +66,7 @@ class MockPersistentScheduler : public PersistentScheduler { |
bool(base::TimeDelta period_wifi, |
base::TimeDelta period_fallback)); |
MOCK_METHOD0(Unschedule, bool()); |
+ MOCK_METHOD0(IsOnUnmeteredConnection, bool()); |
}; |
// TODO(jkrcal): Move into its own library to reuse in other unit-tests? |
@@ -118,6 +120,9 @@ class RemoteSuggestionsSchedulerImplTest : public ::testing::Test { |
// registers this pref and replace the call in browser_process_impl.cc & in |
// eula_accepted_notifier_unittest.cc with the new static function. |
local_state_.registry()->RegisterBooleanPref(::prefs::kEulaAccepted, false); |
+ // By default pretend we are on WiFi. |
+ EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) |
+ .WillRepeatedly(Return(true)); |
ResetProvider(); |
} |
@@ -473,7 +478,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 +487,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 +573,8 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) { |
DeactivateProvider(); |
} |
-TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) { |
+TEST_F(RemoteSuggestionsSchedulerImplTest, |
+ ReschedulesWhenPersistentWifiParamChanges) { |
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
ActivateProvider(); |
@@ -581,7 +587,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ReschedulesWhenWifiParamChanges) { |
} |
TEST_F(RemoteSuggestionsSchedulerImplTest, |
- ReschedulesWhenFallbackParamChanges) { |
+ ReschedulesWhenPersistentFallbackParamChanges) { |
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2); |
ActivateProvider(); |
@@ -595,13 +601,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 +615,143 @@ 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 (already done in ctor, we make it explicit here). |
+ EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) |
+ .WillRepeatedly(Return(true)); |
+ // 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 (already done in ctor, we make it explicit here). |
+ EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) |
+ .WillRepeatedly(Return(true)); |
// 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 not on wifi -> fallback connection. |
+ EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) |
+ .WillRepeatedly(Return(false)); |
+ // 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(180)); |
+ scheduler()->OnNTPOpened(); |
+ |
+ // Open NTP after another delay, now together long enough to issue a fetch. |
+ test_clock()->Advance(base::TimeDelta::FromMinutes(60)); |
+ EXPECT_CALL(*provider(), RefetchInTheBackground(_)); |
+ scheduler()->OnNTPOpened(); |
+} |
+TEST_F(RemoteSuggestionsSchedulerImplTest, |
+ OverrideFetchIntervalForSoftTriggerOnFallback) { |
+ // Pretend we are not on wifi -> fallback connection. |
+ EXPECT_CALL(*persistent_scheduler(), IsOnUnmeteredConnection()) |
+ .WillRepeatedly(Return(false)); |
+ // 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(); |
} |