Chromium Code Reviews| Index: chrome/browser/extensions/extension_settings_frontend.h |
| diff --git a/chrome/browser/extensions/extension_settings_frontend.h b/chrome/browser/extensions/extension_settings_frontend.h |
| index 7fe3dc00b91ae9564be38b910b6cd4b1e2bad315..fa9ea1f85e9c54caadeecc0b52ca03851ce782fa 100644 |
| --- a/chrome/browser/extensions/extension_settings_frontend.h |
| +++ b/chrome/browser/extensions/extension_settings_frontend.h |
| @@ -6,34 +6,57 @@ |
| #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SETTINGS_FRONTEND_H_ |
| #pragma once |
| +#include "base/callback.h" |
| #include "base/compiler_specific.h" |
| #include "base/memory/ref_counted.h" |
| -#include "base/callback.h" |
| +#include "base/observer_list_threadsafe.h" |
| +#include "chrome/browser/extensions/extension_settings_observer.h" |
| #include "chrome/browser/sync/api/syncable_service.h" |
| +#include "content/common/notification_observer.h" |
| +#include "content/common/notification_registrar.h" |
| class FilePath; |
| +class Profile; |
| class ExtensionSettingsBackend; |
| class ExtensionSettingsStorage; |
| // The component of extension settings which runs on the UI thread, as opposed |
| // to ExtensionSettingsBackend which lives on the FILE thread. |
| -class ExtensionSettingsFrontend { |
| +class ExtensionSettingsFrontend : public NotificationObserver { |
| public: |
| - explicit ExtensionSettingsFrontend(const FilePath& base_path); |
| + explicit ExtensionSettingsFrontend(Profile* profile); |
| + virtual ~ExtensionSettingsFrontend(); |
| typedef base::Callback<void(ExtensionSettingsBackend*)> BackendCallback; |
| // Runs |callback| on the FILE thread with the extension settings. |
| void RunWithBackend(const BackendCallback& callback); |
| - ~ExtensionSettingsFrontend(); |
| + // Adds an observer to settings changes. |
| + void AddObserver(ExtensionSettingsObserver* observer); |
| + |
| + // Removes an observer to settings changes. |
| + void RemoveObserver(ExtensionSettingsObserver* observer); |
| + |
| + // Sends a change event to all settings change observer. |profile| is the |
| + // profile that the change originated from. |
| + void TriggerOnSettingsChanged( |
|
Matt Perry
2011/10/07 22:39:52
Is this actually used? I only see TriggerOnSetting
not at google - send to devlin
2011/10/10 01:00:16
Done.
|
| + Profile* profile, |
| + const std::string& extension_id, |
| + const ExtensionSettingsObserver::ChangeList& changes); |
| + |
| + // NotificationObserver implementation. |
| + virtual void Observe( |
| + int type, |
| + const NotificationSource& source, |
| + const NotificationDetails& details) OVERRIDE; |
| private: |
| // Ref-counted container for the ExtensionSettingsBackend object. |
| class Core : public base::RefCountedThreadSafe<Core> { |
| public: |
| // Constructed on UI thread. |
| - Core(); |
| + explicit Core(ObserverListThreadSafe<ExtensionSettingsObserver>* observers); |
|
akalin
2011/10/07 21:06:23
const ref to scoped_refptr
not at google - send to devlin
2011/10/10 01:00:16
Done.
|
| // Does any FILE thread specific initialization, such as construction of |
| // |backend_|. Must be called before any call to |
| @@ -48,14 +71,55 @@ class ExtensionSettingsFrontend { |
| virtual ~Core(); |
| friend class base::RefCountedThreadSafe<Core>; |
| + // Thread safe. |
| + scoped_refptr<ObserverListThreadSafe<ExtensionSettingsObserver> > |
| + observers_; |
| + |
| // Lives on the FILE thread. |
| ExtensionSettingsBackend* backend_; |
| DISALLOW_COPY_AND_ASSIGN(Core); |
| }; |
| + // Observer which sends events to a target profile iff the profile isn't the |
| + // originating profile for the event. |
| + class DefaultObserver : public ExtensionSettingsObserver { |
|
Matt Perry
2011/10/07 22:39:52
nit: move the implementation into the .cc file. yo
not at google - send to devlin
2011/10/10 01:00:16
Done.
|
| + public: |
| + explicit DefaultObserver(Profile* target_profile); |
| + virtual ~DefaultObserver(); |
| + |
| + virtual void OnSettingsChanged( |
| + Profile* origin_profile, |
| + const std::string& extension_id, |
| + const std::string& event_json) OVERRIDE; |
| + |
| + private: |
| + Profile* target_profile_; |
| + }; |
| + |
| + // Called when a profile is created. |
| + void OnProfileCreated(Profile* profile); |
| + |
| + // Called when a profile is destroyed. |
| + void OnProfileDestroyed(Profile* profile); |
| + |
| + // List of observers to settings changes. |
| + scoped_refptr<ObserverListThreadSafe<ExtensionSettingsObserver> > observers_; |
| + |
| + // Map of Profiles to their Observers. This is so that when Profiles are |
| + // destroyed we can remove the associated Observer. |
| + // MUST ONLY BE ACCESSED ON THE UI THREAD. |
|
akalin
2011/10/07 21:06:23
this warning goes for any member of this class bes
not at google - send to devlin
2011/10/10 01:00:16
I think that observers_, core_, and registrar_ (fw
|
| + std::map<Profile*, DefaultObserver*> profile_observers_; |
| + |
| + // Ref-counted core. |
| scoped_refptr<Core> core_; |
| + // Profile which owns the frontend. |
| + Profile* profile_; |
| + |
| + // For profile created/destroyed notifications. |
| + NotificationRegistrar registrar_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsFrontend); |
| }; |