diff options
Diffstat (limited to 'chrome/browser/extensions/extension_settings_frontend.h')
-rw-r--r-- | chrome/browser/extensions/extension_settings_frontend.h | 73 |
1 files changed, 50 insertions, 23 deletions
diff --git a/chrome/browser/extensions/extension_settings_frontend.h b/chrome/browser/extensions/extension_settings_frontend.h index 7fe3dc0..104da18 100644 --- a/chrome/browser/extensions/extension_settings_frontend.h +++ b/chrome/browser/extensions/extension_settings_frontend.h @@ -6,56 +6,83 @@ #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/memory/scoped_ptr.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/public/browser/notification_observer.h" +#include "content/public/browser/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 content::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); + + // NotificationObserver implementation. + virtual void Observe( + int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) OVERRIDE; private: - // Ref-counted container for the ExtensionSettingsBackend object. - class Core : public base::RefCountedThreadSafe<Core> { - public: - // Constructed on UI thread. - Core(); + // Observer which sends events to a target profile iff the profile isn't the + // originating profile for the event. + class DefaultObserver; - // Does any FILE thread specific initialization, such as construction of - // |backend_|. Must be called before any call to - // RunWithBackendOnFileThread(). - void InitOnFileThread(const FilePath& base_path); + // Called when a profile is created. + void OnProfileCreated(Profile* profile); - // Runs |callback| with the extension backend. - void RunWithBackendOnFileThread(const BackendCallback& callback); + // Called when a profile is destroyed. + void OnProfileDestroyed(Profile* profile); - private: - // Can be destroyed on either the UI or FILE thread. - virtual ~Core(); - friend class base::RefCountedThreadSafe<Core>; + // Creates a scoped DefaultObserver and adds it as an Observer. + void SetDefaultObserver( + Profile* profile, scoped_ptr<DefaultObserver>* observer); - // Lives on the FILE thread. - ExtensionSettingsBackend* backend_; + // If a scoped DefaultObserver exists, clears it and removes it as an + // Observer. + void ClearDefaultObserver(scoped_ptr<DefaultObserver>* observer); - DISALLOW_COPY_AND_ASSIGN(Core); - }; + // The (original) Profile this Frontend belongs to. Note that we don't store + // the incognito version of the profile because it will change as it's + // created and destroyed during the lifetime of Chrome. + Profile* const profile_; + // List of observers to settings changes. + scoped_refptr<ObserverListThreadSafe<ExtensionSettingsObserver> > observers_; + + // The default original and incognito mode profile observers. + scoped_ptr<DefaultObserver> original_profile_observer; + scoped_ptr<DefaultObserver> incognito_profile_observer_; + + // Ref-counted container for the ExtensionSettingsBackend object. + class Core; scoped_refptr<Core> core_; + // For profile created/destroyed notifications. + content::NotificationRegistrar registrar_; + DISALLOW_COPY_AND_ASSIGN(ExtensionSettingsFrontend); }; |