// Copyright 2015 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 CHROME_BROWSER_NOTIFICATIONS_NOTIFIER_STATE_TRACKER_H_ #define CHROME_BROWSER_NOTIFICATIONS_NOTIFIER_STATE_TRACKER_H_ #include #include #include "base/macros.h" #include "base/prefs/pref_member.h" #include "components/keyed_service/core/keyed_service.h" #if defined(ENABLE_EXTENSIONS) #include "base/scoped_observer.h" #include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry_observer.h" #endif class Profile; namespace message_center { struct NotifierId; } namespace user_prefs { class PrefRegistrySyncable; } // Tracks whether a given NotifierId can send notifications. class NotifierStateTracker : public KeyedService #if defined(ENABLE_EXTENSIONS) , public extensions::ExtensionRegistryObserver #endif { public: // Register profile-specific prefs of notifications. static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* prefs); explicit NotifierStateTracker(Profile* profile); ~NotifierStateTracker() override; // Returns whether the notifier with |notifier_id| may send notifications. bool IsNotifierEnabled(const message_center::NotifierId& notifier_id) const; // Updates whether the notifier with |notifier_id| may send notifications. void SetNotifierEnabled(const message_center::NotifierId& notifier_id, bool enabled); private: // Called when the string list pref has been changed. void OnStringListPrefChanged( const char* pref_name, std::set* ids_field); #if defined(ENABLE_EXTENSIONS) // Fires a permission-level change event when an extension notifier has had // their notification permission changed. void FirePermissionLevelChangedEvent( const message_center::NotifierId& notifier_id, bool enabled); // extensions::ExtensionRegistryObserver: void OnExtensionUninstalled(content::BrowserContext* browser_context, const extensions::Extension* extension, extensions::UninstallReason reason) override; #endif // The profile which owns this object. Profile* profile_; // Prefs listener for disabled_extension_id. StringListPrefMember disabled_extension_id_pref_; // Prefs listener for disabled_system_component_id. StringListPrefMember disabled_system_component_id_pref_; // On-memory data for the availability of extensions. std::set disabled_extension_ids_; // On-memory data for the availability of system_component. std::set disabled_system_component_ids_; #if defined(ENABLE_EXTENSIONS) // An observer to listen when extension is uninstalled. ScopedObserver extension_registry_observer_; #endif DISALLOW_COPY_AND_ASSIGN(NotifierStateTracker); }; #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFIER_STATE_TRACKER_H_