Index: chrome/browser/extensions/api/storage/settings_backend.h |
diff --git a/chrome/browser/extensions/api/storage/settings_backend.h b/chrome/browser/extensions/api/storage/settings_backend.h |
index a82c0e8c2a652f6e46a6220e3123c980b4021faa..0882b68ed3538996b8767075c802c5813026b9c3 100644 |
--- a/chrome/browser/extensions/api/storage/settings_backend.h |
+++ b/chrome/browser/extensions/api/storage/settings_backend.h |
@@ -5,65 +5,111 @@ |
#ifndef CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_BACKEND_H_ |
#define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_BACKEND_H_ |
+#include <map> |
+#include <set> |
#include <string> |
+#include "base/compiler_specific.h" |
#include "base/files/file_path.h" |
+#include "base/memory/linked_ptr.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
+#include "chrome/browser/extensions/api/storage/settings_observer.h" |
+#include "chrome/browser/extensions/api/storage/settings_storage_factory.h" |
#include "chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.h" |
+#include "sync/api/syncable_service.h" |
namespace syncer { |
-class SyncableService; |
+class SyncErrorFactory; |
} |
-class ValueStore; |
+namespace extensions { |
-namespace extensions { |
-class SettingsStorageFactory; |
+class SettingsSyncProcessor; |
+class SyncableSettingsStorage; |
-class SettingsBackend { |
+// Manages ValueStore objects for extensions, including routing |
+// changes from sync to them. |
+// Lives entirely on the FILE thread. |
+class SettingsBackend : public syncer::SyncableService { |
public: |
- SettingsBackend(const scoped_refptr<SettingsStorageFactory>& storage_factory, |
- const base::FilePath& base_path, |
- const SettingsStorageQuotaEnforcer::Limits& quota); |
+ // |storage_factory| is use to create leveldb storage areas. |
+ // |base_path| is the base of the extension settings directory, so the |
+ // databases will be at base_path/extension_id. |
+ // |observers| is the list of observers to settings changes. |
+ SettingsBackend( |
+ const scoped_refptr<SettingsStorageFactory>& storage_factory, |
+ const base::FilePath& base_path, |
+ syncer::ModelType sync_type, |
+ const syncer::SyncableService::StartSyncFlare& flare, |
+ const SettingsStorageQuotaEnforcer::Limits& quota, |
+ const scoped_refptr<SettingsObserverList>& observers); |
+ |
virtual ~SettingsBackend(); |
// Gets a weak reference to the storage area for |extension_id|. |
// Must be run on the FILE thread. |
- virtual ValueStore* GetStorage(const std::string& extension_id) = 0; |
+ ValueStore* GetStorage(const std::string& extension_id) const; |
// Deletes all setting data for an extension. Call on the FILE thread. |
- virtual void DeleteStorage(const std::string& extension_id) = 0; |
+ void DeleteStorage(const std::string& extension_id); |
- // A slight hack so we can get a SyncableService from a SettingsBackend if |
- // it's actually a SyncStorageBackend. If called on a LocalStorageBackend, |
- // this asserts and returns null. |
- virtual syncer::SyncableService* GetAsSyncableService(); |
+ // syncer::SyncableService implementation. |
+ virtual syncer::SyncDataList GetAllSyncData( |
+ syncer::ModelType type) const OVERRIDE; |
+ virtual syncer::SyncMergeResult MergeDataAndStartSyncing( |
+ syncer::ModelType type, |
+ const syncer::SyncDataList& initial_sync_data, |
+ scoped_ptr<syncer::SyncChangeProcessor> sync_processor, |
+ scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) OVERRIDE; |
+ virtual syncer::SyncError ProcessSyncChanges( |
+ const tracked_objects::Location& from_here, |
+ const syncer::SyncChangeList& change_list) OVERRIDE; |
+ virtual void StopSyncing(syncer::ModelType type) OVERRIDE; |
- SettingsStorageFactory* storage_factory() const { |
- return storage_factory_.get(); |
- } |
- const base::FilePath& base_path() const { return base_path_; } |
- const SettingsStorageQuotaEnforcer::Limits& quota() const { return quota_; } |
+ private: |
+ // Gets a weak reference to the storage area for a given extension, |
+ // initializing sync with some initial data if sync enabled. |
+ SyncableSettingsStorage* GetOrCreateStorageWithSyncData( |
+ const std::string& extension_id, |
+ const base::DictionaryValue& sync_data) const; |
- protected: |
- // Creates a ValueStore decorated with quota-enforcing behavior (the default |
- // for both sync and local stores). If the database is corrupt, |
- // SettingsStorageQuotaEnforcer will try and restore it as part of the |
- // initialization process (by necessity, since we need to read the database to |
- // calculate the storage). |
- scoped_ptr<SettingsStorageQuotaEnforcer> CreateStorageForExtension( |
+ // Gets all extension IDs known to extension settings. This may not be all |
+ // installed extensions. |
+ std::set<std::string> GetKnownExtensionIDs() const; |
+ |
+ // Creates a new SettingsSyncProcessor for an extension. |
+ scoped_ptr<SettingsSyncProcessor> CreateSettingsSyncProcessor( |
const std::string& extension_id) const; |
- private: |
- // The Factory to use for creating new ValueStores. |
+ // The Factory to use for creating leveldb storage areas. |
const scoped_refptr<SettingsStorageFactory> storage_factory_; |
- // The base file path to use when creating new ValueStores. |
+ // The base file path to create any leveldb databases at. |
const base::FilePath base_path_; |
// Quota limits (see SettingsStorageQuotaEnforcer). |
const SettingsStorageQuotaEnforcer::Limits quota_; |
+ |
+ // The list of observers to settings changes. |
+ const scoped_refptr<SettingsObserverList> observers_; |
+ |
+ // A cache of ValueStore objects that have already been created. |
+ // Ensure that there is only ever one created per extension. |
+ typedef std::map<std::string, linked_ptr<SyncableSettingsStorage> > |
+ StorageObjMap; |
+ mutable StorageObjMap storage_objs_; |
+ |
+ // Current sync model type. Either EXTENSION_SETTINGS or APP_SETTINGS. |
+ syncer::ModelType sync_type_; |
+ |
+ // Current sync processor, if any. |
+ scoped_ptr<syncer::SyncChangeProcessor> sync_processor_; |
+ |
+ // Current sync error handler if any. |
+ scoped_ptr<syncer::SyncErrorFactory> sync_error_factory_; |
+ |
+ syncer::SyncableService::StartSyncFlare flare_; |
DISALLOW_COPY_AND_ASSIGN(SettingsBackend); |
}; |