xref: /aosp_15_r20/external/cronet/components/prefs/pref_registry.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_registry.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include <ostream>
8*6777b538SAndroid Build Coastguard Worker #include <utility>
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include "base/check_op.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/containers/contains.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/values.h"
13*6777b538SAndroid Build Coastguard Worker #include "components/prefs/default_pref_store.h"
14*6777b538SAndroid Build Coastguard Worker #include "components/prefs/pref_store.h"
15*6777b538SAndroid Build Coastguard Worker 
PrefRegistry()16*6777b538SAndroid Build Coastguard Worker PrefRegistry::PrefRegistry()
17*6777b538SAndroid Build Coastguard Worker     : defaults_(base::MakeRefCounted<DefaultPrefStore>()) {}
18*6777b538SAndroid Build Coastguard Worker 
~PrefRegistry()19*6777b538SAndroid Build Coastguard Worker PrefRegistry::~PrefRegistry() {
20*6777b538SAndroid Build Coastguard Worker }
21*6777b538SAndroid Build Coastguard Worker 
GetRegistrationFlags(const std::string & pref_name) const22*6777b538SAndroid Build Coastguard Worker uint32_t PrefRegistry::GetRegistrationFlags(
23*6777b538SAndroid Build Coastguard Worker     const std::string& pref_name) const {
24*6777b538SAndroid Build Coastguard Worker   const auto& it = registration_flags_.find(pref_name);
25*6777b538SAndroid Build Coastguard Worker   return it != registration_flags_.end() ? it->second : NO_REGISTRATION_FLAGS;
26*6777b538SAndroid Build Coastguard Worker }
27*6777b538SAndroid Build Coastguard Worker 
defaults()28*6777b538SAndroid Build Coastguard Worker scoped_refptr<PrefStore> PrefRegistry::defaults() {
29*6777b538SAndroid Build Coastguard Worker   return defaults_.get();
30*6777b538SAndroid Build Coastguard Worker }
31*6777b538SAndroid Build Coastguard Worker 
begin() const32*6777b538SAndroid Build Coastguard Worker PrefRegistry::const_iterator PrefRegistry::begin() const {
33*6777b538SAndroid Build Coastguard Worker   return defaults_->begin();
34*6777b538SAndroid Build Coastguard Worker }
35*6777b538SAndroid Build Coastguard Worker 
end() const36*6777b538SAndroid Build Coastguard Worker PrefRegistry::const_iterator PrefRegistry::end() const {
37*6777b538SAndroid Build Coastguard Worker   return defaults_->end();
38*6777b538SAndroid Build Coastguard Worker }
39*6777b538SAndroid Build Coastguard Worker 
SetDefaultPrefValue(const std::string & pref_name,base::Value value)40*6777b538SAndroid Build Coastguard Worker void PrefRegistry::SetDefaultPrefValue(const std::string& pref_name,
41*6777b538SAndroid Build Coastguard Worker                                        base::Value value) {
42*6777b538SAndroid Build Coastguard Worker   const base::Value* current_value = nullptr;
43*6777b538SAndroid Build Coastguard Worker   DCHECK(defaults_->GetValue(pref_name, &current_value))
44*6777b538SAndroid Build Coastguard Worker       << "Setting default for unregistered pref: " << pref_name;
45*6777b538SAndroid Build Coastguard Worker   DCHECK(value.type() == current_value->type())
46*6777b538SAndroid Build Coastguard Worker       << "Wrong type for new default: " << pref_name;
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   defaults_->ReplaceDefaultValue(pref_name, std::move(value));
49*6777b538SAndroid Build Coastguard Worker }
50*6777b538SAndroid Build Coastguard Worker 
SetDefaultForeignPrefValue(const std::string & path,base::Value default_value,uint32_t flags)51*6777b538SAndroid Build Coastguard Worker void PrefRegistry::SetDefaultForeignPrefValue(const std::string& path,
52*6777b538SAndroid Build Coastguard Worker                                               base::Value default_value,
53*6777b538SAndroid Build Coastguard Worker                                               uint32_t flags) {
54*6777b538SAndroid Build Coastguard Worker   auto erased = foreign_pref_keys_.erase(path);
55*6777b538SAndroid Build Coastguard Worker   DCHECK_EQ(1u, erased);
56*6777b538SAndroid Build Coastguard Worker   RegisterPreference(path, std::move(default_value), flags);
57*6777b538SAndroid Build Coastguard Worker }
58*6777b538SAndroid Build Coastguard Worker 
RegisterPreference(const std::string & path,base::Value default_value,uint32_t flags)59*6777b538SAndroid Build Coastguard Worker void PrefRegistry::RegisterPreference(const std::string& path,
60*6777b538SAndroid Build Coastguard Worker                                       base::Value default_value,
61*6777b538SAndroid Build Coastguard Worker                                       uint32_t flags) {
62*6777b538SAndroid Build Coastguard Worker   base::Value::Type orig_type = default_value.type();
63*6777b538SAndroid Build Coastguard Worker   DCHECK(orig_type != base::Value::Type::NONE &&
64*6777b538SAndroid Build Coastguard Worker          orig_type != base::Value::Type::BINARY) <<
65*6777b538SAndroid Build Coastguard Worker          "invalid preference type: " << orig_type;
66*6777b538SAndroid Build Coastguard Worker   DCHECK(!defaults_->GetValue(path, nullptr))
67*6777b538SAndroid Build Coastguard Worker       << "Trying to register a previously registered pref: " << path;
68*6777b538SAndroid Build Coastguard Worker   DCHECK(!base::Contains(registration_flags_, path))
69*6777b538SAndroid Build Coastguard Worker       << "Trying to register a previously registered pref: " << path;
70*6777b538SAndroid Build Coastguard Worker 
71*6777b538SAndroid Build Coastguard Worker   defaults_->SetDefaultValue(path, std::move(default_value));
72*6777b538SAndroid Build Coastguard Worker   if (flags != NO_REGISTRATION_FLAGS)
73*6777b538SAndroid Build Coastguard Worker     registration_flags_[path] = flags;
74*6777b538SAndroid Build Coastguard Worker 
75*6777b538SAndroid Build Coastguard Worker   OnPrefRegistered(path, flags);
76*6777b538SAndroid Build Coastguard Worker }
77*6777b538SAndroid Build Coastguard Worker 
RegisterForeignPref(const std::string & path)78*6777b538SAndroid Build Coastguard Worker void PrefRegistry::RegisterForeignPref(const std::string& path) {
79*6777b538SAndroid Build Coastguard Worker   bool inserted = foreign_pref_keys_.insert(path).second;
80*6777b538SAndroid Build Coastguard Worker   DCHECK(inserted);
81*6777b538SAndroid Build Coastguard Worker }
82*6777b538SAndroid Build Coastguard Worker 
OnPrefRegistered(const std::string & path,uint32_t flags)83*6777b538SAndroid Build Coastguard Worker void PrefRegistry::OnPrefRegistered(const std::string& path,
84*6777b538SAndroid Build Coastguard Worker                                     uint32_t flags) {}
85