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
12namespace base {
13class Value;
14}
15
16class DefaultPrefStore;
17class 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.
28class 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