| Index: components/ntp_snippets/ntp_snippets_service.h
|
| diff --git a/components/ntp_snippets/ntp_snippets_service.h b/components/ntp_snippets/ntp_snippets_service.h
|
| index 57542c118dacd18af251ddc534d2f28aab0503fd..faf064a98bb0f43e1ea08f1cdaa322648a8236a1 100644
|
| --- a/components/ntp_snippets/ntp_snippets_service.h
|
| +++ b/components/ntp_snippets/ntp_snippets_service.h
|
| @@ -15,18 +15,19 @@
|
| #include "base/gtest_prod_util.h"
|
| #include "base/macros.h"
|
| #include "base/observer_list.h"
|
| -#include "base/scoped_observer.h"
|
| #include "base/timer/timer.h"
|
| #include "components/image_fetcher/image_fetcher_delegate.h"
|
| #include "components/keyed_service/core/keyed_service.h"
|
| #include "components/ntp_snippets/ntp_snippet.h"
|
| #include "components/ntp_snippets/ntp_snippets_fetcher.h"
|
| #include "components/ntp_snippets/ntp_snippets_scheduler.h"
|
| +#include "components/ntp_snippets/ntp_snippets_status_service.h"
|
| #include "components/suggestions/suggestions_service.h"
|
| #include "components/sync_driver/sync_service_observer.h"
|
|
|
| class PrefRegistrySimple;
|
| class PrefService;
|
| +class SigninManagerBase;
|
|
|
| namespace base {
|
| class RefCountedMemory;
|
| @@ -52,23 +53,11 @@ class SyncService;
|
|
|
| namespace ntp_snippets {
|
|
|
| -enum class DisabledReason {
|
| - // Snippets are enabled
|
| - NONE,
|
| - // Snippets have been disabled as part of the service configuration.
|
| - EXPLICITLY_DISABLED,
|
| - // History sync is not enabled, and the service requires it to be enabled.
|
| - HISTORY_SYNC_DISABLED,
|
| - // The sync service is not completely initialized, and the status is unknown.
|
| - HISTORY_SYNC_STATE_UNKNOWN
|
| -};
|
| -
|
| class NTPSnippetsDatabase;
|
| class NTPSnippetsServiceObserver;
|
|
|
| // Stores and vends fresh content data for the NTP.
|
| class NTPSnippetsService : public KeyedService,
|
| - public sync_driver::SyncServiceObserver,
|
| public image_fetcher::ImageFetcherDelegate {
|
| public:
|
| using ImageFetchedCallback =
|
| @@ -80,14 +69,15 @@ class NTPSnippetsService : public KeyedService,
|
| // (British English person in the US) are not language codes.
|
| NTPSnippetsService(bool enabled,
|
| PrefService* pref_service,
|
| - sync_driver::SyncService* sync_service,
|
| suggestions::SuggestionsService* suggestions_service,
|
| const std::string& application_language_code,
|
| NTPSnippetsScheduler* scheduler,
|
| std::unique_ptr<NTPSnippetsFetcher> snippets_fetcher,
|
| std::unique_ptr<image_fetcher::ImageFetcher> image_fetcher,
|
| std::unique_ptr<image_fetcher::ImageDecoder> image_decoder,
|
| - std::unique_ptr<NTPSnippetsDatabase> database);
|
| + std::unique_ptr<NTPSnippetsDatabase> database,
|
| + std::unique_ptr<NTPSnippetsStatusService> status_service);
|
| +
|
| ~NTPSnippetsService() override;
|
|
|
| static void RegisterProfilePrefs(PrefRegistrySimple* registry);
|
| @@ -125,6 +115,12 @@ class NTPSnippetsService : public KeyedService,
|
| return snippets_fetcher_.get();
|
| }
|
|
|
| + // Returns a reason why the service is disabled, or DisabledReason::NONE
|
| + // if it's not.
|
| + DisabledReason disabled_reason() const {
|
| + return snippets_status_service_->disabled_reason();
|
| + }
|
| +
|
| // (Re)schedules the periodic fetching of snippets. This is necessary because
|
| // the schedule depends on the time of day.
|
| void RescheduleFetching();
|
| @@ -152,15 +148,10 @@ class NTPSnippetsService : public KeyedService,
|
| void AddObserver(NTPSnippetsServiceObserver* observer);
|
| void RemoveObserver(NTPSnippetsServiceObserver* observer);
|
|
|
| - // Returns a reason why the service could be disabled, or DisabledReason::NONE
|
| - // if it's not.
|
| - DisabledReason GetDisabledReason() const;
|
| -
|
| // Returns the maximum number of snippets that will be shown at once.
|
| static int GetMaxSnippetCountForTesting();
|
|
|
| private:
|
| - FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, SyncStateCompatibility);
|
| FRIEND_TEST_ALL_PREFIXES(NTPSnippetsServiceTest, HistorySyncStateChanges);
|
|
|
| // Possible state transitions:
|
| @@ -199,9 +190,6 @@ class NTPSnippetsService : public KeyedService,
|
| SHUT_DOWN
|
| };
|
|
|
| - // sync_driver::SyncServiceObserver implementation.
|
| - void OnStateChanged() override;
|
| -
|
| // image_fetcher::ImageFetcherDelegate implementation.
|
| void OnImageDataFetched(const std::string& snippet_id,
|
| const std::string& image_data) override;
|
| @@ -243,9 +231,10 @@ class NTPSnippetsService : public KeyedService,
|
| void FetchSnippetImageFromNetwork(const std::string& snippet_id,
|
| const ImageFetchedCallback& callback);
|
|
|
| - // Returns whether the service should be enabled or disable depending on its
|
| - // internal state and the state of its dependencies.
|
| - State GetStateForDependenciesStatus();
|
| + // Triggers a state transition depending on the provided reason to be
|
| + // disabled (or lack thereof). This method is called when a change is detected
|
| + // by |snippets_status_service_|
|
| + void UpdateStateForStatus(DisabledReason disabled_reason);
|
|
|
| // Verifies state transitions (see |State|'s documentation) and applies them.
|
| // Does nothing if called with the current state.
|
| @@ -266,21 +255,8 @@ class NTPSnippetsService : public KeyedService,
|
|
|
| State state_;
|
|
|
| - // The service was set up to be disabled and should not be enabled by any
|
| - // state change. We track this to make sure we clear scheduled tasks, which
|
| - // persist even when Chrome is stopped.
|
| - bool explicitly_disabled_;
|
| -
|
| PrefService* pref_service_;
|
|
|
| - sync_driver::SyncService* sync_service_;
|
| -
|
| - // The observer for the SyncService. When the sync state changes,
|
| - // SyncService will call |OnStateChanged|, which is propagated to the
|
| - // snippet observers.
|
| - ScopedObserver<sync_driver::SyncService, sync_driver::SyncServiceObserver>
|
| - sync_service_observer_;
|
| -
|
| suggestions::SuggestionsService* suggestions_service_;
|
|
|
| // All current suggestions (i.e. not discarded ones).
|
| @@ -318,6 +294,9 @@ class NTPSnippetsService : public KeyedService,
|
| // The database for persisting snippets.
|
| std::unique_ptr<NTPSnippetsDatabase> database_;
|
|
|
| + // The service that provides events and data about the signin and sync state.
|
| + std::unique_ptr<NTPSnippetsStatusService> snippets_status_service_;
|
| +
|
| // Set to true if FetchSnippets is called before the database has been loaded.
|
| // The fetch will be executed after the database load finishes.
|
| bool fetch_after_load_;
|
| @@ -329,11 +308,14 @@ class NTPSnippetsServiceObserver {
|
| public:
|
| // Sent every time the service loads a new set of data.
|
| virtual void NTPSnippetsServiceLoaded() = 0;
|
| +
|
| // Sent when the service is shutting down.
|
| virtual void NTPSnippetsServiceShutdown() = 0;
|
| - // Sent when the service has been disabled. Can be from explicit user action
|
| - // or because a requirement (e.g. History Sync) is not fulfilled anymore.
|
| - virtual void NTPSnippetsServiceDisabled() = 0;
|
| +
|
| + // Sent when the state of the service is changing. Something changed in its
|
| + // dependencies so it's notifying observers about incoming data changes.
|
| + // If the service might be enabled, DisabledReason::NONE will be provided.
|
| + virtual void NTPSnippetsServiceDisabledReasonChanged(DisabledReason) = 0;
|
|
|
| protected:
|
| virtual ~NTPSnippetsServiceObserver() {}
|
|
|