Index: components/ntp_snippets/ntp_snippets_status_service.h |
diff --git a/components/ntp_snippets/ntp_snippets_status_service.h b/components/ntp_snippets/ntp_snippets_status_service.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b5a73eea1c1deaec2c60cc911d690cc0f3b7a45e |
--- /dev/null |
+++ b/components/ntp_snippets/ntp_snippets_status_service.h |
@@ -0,0 +1,82 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef COMPONENTS_NTP_SNIPPETS_NTP_SNIPPETS_STATUS_SERVICE_H_ |
+#define COMPONENTS_NTP_SNIPPETS_NTP_SNIPPETS_STATUS_SERVICE_H_ |
+ |
+#include "base/callback.h" |
+#include "base/gtest_prod_util.h" |
+#include "base/scoped_observer.h" |
+#include "components/sync_driver/sync_service_observer.h" |
+ |
+class SigninManagerBase; |
+ |
+namespace sync_driver { |
+class SyncService; |
+} |
+ |
+namespace ntp_snippets { |
+ |
+// On Android builds, a Java counterpart will be generated for this enum. |
+// GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chrome.browser.ntp.snippets |
+enum class DisabledReason : int { |
+ // Snippets are enabled |
+ NONE, |
+ // Snippets have been disabled as part of the service configuration. |
+ EXPLICITLY_DISABLED, |
+ // The user is not signed in, and the service requires it to be enabled. |
+ SIGNED_OUT, |
+ // Sync is not enabled, and the service requires it to be enabled. |
+ SYNC_DISABLED, |
+ // The service requires passphrase encryption to be disabled. |
+ PASSPHRASE_ENCRYPTION_ENABLED, |
+ // 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 |
+}; |
+ |
+// Aggregates data from sync and signin to notify the snippet service of |
+// relevant changes in their states. |
+class NTPSnippetsStatusService : public sync_driver::SyncServiceObserver { |
+ public: |
+ typedef base::Callback<void(DisabledReason)> DisabledReasonChangeCallback; |
+ |
+ NTPSnippetsStatusService(SigninManagerBase* signin_manager, |
+ sync_driver::SyncService* sync_service); |
+ |
+ ~NTPSnippetsStatusService() override; |
+ |
+ // Starts listening for changes from the dependencies. |callback| will be |
+ // called when a significant change in state is detected. |
+ void Init(const DisabledReasonChangeCallback& callback); |
+ |
+ DisabledReason disabled_reason() const { return disabled_reason_; } |
+ |
+ private: |
+ FRIEND_TEST_ALL_PREFIXES(NTPSnippetsStatusServiceTest, |
+ SyncStateCompatibility); |
+ |
+ // sync_driver::SyncServiceObserver implementation |
+ void OnStateChanged() override; |
+ |
+ DisabledReason GetDisabledReasonFromDeps() const; |
+ |
+ DisabledReason disabled_reason_; |
+ DisabledReasonChangeCallback disabled_reason_change_callback_; |
+ |
+ SigninManagerBase* signin_manager_; |
+ sync_driver::SyncService* sync_service_; |
+ |
+ // The observer for the SyncService. When the sync state changes, |
+ // SyncService will call |OnStateChanged|. |
+ ScopedObserver<sync_driver::SyncService, sync_driver::SyncServiceObserver> |
+ sync_service_observer_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NTPSnippetsStatusService); |
+}; |
+ |
+} // namespace ntp_snippets |
+ |
+#endif // COMPONENTS_NTP_SNIPPETS_NTP_SNIPPETS_STATUS_SERVICE_H_ |