summaryrefslogtreecommitdiff
path: root/chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc')
-rw-r--r--chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc385
1 files changed, 272 insertions, 113 deletions
diff --git a/chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc b/chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
index 8567849469f..07a9c3cbbce 100644
--- a/chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
+++ b/chromium/components/ntp_snippets/remote/remote_suggestions_scheduler_impl_unittest.cc
@@ -37,11 +37,13 @@
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+using testing::AnyNumber;
using testing::ElementsAre;
using testing::Eq;
using testing::Field;
using testing::InSequence;
using testing::Invoke;
+using testing::InvokeArgument;
using testing::IsEmpty;
using testing::Mock;
using testing::MockFunction;
@@ -61,6 +63,12 @@ class RemoteSuggestionsFetcher;
namespace {
+ACTION_TEMPLATE(SaveArgByMove,
+ HAS_1_TEMPLATE_PARAMS(int, k),
+ AND_1_VALUE_PARAMS(pointer)) {
+ *pointer = std::move(*::testing::get<k>(args));
+}
+
class MockPersistentScheduler : public PersistentScheduler {
public:
MOCK_METHOD2(Schedule,
@@ -75,8 +83,17 @@ class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider {
public:
MockRemoteSuggestionsProvider(Observer* observer)
: RemoteSuggestionsProvider(observer) {}
- MOCK_METHOD1(RefetchInTheBackground,
- void(const RemoteSuggestionsProvider::FetchStatusCallback&));
+ // Gmock cannot mock methods that have movable-only type callbacks as
+ // parameters such as FetchDoneCallback, DismissedSuggestionsCallback,
+ // ImageFetchedCallback, FetchStatusCallback. As a work-around,
+ // RefetchInTheBackground calls the mock method RefetchInTheBackgroundMock,
+ // which may then be checked with EXPECT_CALL.
+ void RefetchInTheBackground(
+ RemoteSuggestionsProvider::FetchStatusCallback callback) override {
+ RefetchInTheBackgroundMock(&callback);
+ }
+ MOCK_METHOD1(RefetchInTheBackgroundMock,
+ void(RemoteSuggestionsProvider::FetchStatusCallback*));
MOCK_CONST_METHOD0(suggestions_fetcher_for_debugging,
const RemoteSuggestionsFetcher*());
MOCK_CONST_METHOD1(GetUrlWithFavicon,
@@ -88,7 +105,12 @@ class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider {
void(base::Time begin,
base::Time end,
const base::Callback<bool(const GURL& url)>& filter));
- MOCK_METHOD3(Fetch,
+ void Fetch(const Category& category,
+ const std::set<std::string>& set,
+ FetchDoneCallback callback) override {
+ FetchMock(category, set, callback);
+ }
+ MOCK_METHOD3(FetchMock,
void(const Category&,
const std::set<std::string>&,
const FetchDoneCallback&));
@@ -96,10 +118,20 @@ class MockRemoteSuggestionsProvider : public RemoteSuggestionsProvider {
MOCK_METHOD1(ClearCachedSuggestions, void(Category));
MOCK_METHOD1(ClearDismissedSuggestionsForDebugging, void(Category));
MOCK_METHOD1(DismissSuggestion, void(const ContentSuggestion::ID&));
- MOCK_METHOD2(FetchSuggestionImage,
+ void FetchSuggestionImage(const ContentSuggestion::ID& id,
+ ImageFetchedCallback callback) override {
+ FetchSuggestionImageMock(id, callback);
+ }
+ MOCK_METHOD2(FetchSuggestionImageMock,
void(const ContentSuggestion::ID&, const ImageFetchedCallback&));
- MOCK_METHOD2(GetDismissedSuggestionsForDebugging,
- void(Category, const DismissedSuggestionsCallback&));
+ void GetDismissedSuggestionsForDebugging(
+ Category category,
+ DismissedSuggestionsCallback callback) override {
+ GetDismissedSuggestionsForDebuggingMock(category, callback);
+ }
+ MOCK_METHOD2(GetDismissedSuggestionsForDebuggingMock,
+ void(Category category,
+ const DismissedSuggestionsCallback& callback));
MOCK_METHOD0(OnSignInStateChanged, void());
};
@@ -186,16 +218,29 @@ class RemoteSuggestionsSchedulerImplTest : public ::testing::Test {
std::map<std::string, std::string> default_variation_params_;
variations::testing::VariationParamsManager params_manager_;
- void ActivateProvider() {
+ void ActivateProviderAndEula() {
SetEulaAcceptedPref();
scheduler_->OnProviderActivated();
}
void DeactivateProvider() { scheduler_->OnProviderDeactivated(); }
+ void ExpectOneRetiringRefetchInTheBackground() {
+ // After a successful fetch, the client updates it's schedule, so we expect
+ // another call here.
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).RetiresOnSaturation();
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(Invoke(
+ [](RemoteSuggestionsProvider::FetchStatusCallback* callback) {
+ std::move(*callback).Run(Status::Success());
+ }))
+ .RetiresOnSaturation();
+ }
+
MockPersistentScheduler* persistent_scheduler() {
return &persistent_scheduler_;
}
+
base::SimpleTestClock* test_clock() { return test_clock_; }
MockRemoteSuggestionsProvider* provider() { return provider_.get(); }
RemoteSuggestionsSchedulerImpl* scheduler() { return scheduler_.get(); }
@@ -231,7 +276,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
scheduler()->OnProviderActivated();
// Verify fetches get triggered.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnPersistentSchedulerWakeUp();
}
@@ -265,7 +310,25 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldFetchWhenEulaGetsAccepted) {
scheduler()->OnPersistentSchedulerWakeUp();
// Accepting Eula afterwards results in a background fetch.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
+ SetEulaAcceptedPref();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueBackgroundRequestIfEulaIsMissing) {
+ // Only run this tests on platforms supporting Eula.
+ if (!IsEulaNotifierAvailable()) {
+ return;
+ }
+ // Eula is not ready -- no fetch. But request should get queued.
+ scheduler()->OnPersistentSchedulerWakeUp();
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+ // Activate provider -- this should set up the schedule but cannot trigger a
+ // fetch due to Eula missing.
+ scheduler()->OnProviderActivated();
+
+ // Accepting Eula picks up the queued fetch.
+ ExpectOneRetiringRefetchInTheBackground();
SetEulaAcceptedPref();
}
@@ -277,7 +340,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
scheduler()->OnPersistentSchedulerWakeUp();
scheduler()->OnSuggestionsSurfaceOpened();
@@ -294,10 +357,10 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// For instance, persistent scheduler wake up should be enabled by default.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnPersistentSchedulerWakeUp();
}
@@ -309,10 +372,10 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// For instance, persistent scheduler wake up should be enabled by default.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnPersistentSchedulerWakeUp();
}
@@ -325,9 +388,9 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnPersistentSchedulerWakeUp();
}
@@ -337,16 +400,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
{
InSequence s;
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
}
// First enable the scheduler -- calling Schedule() for the first time.
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first persistent fetch successful -- calling Schedule() again.
scheduler()->OnPersistentSchedulerWakeUp();
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// Make the second fetch.
scheduler()->OnPersistentSchedulerWakeUp();
}
@@ -356,11 +419,12 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
{
InSequence s;
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ // We do not capture and execute the callback to keep the fetch in-flight.
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
// RefetchInTheBackground is not called after the second trigger.
}
// First enable the scheduler -- calling Schedule() for the first time.
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first persistent fetch never finish.
scheduler()->OnPersistentSchedulerWakeUp();
// Make the second fetch.
@@ -375,9 +439,9 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -389,24 +453,119 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ ExpectOneRetiringRefetchInTheBackground();
scheduler()->OnBrowserForegrounded();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldFetchOnBrowserColdStartForTheFirstTime) {
- // First set only this type to be allowed.
- SetVariationParameter("scheduler_trigger_types", "browser_cold_start");
- ResetProvider();
-
// Then enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
+
+ ExpectOneRetiringRefetchInTheBackground();
+ scheduler()->OnBrowserColdStart();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueBackgroundFetchSignalsOnPersistentSchedulerWakeUp) {
+ // Enable EULA to make this test not depend on that setting (or it being
+ // flipped)
+ SetEulaAcceptedPref();
+
+ // On activation, the Schedule should get updated and the queued background
+ // fetch should get propagated.
+ scheduler()->OnPersistentSchedulerWakeUp();
+
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+ ExpectOneRetiringRefetchInTheBackground();
+ ActivateProviderAndEula();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueBackgroundFetchSignalsOnSurfaceOpened) {
+ // Enable EULA to make this test not depend on that setting (or it being
+ // flipped)
+ SetEulaAcceptedPref();
+
+ // On activation, the Schedule should get updated and the queued background
+ // fetch should get propagated.
+ scheduler()->OnSuggestionsSurfaceOpened();
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+ ExpectOneRetiringRefetchInTheBackground();
+ ActivateProviderAndEula();
+}
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueBackgroundFetchSignalsOnBrowserForegrounded) {
+ // Enable EULA to make this test not depend on that setting (or it being
+ // flipped)
+ SetEulaAcceptedPref();
+
+ // On activation, the Schedule should get updated and the queued background
+ // fetch should get propagated.
+ scheduler()->OnBrowserForegrounded();
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+ ExpectOneRetiringRefetchInTheBackground();
+ ActivateProviderAndEula();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueBackgroundFetchSignalsOnBrowserColdStart) {
+ // Enable EULA to make this test not depend on that setting (or it being
+ // flipped)
+ SetEulaAcceptedPref();
+
+ // On activation, the Schedule should get updated and the queued background
+ // fetch should get propagated.
+ scheduler()->OnBrowserColdStart();
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
+ ExpectOneRetiringRefetchInTheBackground();
+ ActivateProviderAndEula();
+}
+
+TEST_F(RemoteSuggestionsSchedulerImplTest,
+ ShouldQueueMultipleBackgroundFetchSignals) {
+ // Enable EULA to make this test not depend on that setting (or it being
+ // flipped)
+ SetEulaAcceptedPref();
+
+ // We want to store multiple events to respect lower thresholds for specific
+ // events properly. To test this, we do the following setup:
+ // (1) Force a fetch.
+ // (2) Simulate a stop of the browser, wait until surface-opened would trigger
+ // a fetch but start-up would not trigger a fetch yet.
+ // (3) simulate a very slow initialization, where the scheduler sees both
+ // events (cold start and surface opened) before being activated.
+ // (4) make sure that activation triggers a background fetch.
+ EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(AnyNumber());
+ ActivateProviderAndEula();
+ ExpectOneRetiringRefetchInTheBackground();
+ scheduler()->OnBrowserColdStart();
+
+ // UserClassifier defaults to UserClass::ACTIVE_NTP_USER - we work with the
+ // default interval for this class here. This time would allow for a fetch on
+ // NTP open but not on cold start.
+ test_clock()->Advance(base::TimeDelta::FromHours(13));
+ // This should *not* trigger a fetch.
+ scheduler()->OnBrowserColdStart();
+
+ // Simulate a restart.
+ EXPECT_CALL(*persistent_scheduler(), Unschedule());
+ scheduler()->OnProviderDeactivated();
+ ResetProvider(); // Also resets the scheduler and test clock.
+
+ test_clock()->Advance(base::TimeDelta::FromHours(13));
+ scheduler()->OnSuggestionsSurfaceOpened();
scheduler()->OnBrowserColdStart();
+ ExpectOneRetiringRefetchInTheBackground();
+
+ // Signal the provider is ready (EULA check should still pass from the first
+ // start). We don't want to trigger EULA again as it will simulate a
+ // persistent fetch.
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
@@ -414,14 +573,14 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// First enable the scheduler; the second Schedule is called after the
// successful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first soft fetch successful.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// The second call is ignored if it happens right after the first one.
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -431,14 +590,14 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// First enable the scheduler; the second Schedule is called after the
// successful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first persistent fetch successful.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnPersistentSchedulerWakeUp();
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// The second call is ignored if it happens right after the first one.
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -447,14 +606,14 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldNotFetchOnSuggestionsSurfaceOpenedAfterFailedSoftFetch) {
// First enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first soft fetch failed.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
- signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
+ std::move(signal_fetch_done).Run(Status(StatusCode::PERMANENT_ERROR, ""));
// The second call is ignored if it happens right after the first one.
scheduler()->OnSuggestionsSurfaceOpened();
@@ -464,14 +623,14 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldNotFetchOnSuggestionsSurfaceOpenedAfterFailedPersistentFetch) {
// First enable the scheduler.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first persistent fetch failed.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnPersistentSchedulerWakeUp();
- signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
+ std::move(signal_fetch_done).Run(Status(StatusCode::PERMANENT_ERROR, ""));
// The second call is ignored if it happens right after the first one.
scheduler()->OnSuggestionsSurfaceOpened();
@@ -485,19 +644,19 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// 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));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
// Rescheduling after a succesful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
// The second call to NTPOpened 4hrs later again results in a fetch.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
}
// First enable the scheduler.
- ActivateProvider();
+ ActivateProviderAndEula();
// Make the first soft fetch successful.
scheduler()->OnBrowserForegrounded();
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// Open NTP again after 9hrs.
test_clock()->Advance(base::TimeDelta::FromHours(24));
scheduler()->OnBrowserForegrounded();
@@ -510,7 +669,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldRescheduleOnBrowserUpgraded) {
TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnActivation) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
@@ -520,7 +679,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
EXPECT_CALL(*persistent_scheduler(), Unschedule());
}
- ActivateProvider();
+ ActivateProviderAndEula();
DeactivateProvider();
}
@@ -528,46 +687,46 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnLaterActivation) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
// There is no schedule yet, so inactivation does not trigger unschedule.
DeactivateProvider();
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldRescheduleAfterSuccessfulFetch) {
// First reschedule on becoming active.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
// Trigger a fetch.
scheduler()->OnPersistentSchedulerWakeUp();
// Second reschedule after a successful fetch.
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldNotRescheduleAfterFailedFetch) {
// Only reschedule on becoming active.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
// Trigger a fetch.
scheduler()->OnPersistentSchedulerWakeUp();
// No furter reschedule after a failure.
- signal_fetch_done.Run(Status(StatusCode::PERMANENT_ERROR, ""));
+ std::move(signal_fetch_done).Run(Status(StatusCode::PERMANENT_ERROR, ""));
}
TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldScheduleOnlyOnce) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// No further call to Schedule on a second status callback.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) {
@@ -577,7 +736,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) {
EXPECT_CALL(*persistent_scheduler(), Unschedule());
}
// First schedule so that later we really unschedule.
- ActivateProvider();
+ ActivateProviderAndEula();
DeactivateProvider();
// No further call to Unschedule on second status callback.
DeactivateProvider();
@@ -586,20 +745,20 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldUnscheduleOnlyOnce) {
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenPersistentWifiParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the wifi interval for this class.
SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenPersistentFallbackParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the fallback interval for this class.
@@ -607,13 +766,13 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
"1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenShownWifiParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the on usage interval for this class.
@@ -621,13 +780,13 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
"1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenShownFallbackParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the fallback interval for this class.
@@ -635,13 +794,13 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
"1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenStartupWifiParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the on usage interval for this class.
@@ -649,13 +808,13 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
"1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest,
ReschedulesWhenStartupFallbackParamChanges) {
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(2);
- ActivateProvider();
+ ActivateProviderAndEula();
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is
// null. Change the fallback interval for this class.
@@ -663,7 +822,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
"startup_fetching_interval_hours-fallback-active_ntp_user", "1.5");
// Schedule() should get called for the second time after params have changed.
- ActivateProvider();
+ ActivateProviderAndEula();
}
TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForShownTriggerOnWifi) {
@@ -673,16 +832,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForShownTriggerOnWifi) {
// Initial scheduling after being enabled.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The first call to NTPOpened results in a fetch.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
// Rescheduling after a succesful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// Open NTP again after too short delay (one minute missing). UserClassifier
// defaults to UserClass::ACTIVE_NTP_USER - we work with the default interval
@@ -693,7 +852,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, FetchIntervalForShownTriggerOnWifi) {
// Open NTP after another delay, now together long enough to issue a fetch.
test_clock()->Advance(base::TimeDelta::FromMinutes(2));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -709,16 +868,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Initial scheduling after being enabled.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The first call to NTPOpened results in a fetch.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
// Rescheduling after a succesful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- signal_fetch_done.Run(Status::Success());
+ std::move(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));
@@ -726,7 +885,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Open NTP after another delay, now together long enough to issue a fetch.
test_clock()->Advance(base::TimeDelta::FromMinutes(10));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -740,16 +899,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Initial scheduling after being enabled.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The first call to NTPOpened results in a fetch.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
// Rescheduling after a succesful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// Open NTP again after too short delay. This time no fetch is executed.
test_clock()->Advance(base::TimeDelta::FromHours(5));
@@ -757,7 +916,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Open NTP after another delay, now together long enough to issue a fetch.
test_clock()->Advance(base::TimeDelta::FromHours(7));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -773,16 +932,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Initial scheduling after being enabled.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The first call to NTPOpened results in a fetch.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnSuggestionsSurfaceOpened();
// Rescheduling after a succesful fetch.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- signal_fetch_done.Run(Status::Success());
+ std::move(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));
@@ -790,7 +949,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// Open NTP after another delay, now together long enough to issue a fetch.
test_clock()->Advance(base::TimeDelta::FromMinutes(10));
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
scheduler()->OnSuggestionsSurfaceOpened();
}
@@ -798,7 +957,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
ShouldBlockFetchingForSomeTimeAfterHistoryCleared) {
// First enable the scheduler -- this will trigger the persistent scheduling.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// Clear the history.
scheduler()->OnHistoryCleared();
@@ -808,7 +967,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// A trigger after another 16 minutes is performed (more than 30m after
// clearing the history).
- EXPECT_CALL(*provider(), RefetchInTheBackground(_));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_));
test_clock()->Advance(base::TimeDelta::FromMinutes(16));
scheduler()->OnBrowserForegrounded();
}
@@ -819,15 +978,15 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// First enable the scheduler -- this will trigger the persistent scheduling.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The first trigger results in a fetch.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
- .WillOnce(SaveArg<0>(&signal_fetch_done));
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
+ .WillOnce(SaveArgByMove<0>(&signal_fetch_done));
scheduler()->OnBrowserForegrounded();
// Make the fetch successful -- this results in rescheduling.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
// Clear the suggestions - results in an immediate fetch.
EXPECT_CALL(*provider(), ReloadSuggestions());
@@ -860,16 +1019,16 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _)).Times(6);
// First enable the scheduler -- this will trigger the persistent scheduling.
- ActivateProvider();
+ ActivateProviderAndEula();
// As long as the quota suffices, the call gets through.
RemoteSuggestionsProvider::FetchStatusCallback signal_fetch_done;
- EXPECT_CALL(*provider(), RefetchInTheBackground(_))
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_))
.Times(5)
- .WillRepeatedly(SaveArg<0>(&signal_fetch_done));
+ .WillRepeatedly(SaveArgByMove<0>(&signal_fetch_done));
for (int x = 0; x < 5; ++x) {
scheduler()->OnPersistentSchedulerWakeUp();
- signal_fetch_done.Run(Status::Success());
+ std::move(signal_fetch_done).Run(Status::Success());
}
// For the 6th time, it is blocked by the scheduling provider.
@@ -885,10 +1044,10 @@ TEST_F(RemoteSuggestionsSchedulerImplTest,
// First enable the scheduler -- this will trigger the persistent scheduling.
EXPECT_CALL(*persistent_scheduler(), Schedule(_, _));
- ActivateProvider();
+ ActivateProviderAndEula();
// The startup triggers are ignored.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_)).Times(0);
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_)).Times(0);
scheduler()->OnBrowserForegrounded();
scheduler()->OnBrowserColdStart();
@@ -910,7 +1069,7 @@ TEST_F(RemoteSuggestionsSchedulerImplTest, ShouldIgnoreSignalsWhenOffline) {
scheduler()->OnProviderActivated();
// All signals are ignored because of being offline.
- EXPECT_CALL(*provider(), RefetchInTheBackground(_)).Times(0);
+ EXPECT_CALL(*provider(), RefetchInTheBackgroundMock(_)).Times(0);
scheduler()->OnPersistentSchedulerWakeUp();
scheduler()->OnSuggestionsSurfaceOpened();
scheduler()->OnBrowserForegrounded();