OLD | NEW |
(Empty) | |
| 1 // 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 |
| 5 #include "base/prefs/testing_pref_store.h" |
| 6 |
| 7 #include <utility> |
| 8 |
| 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/values.h" |
| 11 |
| 12 TestingPrefStore::TestingPrefStore() |
| 13 : read_only_(true), |
| 14 read_success_(true), |
| 15 read_error_(PersistentPrefStore::PREF_READ_ERROR_NONE), |
| 16 block_async_read_(false), |
| 17 pending_async_read_(false), |
| 18 init_complete_(false), |
| 19 committed_(true) {} |
| 20 |
| 21 bool TestingPrefStore::GetValue(const std::string& key, |
| 22 const base::Value** value) const { |
| 23 return prefs_.GetValue(key, value); |
| 24 } |
| 25 |
| 26 bool TestingPrefStore::GetMutableValue(const std::string& key, |
| 27 base::Value** value) { |
| 28 return prefs_.GetValue(key, value); |
| 29 } |
| 30 |
| 31 void TestingPrefStore::AddObserver(PrefStore::Observer* observer) { |
| 32 observers_.AddObserver(observer); |
| 33 } |
| 34 |
| 35 void TestingPrefStore::RemoveObserver(PrefStore::Observer* observer) { |
| 36 observers_.RemoveObserver(observer); |
| 37 } |
| 38 |
| 39 bool TestingPrefStore::HasObservers() const { |
| 40 return observers_.might_have_observers(); |
| 41 } |
| 42 |
| 43 bool TestingPrefStore::IsInitializationComplete() const { |
| 44 return init_complete_; |
| 45 } |
| 46 |
| 47 void TestingPrefStore::SetValue(const std::string& key, |
| 48 scoped_ptr<base::Value> value, |
| 49 uint32_t flags) { |
| 50 if (prefs_.SetValue(key, std::move(value))) { |
| 51 committed_ = false; |
| 52 NotifyPrefValueChanged(key); |
| 53 } |
| 54 } |
| 55 |
| 56 void TestingPrefStore::SetValueSilently(const std::string& key, |
| 57 scoped_ptr<base::Value> value, |
| 58 uint32_t flags) { |
| 59 if (prefs_.SetValue(key, std::move(value))) |
| 60 committed_ = false; |
| 61 } |
| 62 |
| 63 void TestingPrefStore::RemoveValue(const std::string& key, uint32_t flags) { |
| 64 if (prefs_.RemoveValue(key)) { |
| 65 committed_ = false; |
| 66 NotifyPrefValueChanged(key); |
| 67 } |
| 68 } |
| 69 |
| 70 bool TestingPrefStore::ReadOnly() const { |
| 71 return read_only_; |
| 72 } |
| 73 |
| 74 PersistentPrefStore::PrefReadError TestingPrefStore::GetReadError() const { |
| 75 return read_error_; |
| 76 } |
| 77 |
| 78 PersistentPrefStore::PrefReadError TestingPrefStore::ReadPrefs() { |
| 79 NotifyInitializationCompleted(); |
| 80 return read_error_; |
| 81 } |
| 82 |
| 83 void TestingPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate) { |
| 84 DCHECK(!pending_async_read_); |
| 85 error_delegate_.reset(error_delegate); |
| 86 if (block_async_read_) |
| 87 pending_async_read_ = true; |
| 88 else |
| 89 NotifyInitializationCompleted(); |
| 90 } |
| 91 |
| 92 void TestingPrefStore::CommitPendingWrite() { committed_ = true; } |
| 93 |
| 94 void TestingPrefStore::SchedulePendingLossyWrites() {} |
| 95 |
| 96 void TestingPrefStore::SetInitializationCompleted() { |
| 97 NotifyInitializationCompleted(); |
| 98 } |
| 99 |
| 100 void TestingPrefStore::NotifyPrefValueChanged(const std::string& key) { |
| 101 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); |
| 102 } |
| 103 |
| 104 void TestingPrefStore::NotifyInitializationCompleted() { |
| 105 DCHECK(!init_complete_); |
| 106 init_complete_ = true; |
| 107 if (read_success_ && read_error_ != PREF_READ_ERROR_NONE && error_delegate_) |
| 108 error_delegate_->OnError(read_error_); |
| 109 FOR_EACH_OBSERVER( |
| 110 Observer, observers_, OnInitializationCompleted(read_success_)); |
| 111 } |
| 112 |
| 113 void TestingPrefStore::ReportValueChanged(const std::string& key, |
| 114 uint32_t flags) { |
| 115 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); |
| 116 } |
| 117 |
| 118 void TestingPrefStore::SetString(const std::string& key, |
| 119 const std::string& value) { |
| 120 SetValue(key, make_scoped_ptr(new base::StringValue(value)), |
| 121 DEFAULT_PREF_WRITE_FLAGS); |
| 122 } |
| 123 |
| 124 void TestingPrefStore::SetInteger(const std::string& key, int value) { |
| 125 SetValue(key, make_scoped_ptr(new base::FundamentalValue(value)), |
| 126 DEFAULT_PREF_WRITE_FLAGS); |
| 127 } |
| 128 |
| 129 void TestingPrefStore::SetBoolean(const std::string& key, bool value) { |
| 130 SetValue(key, make_scoped_ptr(new base::FundamentalValue(value)), |
| 131 DEFAULT_PREF_WRITE_FLAGS); |
| 132 } |
| 133 |
| 134 bool TestingPrefStore::GetString(const std::string& key, |
| 135 std::string* value) const { |
| 136 const base::Value* stored_value; |
| 137 if (!prefs_.GetValue(key, &stored_value) || !stored_value) |
| 138 return false; |
| 139 |
| 140 return stored_value->GetAsString(value); |
| 141 } |
| 142 |
| 143 bool TestingPrefStore::GetInteger(const std::string& key, int* value) const { |
| 144 const base::Value* stored_value; |
| 145 if (!prefs_.GetValue(key, &stored_value) || !stored_value) |
| 146 return false; |
| 147 |
| 148 return stored_value->GetAsInteger(value); |
| 149 } |
| 150 |
| 151 bool TestingPrefStore::GetBoolean(const std::string& key, bool* value) const { |
| 152 const base::Value* stored_value; |
| 153 if (!prefs_.GetValue(key, &stored_value) || !stored_value) |
| 154 return false; |
| 155 |
| 156 return stored_value->GetAsBoolean(value); |
| 157 } |
| 158 |
| 159 void TestingPrefStore::SetBlockAsyncRead(bool block_async_read) { |
| 160 DCHECK(!init_complete_); |
| 161 block_async_read_ = block_async_read; |
| 162 if (pending_async_read_ && !block_async_read_) |
| 163 NotifyInitializationCompleted(); |
| 164 } |
| 165 |
| 166 void TestingPrefStore::set_read_only(bool read_only) { |
| 167 read_only_ = read_only; |
| 168 } |
| 169 |
| 170 void TestingPrefStore::set_read_success(bool read_success) { |
| 171 DCHECK(!init_complete_); |
| 172 read_success_ = read_success; |
| 173 } |
| 174 |
| 175 void TestingPrefStore::set_read_error( |
| 176 PersistentPrefStore::PrefReadError read_error) { |
| 177 DCHECK(!init_complete_); |
| 178 read_error_ = read_error; |
| 179 } |
| 180 |
| 181 TestingPrefStore::~TestingPrefStore() {} |
OLD | NEW |