blob: 9edde709eaf3285008e8175f5a1c6d5734dab713 [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
brettwf00b9b42016-02-01 22:11:385#include "components/prefs/pref_registry.h"
[email protected]b1de2c72013-02-06 02:45:476
vabr88e507212017-03-29 13:22:267#include <utility>
8
[email protected]b1de2c72013-02-06 02:45:479#include "base/logging.h"
dcheng5f043bc2016-04-22 19:09:0610#include "base/memory/ptr_util.h"
raymes51b41a62015-04-24 02:45:0411#include "base/stl_util.h"
[email protected]b1de2c72013-02-06 02:45:4712#include "base/values.h"
brettwf00b9b42016-02-01 22:11:3813#include "components/prefs/default_pref_store.h"
14#include "components/prefs/pref_store.h"
[email protected]b1de2c72013-02-06 02:45:4715
16PrefRegistry::PrefRegistry()
17 : defaults_(new DefaultPrefStore()) {
18}
19
20PrefRegistry::~PrefRegistry() {
21}
22
avi9ef8bb02015-12-24 05:29:3623uint32_t PrefRegistry::GetRegistrationFlags(
24 const std::string& pref_name) const {
raymes51b41a62015-04-24 02:45:0425 const auto& it = registration_flags_.find(pref_name);
26 if (it == registration_flags_.end())
27 return NO_REGISTRATION_FLAGS;
28 return it->second;
29}
30
[email protected]b1de2c72013-02-06 02:45:4731scoped_refptr<PrefStore> PrefRegistry::defaults() {
32 return defaults_.get();
33}
34
35PrefRegistry::const_iterator PrefRegistry::begin() const {
36 return defaults_->begin();
37}
38
39PrefRegistry::const_iterator PrefRegistry::end() const {
40 return defaults_->end();
41}
42
georgesak7da6e9d2014-12-03 01:10:2943void PrefRegistry::SetDefaultPrefValue(const std::string& pref_name,
[email protected]5879cef2013-03-02 17:02:2544 base::Value* value) {
45 DCHECK(value);
[email protected]c02cb8012014-03-14 18:39:5346 const base::Value* current_value = NULL;
47 DCHECK(defaults_->GetValue(pref_name, &current_value))
48 << "Setting default for unregistered pref: " << pref_name;
jdoerrie76cee9c2017-10-06 22:42:4249 DCHECK(value->IsType(current_value->type()))
[email protected]c02cb8012014-03-14 18:39:5350 << "Wrong type for new default: " << pref_name;
[email protected]5879cef2013-03-02 17:02:2551
dcheng5f043bc2016-04-22 19:09:0652 defaults_->ReplaceDefaultValue(pref_name, base::WrapUnique(value));
[email protected]5879cef2013-03-02 17:02:2553}
54
Sam McNally11c6c8a2017-06-08 01:44:1955void PrefRegistry::SetDefaultForeignPrefValue(
56 const std::string& path,
57 std::unique_ptr<base::Value> default_value,
58 uint32_t flags) {
59 auto erased = foreign_pref_keys_.erase(path);
60 DCHECK_EQ(1u, erased);
61 RegisterPreference(path, std::move(default_value), flags);
62}
63
vabr88e507212017-03-29 13:22:2664void PrefRegistry::RegisterPreference(
65 const std::string& path,
66 std::unique_ptr<base::Value> default_value,
67 uint32_t flags) {
jdoerrie76cee9c2017-10-06 22:42:4268 base::Value::Type orig_type = default_value->type();
jdoerriedc72ee942016-12-07 15:43:2869 DCHECK(orig_type != base::Value::Type::NONE &&
70 orig_type != base::Value::Type::BINARY) <<
[email protected]b1de2c72013-02-06 02:45:4771 "invalid preference type: " << orig_type;
72 DCHECK(!defaults_->GetValue(path, NULL)) <<
73 "Trying to register a previously registered pref: " << path;
skyostil46384412016-08-12 14:33:3974 DCHECK(!base::ContainsKey(registration_flags_, path))
75 << "Trying to register a previously registered pref: " << path;
[email protected]b1de2c72013-02-06 02:45:4776
vabr88e507212017-03-29 13:22:2677 defaults_->SetDefaultValue(path, std::move(default_value));
raymes51b41a62015-04-24 02:45:0478 if (flags != NO_REGISTRATION_FLAGS)
79 registration_flags_[path] = flags;
[email protected]b1de2c72013-02-06 02:45:4780}
Sam McNally11c6c8a2017-06-08 01:44:1981
82void PrefRegistry::RegisterForeignPref(const std::string& path) {
83 bool inserted = foreign_pref_keys_.insert(path).second;
84 DCHECK(inserted);
85}