blob: e80d03c46d33e5f33c596396aed0b802ffe4f53c [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;
49 DCHECK(value->IsType(current_value->GetType()))
50 << "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
vabr88e507212017-03-29 13:22:2655void PrefRegistry::RegisterPreference(
56 const std::string& path,
57 std::unique_ptr<base::Value> default_value,
58 uint32_t flags) {
[email protected]b1de2c72013-02-06 02:45:4759 base::Value::Type orig_type = default_value->GetType();
jdoerriedc72ee942016-12-07 15:43:2860 DCHECK(orig_type != base::Value::Type::NONE &&
61 orig_type != base::Value::Type::BINARY) <<
[email protected]b1de2c72013-02-06 02:45:4762 "invalid preference type: " << orig_type;
63 DCHECK(!defaults_->GetValue(path, NULL)) <<
64 "Trying to register a previously registered pref: " << path;
skyostil46384412016-08-12 14:33:3965 DCHECK(!base::ContainsKey(registration_flags_, path))
66 << "Trying to register a previously registered pref: " << path;
[email protected]b1de2c72013-02-06 02:45:4767
vabr88e507212017-03-29 13:22:2668 defaults_->SetDefaultValue(path, std::move(default_value));
raymes51b41a62015-04-24 02:45:0469 if (flags != NO_REGISTRATION_FLAGS)
70 registration_flags_[path] = flags;
[email protected]b1de2c72013-02-06 02:45:4771}