Index: components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc |
diff --git a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc |
index deb218a3197f5f1238b96408cbdfc9d0eb35c2ff..a6ba52298a8a4e0c0996dc57561574807a6aae0d 100644 |
--- a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc |
+++ b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.cc |
@@ -95,6 +95,8 @@ const char* kTriggerTypeNames[] = {"persistent_scheduler_wake_up", "ntp_opened", |
const char* kTriggerTypesParamName = "scheduler_trigger_types"; |
const char* kTriggerTypesParamValueForEmptyList = "-"; |
+const int kBlockBackgroundFetchesMinutesAfterClearingHistory = 30; |
+ |
// Returns the time interval to use for scheduling remote suggestion fetches for |
// the given interval and user_class. |
base::TimeDelta GetDesiredFetchingInterval( |
@@ -192,11 +194,7 @@ SchedulingRemoteSuggestionsProvider::SchedulingRemoteSuggestionsProvider( |
LoadLastFetchingSchedule(); |
- provider_->SetProviderStatusCallback( |
- base::MakeUnique<RemoteSuggestionsProvider::ProviderStatusCallback>( |
- base::BindRepeating( |
- &SchedulingRemoteSuggestionsProvider::OnProviderStatusChanged, |
- base::Unretained(this)))); |
+ provider_->SetRemoteSuggestionsScheduler(this); |
} |
SchedulingRemoteSuggestionsProvider::~SchedulingRemoteSuggestionsProvider() = |
@@ -215,6 +213,28 @@ void SchedulingRemoteSuggestionsProvider::RegisterProfilePrefs( |
0); |
} |
+void SchedulingRemoteSuggestionsProvider::OnProviderActivated() { |
+ StartScheduling(); |
+} |
+ |
+void SchedulingRemoteSuggestionsProvider::OnProviderInactivated() { |
+ StopScheduling(); |
+} |
+ |
+void SchedulingRemoteSuggestionsProvider::OnSuggestionsCleared() { |
+ // Be ready to fetch any time (upon a trigger) as we have no suggestions. |
+ pref_service_->ClearPref(prefs::kSnippetLastFetchAttempt); |
+} |
+ |
+void SchedulingRemoteSuggestionsProvider::OnHistoryCleared() { |
+ // Due to privacy, we should not fetch for a while (unless the user explicitly |
+ // asks for new suggestions) do give sync the time to propagate the changes in |
+ // history to the server. |
+ background_fetches_allowed_after_ = |
+ clock_->Now() + base::TimeDelta::FromMinutes( |
+ kBlockBackgroundFetchesMinutesAfterClearingHistory); |
+} |
+ |
void SchedulingRemoteSuggestionsProvider::RescheduleFetching() { |
// Force the reschedule by stopping and starting it again. |
StopScheduling(); |
@@ -253,9 +273,9 @@ void SchedulingRemoteSuggestionsProvider::OnNTPOpened() { |
RefetchInTheBackgroundIfEnabled(TriggerType::NTP_OPENED); |
} |
-void SchedulingRemoteSuggestionsProvider::SetProviderStatusCallback( |
- std::unique_ptr<ProviderStatusCallback> callback) { |
- provider_->SetProviderStatusCallback(std::move(callback)); |
+void SchedulingRemoteSuggestionsProvider::SetRemoteSuggestionsScheduler( |
+ RemoteSuggestionsScheduler* scheduler) { |
+ provider_->SetRemoteSuggestionsScheduler(scheduler); |
} |
void SchedulingRemoteSuggestionsProvider::RefetchInTheBackground( |
@@ -344,19 +364,6 @@ void SchedulingRemoteSuggestionsProvider::ClearDismissedSuggestionsForDebugging( |
provider_->ClearDismissedSuggestionsForDebugging(category); |
} |
-void SchedulingRemoteSuggestionsProvider::OnProviderStatusChanged( |
- RemoteSuggestionsProvider::ProviderStatus status) { |
- switch (status) { |
- case RemoteSuggestionsProvider::ProviderStatus::ACTIVE: |
- StartScheduling(); |
- return; |
- case RemoteSuggestionsProvider::ProviderStatus::INACTIVE: |
- StopScheduling(); |
- return; |
- } |
- NOTREACHED(); |
-} |
- |
void SchedulingRemoteSuggestionsProvider::StartScheduling() { |
FetchingSchedule new_schedule = GetDesiredFetchingSchedule(); |
@@ -469,7 +476,10 @@ bool SchedulingRemoteSuggestionsProvider::ShouldRefetchInTheBackgroundNow( |
NOTREACHED(); |
break; |
} |
- return first_allowed_fetch_time <= clock_->Now(); |
+ base::Time now = clock_->Now(); |
+ |
+ return background_fetches_allowed_after_ <= now && |
+ first_allowed_fetch_time <= now; |
} |
bool SchedulingRemoteSuggestionsProvider::BackgroundFetchesDisabled( |