blob: 89709c19a633b029c83d7b55a72f5e8ffc43d0df [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"
raymes51b41a62015-04-24 02:45:0410#include "base/stl_util.h"
[email protected]b1de2c72013-02-06 02:45:4711#include "base/values.h"
brettwf00b9b42016-02-01 22:11:3812#include "components/prefs/default_pref_store.h"
13#include "components/prefs/pref_store.h"
[email protected]b1de2c72013-02-06 02:45:4714
15PrefRegistry::PrefRegistry()
Lei Zhangbeefaef12017-10-17 19:24:0416 : defaults_(base::MakeRefCounted<DefaultPrefStore>()) {}
[email protected]b1de2c72013-02-06 02:45:4717
18PrefRegistry::~PrefRegistry() {
19}
20
avi9ef8bb02015-12-24 05:29:3621uint32_t PrefRegistry::GetRegistrationFlags(
22 const std::string& pref_name) const {
raymes51b41a62015-04-24 02:45:0423 const auto& it = registration_flags_.find(pref_name);
Lei Zhangbeefaef12017-10-17 19:24:0424 return it != registration_flags_.end() ? it->second : NO_REGISTRATION_FLAGS;
raymes51b41a62015-04-24 02:45:0425}
26
[email protected]b1de2c72013-02-06 02:45:4727scoped_refptr<PrefStore> PrefRegistry::defaults() {
28 return defaults_.get();
29}
30
31PrefRegistry::const_iterator PrefRegistry::begin() const {
32 return defaults_->begin();
33}
34
35PrefRegistry::const_iterator PrefRegistry::end() const {
36 return defaults_->end();
37}
38
georgesak7da6e9d2014-12-03 01:10:2939void PrefRegistry::SetDefaultPrefValue(const std::string& pref_name,
Lei Zhangc3d77b62017-10-19 03:30:2840 base::Value value) {
41 const base::Value* current_value = nullptr;
[email protected]c02cb8012014-03-14 18:39:5342 DCHECK(defaults_->GetValue(pref_name, &current_value))
43 << "Setting default for unregistered pref: " << pref_name;
jdoerrief39c2a72017-11-22 10:39:3244 DCHECK(value.type() == current_value->type())
[email protected]c02cb8012014-03-14 18:39:5345 << "Wrong type for new default: " << pref_name;
[email protected]5879cef2013-03-02 17:02:2546
Lei Zhangc3d77b62017-10-19 03:30:2847 defaults_->ReplaceDefaultValue(
Lei Zhang4a9c3562017-10-26 19:46:4448 pref_name, base::Value::ToUniquePtrValue(std::move(value)));
[email protected]5879cef2013-03-02 17:02:2549}
50
Sam McNally11c6c8a2017-06-08 01:44:1951void PrefRegistry::SetDefaultForeignPrefValue(
52 const std::string& path,
53 std::unique_ptr<base::Value> default_value,
54 uint32_t flags) {
55 auto erased = foreign_pref_keys_.erase(path);
56 DCHECK_EQ(1u, erased);
57 RegisterPreference(path, std::move(default_value), flags);
58}
59
vabr88e507212017-03-29 13:22:2660void PrefRegistry::RegisterPreference(
61 const std::string& path,
62 std::unique_ptr<base::Value> default_value,
63 uint32_t flags) {
jdoerrie76cee9c2017-10-06 22:42:4264 base::Value::Type orig_type = default_value->type();
jdoerriedc72ee942016-12-07 15:43:2865 DCHECK(orig_type != base::Value::Type::NONE &&
66 orig_type != base::Value::Type::BINARY) <<
[email protected]b1de2c72013-02-06 02:45:4767 "invalid preference type: " << orig_type;
Ivan Kotenkov75b1c3a2017-10-24 14:47:2468 DCHECK(!defaults_->GetValue(path, nullptr))
69 << "Trying to register a previously registered pref: " << path;
skyostil46384412016-08-12 14:33:3970 DCHECK(!base::ContainsKey(registration_flags_, path))
71 << "Trying to register a previously registered pref: " << path;
[email protected]b1de2c72013-02-06 02:45:4772
Sam McNally450271f2017-10-13 11:47:3473 base::Value* default_value_raw = default_value.get();
vabr88e507212017-03-29 13:22:2674 defaults_->SetDefaultValue(path, std::move(default_value));
raymes51b41a62015-04-24 02:45:0475 if (flags != NO_REGISTRATION_FLAGS)
76 registration_flags_[path] = flags;
Sam McNally450271f2017-10-13 11:47:3477 OnPrefRegistered(path, default_value_raw, flags);
[email protected]b1de2c72013-02-06 02:45:4778}
Sam McNally11c6c8a2017-06-08 01:44:1979
80void PrefRegistry::RegisterForeignPref(const std::string& path) {
81 bool inserted = foreign_pref_keys_.insert(path).second;
82 DCHECK(inserted);
83}
Sam McNally450271f2017-10-13 11:47:3484
85void PrefRegistry::OnPrefRegistered(const std::string& path,
86 base::Value* default_value,
87 uint32_t flags) {}