// Copyright (c) 2012 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_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_ #define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_ #include #include #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/extensions/api/storage/settings_namespace.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 "chrome/browser/extensions/api/storage/value_store_cache.h" #include "sync/api/syncable_service.h" class Profile; namespace extensions { // The component of extension settings which runs on the UI thread, as opposed // to SettingsBackend which lives on the FILE thread. // All public methods, must be called on the UI thread, with the exception of // GetBackendForSync(), which must be called on the FILE thread. class SettingsFrontend { public: // Creates with the default factory. static SettingsFrontend* Create(Profile* profile); // Creates with a specific factory |storage_factory| (presumably for tests). static SettingsFrontend* Create( const scoped_refptr& storage_factory, Profile* profile); virtual ~SettingsFrontend(); // Must only be called from the FILE thread. |type| should be either // APP_SETTINGS or EXTENSION_SETTINGS. syncer::SyncableService* GetBackendForSync(syncer::ModelType type) const; // Returns true if |settings_namespace| is a valid namespace. bool IsStorageEnabled(settings_namespace::Namespace settings_namespace) const; // Runs |callback| with the storage area of the given |settings_namespace| // for the |extension_id|. void RunWithStorage( const std::string& extension_id, settings_namespace::Namespace settings_namespace, const ValueStoreCache::StorageCallback& callback); // Deletes the settings for the given |extension_id|. void DeleteStorageSoon(const std::string& extension_id); // Gets the thread-safe observer list. scoped_refptr GetObservers(); void DisableStorageForTesting( settings_namespace::Namespace settings_namespace); private: typedef std::map CacheMap; SettingsFrontend( const scoped_refptr& storage_factory, Profile* profile); // The quota limit configurations for the local and sync areas, taken out of // the schema in chrome/common/extensions/api/storage.json. const SettingsStorageQuotaEnforcer::Limits local_quota_limit_; const SettingsStorageQuotaEnforcer::Limits sync_quota_limit_; // The (non-incognito) Profile this Frontend belongs to. Profile* const profile_; // List of observers to settings changes. scoped_refptr observers_; // Observer for |profile_|. scoped_ptr profile_observer_; // Maps a known namespace to its corresponding ValueStoreCache. The caches // are owned by this object. CacheMap caches_; DISALLOW_COPY_AND_ASSIGN(SettingsFrontend); }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_