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..104da18ef18517efe1a1eb6e88f74f7ccf6287c2 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); |
}; |