| Index: components/ntp_snippets/ntp_snippets_service.cc
|
| diff --git a/components/ntp_snippets/ntp_snippets_service.cc b/components/ntp_snippets/ntp_snippets_service.cc
|
| index 20995ee0a75cb927314376771ea85492b42530b1..2313a15bf45cfcab344f8aeee3f6a83d5039e739 100644
|
| --- a/components/ntp_snippets/ntp_snippets_service.cc
|
| +++ b/components/ntp_snippets/ntp_snippets_service.cc
|
| @@ -232,6 +232,9 @@ NTPSnippetsService::~NTPSnippetsService() {
|
| // static
|
| void NTPSnippetsService::RegisterProfilePrefs(PrefRegistrySimple* registry) {
|
| registry->RegisterListPref(prefs::kSnippetHosts);
|
| + registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalWifi, 0);
|
| + registry->RegisterInt64Pref(prefs::kSnippetBackgroundFetchingIntervalFallback,
|
| + 0);
|
|
|
| NTPSnippetsStatusService::RegisterProfilePrefs(registry);
|
| }
|
| @@ -268,21 +271,40 @@ void NTPSnippetsService::FetchSnippetsFromHosts(
|
| interactive_request);
|
| }
|
|
|
| -void NTPSnippetsService::RescheduleFetching() {
|
| +void NTPSnippetsService::RescheduleFetching(bool force) {
|
| // The scheduler only exists on Android so far, it's null on other platforms.
|
| if (!scheduler_)
|
| return;
|
|
|
| - // If we're NOT_INITED, we don't know whether to schedule or un-schedule.
|
| - // We'll reschedule on the next state change anyway, so do nothing here.
|
| - if (state_ == State::NOT_INITED)
|
| - return;
|
| -
|
| if (ready()) {
|
| - scheduler_->Schedule(GetFetchingIntervalWifi(),
|
| - GetFetchingIntervalFallback());
|
| + base::TimeDelta old_interval_wifi =
|
| + base::TimeDelta::FromInternalValue(pref_service_->GetInt64(
|
| + prefs::kSnippetBackgroundFetchingIntervalWifi));
|
| + base::TimeDelta old_interval_fallback =
|
| + base::TimeDelta::FromInternalValue(pref_service_->GetInt64(
|
| + prefs::kSnippetBackgroundFetchingIntervalFallback));
|
| + base::TimeDelta interval_wifi = GetFetchingIntervalWifi();
|
| + base::TimeDelta interval_fallback = GetFetchingIntervalFallback();
|
| + if (force || interval_wifi != old_interval_wifi ||
|
| + interval_fallback != old_interval_fallback) {
|
| + scheduler_->Schedule(interval_wifi, interval_fallback);
|
| + pref_service_->SetInt64(prefs::kSnippetBackgroundFetchingIntervalWifi,
|
| + interval_wifi.ToInternalValue());
|
| + pref_service_->SetInt64(
|
| + prefs::kSnippetBackgroundFetchingIntervalFallback,
|
| + interval_fallback.ToInternalValue());
|
| + }
|
| } else {
|
| - scheduler_->Unschedule();
|
| + // If we're NOT_INITED, we don't know whether to schedule or un-schedule.
|
| + // If |force| is false, all is well: We'll reschedule on the next state
|
| + // change anyway. If it's true, then unschedule here, to make sure that the
|
| + // next reschedule actually happens.
|
| + if (state_ != State::NOT_INITED || force) {
|
| + scheduler_->Unschedule();
|
| + pref_service_->ClearPref(prefs::kSnippetBackgroundFetchingIntervalWifi);
|
| + pref_service_->ClearPref(
|
| + prefs::kSnippetBackgroundFetchingIntervalFallback);
|
| + }
|
| }
|
| }
|
|
|
| @@ -610,7 +632,7 @@ void NTPSnippetsService::OnFetchFinished(
|
| // succeeded, and also that we don't do a background fetch immediately after
|
| // a user-initiated one.
|
| if (snippets)
|
| - RescheduleFetching();
|
| + RescheduleFetching(true);
|
| }
|
|
|
| void NTPSnippetsService::ArchiveSnippets(Category category,
|
| @@ -990,10 +1012,7 @@ void NTPSnippetsService::EnterState(State state) {
|
| }
|
|
|
| // Schedule or un-schedule background fetching after each state change.
|
| - // TODO(treib): This resets all currently scheduled fetches on each Chrome
|
| - // start. Maybe store the currently scheduled values in prefs, and only
|
| - // reschedule if they have changed? crbug.com/646842
|
| - RescheduleFetching();
|
| + RescheduleFetching(false);
|
| }
|
|
|
| void NTPSnippetsService::NotifyNewSuggestions() {
|
|
|