blob: c91aa8346bbbe13f52edd3d11865e2ef4e0e7de8 [file] [log] [blame]
[email protected]b1de2c72013-02-06 02:45:471// 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#include "chrome/browser/prefs/pref_registry.h"
6
7#include "base/logging.h"
8#include "base/prefs/default_pref_store.h"
9#include "base/prefs/pref_store.h"
10#include "base/values.h"
11
12PrefRegistry::PrefRegistry()
13 : defaults_(new DefaultPrefStore()) {
14}
15
16PrefRegistry::~PrefRegistry() {
17}
18
19scoped_refptr<PrefStore> PrefRegistry::defaults() {
20 return defaults_.get();
21}
22
23PrefRegistry::const_iterator PrefRegistry::begin() const {
24 return defaults_->begin();
25}
26
27PrefRegistry::const_iterator PrefRegistry::end() const {
28 return defaults_->end();
29}
30
31void PrefRegistry::SetRegistrationCallback(
32 const RegistrationCallback& callback) {
33 registration_callback_ = callback;
34}
35
36void PrefRegistry::SetUnregistrationCallback(
37 const UnregistrationCallback& callback) {
38 unregistration_callback_ = callback;
39}
40
41void PrefRegistry::DeprecatedUnregisterPreference(const char* path) {
42 DCHECK(defaults_->GetValue(path, NULL)) <<
43 "Trying to unregister an unregistered pref: " << path;
44
45 defaults_->RemoveDefaultValue(path);
46
47 if (!unregistration_callback_.is_null())
48 unregistration_callback_.Run(path);
49}
50
51void PrefRegistry::RegisterPreference(const char* path,
52 base::Value* default_value) {
53 base::Value::Type orig_type = default_value->GetType();
54 DCHECK(orig_type != base::Value::TYPE_NULL &&
55 orig_type != base::Value::TYPE_BINARY) <<
56 "invalid preference type: " << orig_type;
57 DCHECK(!defaults_->GetValue(path, NULL)) <<
58 "Trying to register a previously registered pref: " << path;
59
60 defaults_->SetDefaultValue(path, default_value);
61
62 if (!registration_callback_.is_null())
63 registration_callback_.Run(path, default_value);
64}