diff options
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.cc | 385 |
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(); |