OLD | NEW |
---|---|
(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_client.h" | |
6 | |
7 #include <utility> | |
8 | |
9 #include "base/values.h" | |
10 | |
11 namespace prefs { | |
12 | |
13 PersistentPrefStoreClient::PersistentPrefStoreClient( | |
14 mojom::PersistentPrefStoreConnectorPtr connector) | |
15 : connector_(std::move(connector)) {} | |
16 | |
17 void PersistentPrefStoreClient::SetValue(const std::string& key, | |
18 std::unique_ptr<base::Value> value, | |
19 uint32_t flags) { | |
20 base::Value* old_value = nullptr; | |
21 GetMutableValues().Get(key, &old_value); | |
22 if (!old_value || !value->Equals(old_value)) { | |
23 GetMutableValues().Set(key, std::move(value)); | |
24 ReportValueChanged(key, flags); | |
25 } | |
26 } | |
27 | |
28 void PersistentPrefStoreClient::RemoveValue(const std::string& key, | |
29 uint32_t flags) { | |
30 if (GetMutableValues().RemovePath(key, nullptr)) | |
31 ReportValueChanged(key, flags); | |
32 } | |
33 | |
34 bool PersistentPrefStoreClient::GetMutableValue(const std::string& key, | |
35 base::Value** result) { | |
36 return GetMutableValues().Get(key, result); | |
37 } | |
38 | |
39 void PersistentPrefStoreClient::ReportValueChanged(const std::string& key, | |
40 uint32_t flags) { | |
41 const base::Value* local_value = nullptr; | |
42 GetMutableValues().Get(key, &local_value); | |
43 pref_store_->SetValue( | |
44 key, local_value ? local_value->CreateDeepCopy() : nullptr, flags); | |
45 ReportPrefValueChanged(key); | |
46 } | |
47 | |
48 void PersistentPrefStoreClient::SetValueSilently( | |
49 const std::string& key, | |
50 std::unique_ptr<base::Value> value, | |
51 uint32_t flags) { | |
52 pref_store_->SetValue(key, value->CreateDeepCopy(), flags); | |
53 GetMutableValues().Set(key, std::move(value)); | |
54 } | |
55 | |
56 bool PersistentPrefStoreClient::ReadOnly() const { | |
57 return read_only_; | |
58 } | |
59 | |
60 PersistentPrefStore::PrefReadError PersistentPrefStoreClient::GetReadError() | |
61 const { | |
62 return read_error_; | |
63 } | |
64 | |
65 PersistentPrefStore::PrefReadError PersistentPrefStoreClient::ReadPrefs() { | |
66 PrefReadError read_error = PrefReadError::PREF_READ_ERROR_NONE; | |
67 bool read_only = false; | |
68 std::unique_ptr<base::DictionaryValue> local_prefs; | |
69 mojom::PersistentPrefStorePtr pref_store; | |
70 mojom::PrefStoreObserverRequest observer_request; | |
71 if (!connector_->Connect(&read_error, &read_only, &local_prefs, &pref_store, | |
72 &observer_request)) { | |
73 NOTREACHED(); | |
74 } | |
75 | |
76 OnCreateComplete(read_error, read_only, std::move(local_prefs), | |
77 std::move(pref_store), std::move(observer_request)); | |
78 return read_error_; | |
79 } | |
80 | |
81 void PersistentPrefStoreClient::ReadPrefsAsync( | |
82 ReadErrorDelegate* error_delegate) { | |
83 error_delegate_.reset(error_delegate); | |
84 connector_->Connect(base::Bind(&PersistentPrefStoreClient::OnCreateComplete, | |
85 base::Unretained(this))); | |
86 } | |
87 | |
88 void PersistentPrefStoreClient::CommitPendingWrite() { | |
89 pref_store_->CommitPendingWrite(); | |
tibell
2017/03/10 02:18:27
Perhaps DCHECK(pref_store_) here and elsewhere.
Sam McNally
2017/03/10 02:43:25
Done.
| |
90 } | |
91 | |
92 void PersistentPrefStoreClient::SchedulePendingLossyWrites() { | |
93 return pref_store_->SchedulePendingLossyWrites(); | |
94 } | |
95 | |
96 void PersistentPrefStoreClient::ClearMutableValues() { | |
97 return pref_store_->ClearMutableValues(); | |
98 } | |
99 | |
100 PersistentPrefStoreClient::~PersistentPrefStoreClient() { | |
101 if (!pref_store_) | |
102 return; | |
103 | |
104 pref_store_->CommitPendingWrite(); | |
105 } | |
106 | |
107 void PersistentPrefStoreClient::OnCreateComplete( | |
108 PrefReadError read_error, | |
109 bool read_only, | |
110 std::unique_ptr<base::DictionaryValue> cached_prefs, | |
111 mojom::PersistentPrefStorePtr pref_store, | |
112 mojom::PrefStoreObserverRequest observer_request) { | |
113 connector_.reset(); | |
114 read_error_ = read_error; | |
115 read_only_ = read_only; | |
116 pref_store_ = std::move(pref_store); | |
117 if (error_delegate_ && read_error_ != PREF_READ_ERROR_NONE) | |
118 error_delegate_->OnError(read_error_); | |
119 error_delegate_.reset(); | |
120 | |
121 Init(std::move(cached_prefs), true, std::move(observer_request)); | |
122 } | |
123 | |
124 } // namespace prefs | |
OLD | NEW |