Chromium Code Reviews| 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 |