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 BASE_PREFS_PREF_REGISTRY_H_ 6 #define BASE_PREFS_PREF_REGISTRY_H_ 7 8 #include "base/memory/ref_counted.h" 9 #include "base/prefs/base_prefs_export.h" 10 #include "base/prefs/pref_value_map.h" 11 12 namespace base { 13 class Value; 14 } 15 16 class DefaultPrefStore; 17 class PrefStore; 18 19 // Preferences need to be registered with a type and default value 20 // before they are used. 21 // 22 // The way you use a PrefRegistry is that you register all required 23 // preferences on it (via one of its subclasses), then pass it as a 24 // construction parameter to PrefService. 25 // 26 // Currently, registrations after constructing the PrefService will 27 // also work, but this is being deprecated. 28 class BASE_PREFS_EXPORT PrefRegistry : public base::RefCounted<PrefRegistry> { 29 public: 30 typedef PrefValueMap::const_iterator const_iterator; 31 32 PrefRegistry(); 33 34 // Gets the registered defaults. 35 scoped_refptr<PrefStore> defaults(); 36 37 // Allows iteration over defaults. 38 const_iterator begin() const; 39 const_iterator end() const; 40 41 // Changes the default value for a preference. Takes ownership of |value|. 42 // 43 // |pref_name| must be a previously registered preference. 44 void SetDefaultPrefValue(const char* pref_name, base::Value* value); 45 46 protected: 47 friend class base::RefCounted<PrefRegistry>; 48 virtual ~PrefRegistry(); 49 50 // Used by subclasses to register a default value for a preference. 51 void RegisterPreference(const char* path, base::Value* default_value); 52 53 scoped_refptr<DefaultPrefStore> defaults_; 54 55 private: 56 DISALLOW_COPY_AND_ASSIGN(PrefRegistry); 57 }; 58 59 #endif // BASE_PREFS_PREF_REGISTRY_H_ 60