Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: services/preferences/public/cpp/persistent_pref_store_mojo.cc

Issue 2601873002: Add a mojo bridge for PersistentPrefStore. (Closed)
Patch Set: rebase Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "services/preferences/public/cpp/persistent_pref_store_mojo.h"
6
7 #include <utility>
8
9 #include "base/values.h"
10
11 namespace prefs {
12
13 PersistentPrefStoreMojo::PersistentPrefStoreMojo(
14 mojom::PersistentPrefStoreConnectorPtr connector)
15 : connector_(std::move(connector)),
16 pref_store_request_(mojo::MakeRequest(&pref_store_)) {}
17
18 bool PersistentPrefStoreMojo::GetValue(const std::string& key,
19 const base::Value** value) const {
20 return local_prefs_->Get(key, value);
21 }
22
23 std::unique_ptr<base::DictionaryValue> PersistentPrefStoreMojo::GetValues()
24 const {
25 return local_prefs_->CreateDeepCopy();
26 }
27
28 void PersistentPrefStoreMojo::AddObserver(PrefStore::Observer* observer) {
29 observers_.AddObserver(observer);
30 }
31
32 void PersistentPrefStoreMojo::RemoveObserver(PrefStore::Observer* observer) {
33 observers_.RemoveObserver(observer);
34 }
35
36 bool PersistentPrefStoreMojo::HasObservers() const {
37 return observers_.might_have_observers();
38 }
39
40 bool PersistentPrefStoreMojo::IsInitializationComplete() const {
41 return static_cast<bool>(local_prefs_);
42 }
43
44 void PersistentPrefStoreMojo::SetValue(const std::string& key,
45 std::unique_ptr<base::Value> value,
46 uint32_t flags) {
47 base::Value* old_value = nullptr;
48 local_prefs_->Get(key, &old_value);
49 if (!old_value || !value->Equals(old_value)) {
50 local_prefs_->Set(key, std::move(value));
51 ReportValueChanged(key, flags);
52 }
53 }
54
55 void PersistentPrefStoreMojo::RemoveValue(const std::string& key,
56 uint32_t flags) {
57 if (local_prefs_->RemovePath(key, nullptr))
58 ReportValueChanged(key, flags);
59 }
60
61 bool PersistentPrefStoreMojo::GetMutableValue(const std::string& key,
62 base::Value** result) {
63 return local_prefs_->Get(key, result);
64 }
65
66 void PersistentPrefStoreMojo::ReportValueChanged(const std::string& key,
67 uint32_t flags) {
68 const base::Value* local_value = nullptr;
69 local_prefs_->Get(key, &local_value);
70 pref_store_->SetValue(
71 key, local_value ? local_value->CreateDeepCopy() : nullptr, flags);
72 for (PrefStore::Observer& observer : observers_)
73 observer.OnPrefValueChanged(key);
74 }
75
76 void PersistentPrefStoreMojo::SetValueSilently(
77 const std::string& key,
78 std::unique_ptr<base::Value> value,
79 uint32_t flags) {
80 pref_store_->SetValue(key, value->CreateDeepCopy(), flags);
81 local_prefs_->Set(key, std::move(value));
82 }
83
84 bool PersistentPrefStoreMojo::ReadOnly() const {
85 return read_only_;
86 }
87
88 PersistentPrefStore::PrefReadError PersistentPrefStoreMojo::GetReadError()
89 const {
90 return read_error_;
91 }
92
93 PersistentPrefStore::PrefReadError PersistentPrefStoreMojo::ReadPrefs() {
94 PrefReadError read_error = PrefReadError::PREF_READ_ERROR_NONE;
95 bool read_only = false;
96 std::unique_ptr<base::DictionaryValue> local_prefs;
97 mojom::PersistentPrefStorePtr pref_store;
98 if (!connector_->Connect(&read_error, &read_only, &local_prefs, &pref_store))
99 NOTREACHED();
100
101 OnCreateComplete(read_error, read_only, std::move(local_prefs),
102 std::move(pref_store));
103 return read_error_;
104 }
105
106 void PersistentPrefStoreMojo::ReadPrefsAsync(
107 ReadErrorDelegate* error_delegate) {
108 error_delegate_.reset(error_delegate);
109 connector_->Connect(base::Bind(&PersistentPrefStoreMojo::OnCreateComplete,
110 base::Unretained(this)));
111 }
112
113 void PersistentPrefStoreMojo::CommitPendingWrite() {
114 pref_store_->CommitPendingWrite();
115 }
116
117 void PersistentPrefStoreMojo::SchedulePendingLossyWrites() {
118 return pref_store_->SchedulePendingLossyWrites();
119 }
120
121 void PersistentPrefStoreMojo::ClearMutableValues() {
122 return pref_store_->ClearMutableValues();
123 }
124
125 PersistentPrefStoreMojo::~PersistentPrefStoreMojo() {
126 if (!pref_store_)
127 return;
128
129 pref_store_->CommitPendingWrite();
130 }
131
132 void PersistentPrefStoreMojo::OnCreateComplete(
133 PrefReadError read_error,
134 bool read_only,
135 std::unique_ptr<base::DictionaryValue> local_prefs,
136 mojom::PersistentPrefStorePtr pref_store) {
137 connector_.reset();
138 read_error_ = read_error;
139 read_only_ = read_only;
140 local_prefs_ = std::move(local_prefs);
141 mojo::FuseInterface(std::move(pref_store_request_),
142 pref_store.PassInterface());
143 if (error_delegate_ && read_error_ != PREF_READ_ERROR_NONE)
144 error_delegate_->OnError(read_error_);
145 error_delegate_.reset();
146
147 for (PrefStore::Observer& observer : observers_) {
148 observer.OnInitializationCompleted(static_cast<bool>(local_prefs_));
149 }
150 }
151
152 } // namespace prefs
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698