Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(518)

Unified Diff: components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h

Issue 2774663002: [Remote suggestions] Refactor the scheduler (Closed)
Patch Set: Add missing files & make it compile Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
diff --git a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.h b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
similarity index 61%
rename from components/ntp_snippets/remote/scheduling_remote_suggestions_provider.h
rename to components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
index 61853cdc95b1598a6acb787e2b194c707987a1a8..255c963e507753b2627a41ecfc96c25291945837 100644
--- a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider.h
+++ b/components/ntp_snippets/remote/remote_suggestions_scheduler_impl.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_SCHEDULING_REMOTE_SUGGESTIONS_PROVIDER_H_
-#define COMPONENTS_NTP_SNIPPETS_REMOTE_SCHEDULING_REMOTE_SUGGESTIONS_PROVIDER_H_
+#ifndef COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_SCHEDULER_IMPL_H_
+#define COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_SCHEDULER_IMPL_H_
#include <memory>
#include <set>
@@ -34,13 +34,6 @@ class EulaState;
class UserClassifier;
// A wrapper around RemoteSuggestionsProvider that introduces periodic fetching.
-//
-// The class initiates fetches on its own in these situations:
-// - initial fetch when the provider is constructed and we have no suggestions;
-// - regular fetches according to its schedule.
-// TODO(jkrcal): After soft fetch on Chrome startup is introduced, remove
-// the initial fetch completely.
-//
// The class also needs to understand when last fetch trials and successful
// fetches happen and thus it intercepts following interactive fetch requests:
// - Fetch() - after "More" button of a remote section is pressed in the UI;
@@ -57,20 +50,16 @@ class UserClassifier;
// TODO(jkrcal): Change the interface to ContentSuggestionsProvider. We do not
// need any special functionality, all special should be exposed in the
// Scheduler interface. crbug.com/695447
-class SchedulingRemoteSuggestionsProvider final
- : public RemoteSuggestionsProvider,
- public RemoteSuggestionsScheduler {
+class RemoteSuggestionsSchedulerImpl : public RemoteSuggestionsScheduler {
public:
- SchedulingRemoteSuggestionsProvider(
- Observer* observer,
- std::unique_ptr<RemoteSuggestionsProvider> provider,
- PersistentScheduler* persistent_scheduler,
- const UserClassifier* user_classifier,
- PrefService* profile_prefs,
- PrefService* local_state_prefs,
- std::unique_ptr<base::Clock> clock);
+ RemoteSuggestionsSchedulerImpl(RemoteSuggestionsProvider* provider,
+ PersistentScheduler* persistent_scheduler,
+ const UserClassifier* user_classifier,
+ PrefService* profile_prefs,
+ PrefService* local_state_prefs,
+ std::unique_ptr<base::Clock> clock);
- ~SchedulingRemoteSuggestionsProvider() override;
+ ~RemoteSuggestionsSchedulerImpl();
static void RegisterProfilePrefs(PrefRegistrySimple* registry);
@@ -80,50 +69,25 @@ class SchedulingRemoteSuggestionsProvider final
void OnSuggestionsCleared() override;
void OnHistoryCleared() override;
void RescheduleFetching() override;
+ bool AcquireQuotaForInteractiveFetch() override;
+ void OnInteractiveFetchFinished(Status fetch_status) override;
void OnPersistentSchedulerWakeUp() override;
void OnBrowserForegrounded() override;
void OnBrowserColdStart() override;
void OnNTPOpened() override;
- // RemoteSuggestionsProvider implementation.
- void RefetchInTheBackground(
- std::unique_ptr<FetchStatusCallback> callback) override;
- const RemoteSuggestionsFetcher* suggestions_fetcher_for_debugging()
- const override;
-
- // ContentSuggestionsProvider implementation.
- CategoryStatus GetCategoryStatus(Category category) override;
- CategoryInfo GetCategoryInfo(Category category) override;
- void DismissSuggestion(const ContentSuggestion::ID& suggestion_id) override;
- void FetchSuggestionImage(const ContentSuggestion::ID& suggestion_id,
- const ImageFetchedCallback& callback) override;
- void Fetch(const Category& category,
- const std::set<std::string>& known_suggestion_ids,
- const FetchDoneCallback& callback) override;
- void ReloadSuggestions() override;
- void ClearHistory(
- base::Time begin,
- base::Time end,
- const base::Callback<bool(const GURL& url)>& filter) override;
- void ClearCachedSuggestions(Category category) override;
- void OnSignInStateChanged() override;
- void GetDismissedSuggestionsForDebugging(
- Category category,
- const DismissedSuggestionsCallback& callback) override;
- void ClearDismissedSuggestionsForDebugging(Category category) override;
-
private:
// Abstract description of the fetching schedule.
struct FetchingSchedule {
- static FetchingSchedule Empty();
- bool operator==(const FetchingSchedule& other) const;
- bool operator!=(const FetchingSchedule& other) const;
- bool is_empty() const;
-
- base::TimeDelta interval_persistent_wifi;
- base::TimeDelta interval_persistent_fallback;
- base::TimeDelta interval_soft_on_usage_event;
- base::TimeDelta interval_soft_on_ntp_opened;
+ static FetchingSchedule Empty();
+ bool operator==(const FetchingSchedule& other) const;
+ bool operator!=(const FetchingSchedule& other) const;
+ bool is_empty() const;
+
+ base::TimeDelta interval_persistent_wifi;
+ base::TimeDelta interval_persistent_fallback;
+ base::TimeDelta interval_soft_on_usage_event;
+ base::TimeDelta interval_soft_on_ntp_opened;
};
enum class TriggerType;
@@ -141,6 +105,9 @@ class SchedulingRemoteSuggestionsProvider final
// Trigger a background refetch for the given |trigger| if enabled.
void RefetchInTheBackgroundIfEnabled(TriggerType trigger);
+ // Trigger the background refetch.
+ void RefetchInTheBackground();
+
// Checks whether it is time to perform a soft background fetch, according to
// |schedule|.
bool ShouldRefetchInTheBackgroundNow(TriggerType trigger);
@@ -151,15 +118,8 @@ class SchedulingRemoteSuggestionsProvider final
// Returns true if quota is available for another request.
bool AcquireQuota(bool interactive_request);
- // Callback after Fetch is completed.
- void FetchFinished(const FetchDoneCallback& callback,
- Status fetch_status,
- std::vector<ContentSuggestion> suggestions);
-
// Callback after RefetchInTheBackground is completed.
- void RefetchInTheBackgroundFinished(
- std::unique_ptr<FetchStatusCallback> callback,
- Status fetch_status);
+ void RefetchInTheBackgroundFinished(Status fetch_status);
// Common function to call after a fetch of any type is finished.
void OnFetchCompleted(Status fetch_status);
@@ -184,7 +144,7 @@ class SchedulingRemoteSuggestionsProvider final
std::set<TriggerType> GetDefaultEnabledTriggerTypes();
// Interface for doing all the actual work (apart from scheduling).
- std::unique_ptr<RemoteSuggestionsProvider> provider_;
+ RemoteSuggestionsProvider* provider_;
// Interface for scheduling hard fetches, OS dependent. Not owned, may be
// null.
@@ -206,13 +166,13 @@ class SchedulingRemoteSuggestionsProvider final
PrefService* profile_prefs_;
std::unique_ptr<base::Clock> clock_;
- std::set<SchedulingRemoteSuggestionsProvider::TriggerType> enabled_triggers_;
+ std::set<RemoteSuggestionsSchedulerImpl::TriggerType> enabled_triggers_;
base::Time background_fetches_allowed_after_;
- DISALLOW_COPY_AND_ASSIGN(SchedulingRemoteSuggestionsProvider);
+ DISALLOW_COPY_AND_ASSIGN(RemoteSuggestionsSchedulerImpl);
};
} // namespace ntp_snippets
-#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_SCHEDULING_REMOTE_SUGGESTIONS_PROVIDER_H_
+#endif // COMPONENTS_NTP_SNIPPETS_REMOTE_REMOTE_SUGGESTIONS_SCHEDULER_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698