1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_ 6 #define CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_ 7 8 #include <map> 9 #include <string> 10 11 #include "base/memory/ref_counted.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "chrome/browser/extensions/api/storage/settings_namespace.h" 14 #include "chrome/browser/extensions/api/storage/settings_observer.h" 15 #include "chrome/browser/extensions/api/storage/settings_storage_factory.h" 16 #include "chrome/browser/extensions/api/storage/settings_storage_quota_enforcer.h" 17 #include "chrome/browser/extensions/api/storage/value_store_cache.h" 18 #include "sync/api/syncable_service.h" 19 20 class Profile; 21 22 namespace extensions { 23 24 // The component of extension settings which runs on the UI thread, as opposed 25 // to SettingsBackend which lives on the FILE thread. 26 // All public methods, must be called on the UI thread, with the exception of 27 // GetBackendForSync(), which must be called on the FILE thread. 28 class SettingsFrontend { 29 public: 30 // Creates with the default factory. 31 static SettingsFrontend* Create(Profile* profile); 32 33 // Creates with a specific factory |storage_factory| (presumably for tests). 34 static SettingsFrontend* Create( 35 const scoped_refptr<SettingsStorageFactory>& storage_factory, 36 Profile* profile); 37 38 virtual ~SettingsFrontend(); 39 40 // Must only be called from the FILE thread. |type| should be either 41 // APP_SETTINGS or EXTENSION_SETTINGS. 42 syncer::SyncableService* GetBackendForSync(syncer::ModelType type) const; 43 44 // Returns true if |settings_namespace| is a valid namespace. 45 bool IsStorageEnabled(settings_namespace::Namespace settings_namespace) const; 46 47 // Runs |callback| with the storage area of the given |settings_namespace| 48 // for the |extension_id|. 49 void RunWithStorage( 50 const std::string& extension_id, 51 settings_namespace::Namespace settings_namespace, 52 const ValueStoreCache::StorageCallback& callback); 53 54 // Deletes the settings for the given |extension_id|. 55 void DeleteStorageSoon(const std::string& extension_id); 56 57 // Gets the thread-safe observer list. 58 scoped_refptr<SettingsObserverList> GetObservers(); 59 60 void DisableStorageForTesting( 61 settings_namespace::Namespace settings_namespace); 62 63 private: 64 typedef std::map<settings_namespace::Namespace, ValueStoreCache*> CacheMap; 65 66 SettingsFrontend( 67 const scoped_refptr<SettingsStorageFactory>& storage_factory, 68 Profile* profile); 69 70 // The quota limit configurations for the local and sync areas, taken out of 71 // the schema in chrome/common/extensions/api/storage.json. 72 const SettingsStorageQuotaEnforcer::Limits local_quota_limit_; 73 const SettingsStorageQuotaEnforcer::Limits sync_quota_limit_; 74 75 // The (non-incognito) Profile this Frontend belongs to. 76 Profile* const profile_; 77 78 // List of observers to settings changes. 79 scoped_refptr<SettingsObserverList> observers_; 80 81 // Observer for |profile_|. 82 scoped_ptr<SettingsObserver> profile_observer_; 83 84 // Maps a known namespace to its corresponding ValueStoreCache. The caches 85 // are owned by this object. 86 CacheMap caches_; 87 88 DISALLOW_COPY_AND_ASSIGN(SettingsFrontend); 89 }; 90 91 } // namespace extensions 92 93 #endif // CHROME_BROWSER_EXTENSIONS_API_STORAGE_SETTINGS_FRONTEND_H_ 94