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

Side by Side Diff: base/prefs/testing_pref_store.cc

Issue 210063003: Refactor TestingPrefStore to make it useful to some tests of load errors and asynchrony. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments. Created 6 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/prefs/testing_pref_store.h" 5 #include "base/prefs/testing_pref_store.h"
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 9
10 TestingPrefStore::TestingPrefStore() 10 TestingPrefStore::TestingPrefStore()
11 : read_only_(true), 11 : read_only_(true),
12 init_complete_(false) { 12 read_success_(true),
13 } 13 read_error_(PersistentPrefStore::PREF_READ_ERROR_NONE),
14 block_async_read_(false),
15 pending_async_read_(false),
16 init_complete_(false),
17 committed_(true) {}
14 18
15 bool TestingPrefStore::GetValue(const std::string& key, 19 bool TestingPrefStore::GetValue(const std::string& key,
16 const base::Value** value) const { 20 const base::Value** value) const {
17 return prefs_.GetValue(key, value); 21 return prefs_.GetValue(key, value);
18 } 22 }
19 23
20 bool TestingPrefStore::GetMutableValue(const std::string& key, 24 bool TestingPrefStore::GetMutableValue(const std::string& key,
21 base::Value** value) { 25 base::Value** value) {
22 return prefs_.GetValue(key, value); 26 return prefs_.GetValue(key, value);
23 } 27 }
24 28
25 void TestingPrefStore::AddObserver(PrefStore::Observer* observer) { 29 void TestingPrefStore::AddObserver(PrefStore::Observer* observer) {
26 observers_.AddObserver(observer); 30 observers_.AddObserver(observer);
27 } 31 }
28 32
29 void TestingPrefStore::RemoveObserver(PrefStore::Observer* observer) { 33 void TestingPrefStore::RemoveObserver(PrefStore::Observer* observer) {
30 observers_.RemoveObserver(observer); 34 observers_.RemoveObserver(observer);
31 } 35 }
32 36
33 bool TestingPrefStore::HasObservers() const { 37 bool TestingPrefStore::HasObservers() const {
34 return observers_.might_have_observers(); 38 return observers_.might_have_observers();
35 } 39 }
36 40
37 bool TestingPrefStore::IsInitializationComplete() const { 41 bool TestingPrefStore::IsInitializationComplete() const {
38 return init_complete_; 42 return init_complete_;
39 } 43 }
40 44
41 void TestingPrefStore::SetValue(const std::string& key, base::Value* value) { 45 void TestingPrefStore::SetValue(const std::string& key, base::Value* value) {
42 if (prefs_.SetValue(key, value)) 46 if (prefs_.SetValue(key, value)) {
47 committed_ = false;
43 NotifyPrefValueChanged(key); 48 NotifyPrefValueChanged(key);
49 }
44 } 50 }
45 51
46 void TestingPrefStore::SetValueSilently(const std::string& key, 52 void TestingPrefStore::SetValueSilently(const std::string& key,
47 base::Value* value) { 53 base::Value* value) {
48 prefs_.SetValue(key, value); 54 if (prefs_.SetValue(key, value))
55 committed_ = false;
49 } 56 }
50 57
51 void TestingPrefStore::RemoveValue(const std::string& key) { 58 void TestingPrefStore::RemoveValue(const std::string& key) {
52 if (prefs_.RemoveValue(key)) 59 if (prefs_.RemoveValue(key)) {
60 committed_ = false;
53 NotifyPrefValueChanged(key); 61 NotifyPrefValueChanged(key);
62 }
54 } 63 }
55 64
56 bool TestingPrefStore::ReadOnly() const { 65 bool TestingPrefStore::ReadOnly() const {
57 return read_only_; 66 return read_only_;
58 } 67 }
59 68
60 PersistentPrefStore::PrefReadError TestingPrefStore::GetReadError() const { 69 PersistentPrefStore::PrefReadError TestingPrefStore::GetReadError() const {
61 return PersistentPrefStore::PREF_READ_ERROR_NONE; 70 return read_error_;
62 } 71 }
63 72
64 PersistentPrefStore::PrefReadError TestingPrefStore::ReadPrefs() { 73 PersistentPrefStore::PrefReadError TestingPrefStore::ReadPrefs() {
65 NotifyInitializationCompleted(); 74 NotifyInitializationCompleted();
66 return PersistentPrefStore::PREF_READ_ERROR_NONE; 75 return read_error_;
67 } 76 }
68 77
69 void TestingPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate_raw) { 78 void TestingPrefStore::ReadPrefsAsync(ReadErrorDelegate* error_delegate) {
70 scoped_ptr<ReadErrorDelegate> error_delegate(error_delegate_raw); 79 DCHECK(!pending_async_read_);
80 error_delegate_.reset(error_delegate);
81 if (block_async_read_)
82 pending_async_read_ = true;
83 else
84 NotifyInitializationCompleted();
85 }
86
87 void TestingPrefStore::CommitPendingWrite() { committed_ = true; }
88
89 void TestingPrefStore::SetInitializationCompleted() {
71 NotifyInitializationCompleted(); 90 NotifyInitializationCompleted();
72 } 91 }
73 92
74 void TestingPrefStore::SetInitializationCompleted() {
75 init_complete_ = true;
76 NotifyInitializationCompleted();
77 }
78
79 void TestingPrefStore::NotifyPrefValueChanged(const std::string& key) { 93 void TestingPrefStore::NotifyPrefValueChanged(const std::string& key) {
80 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 94 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key));
81 } 95 }
82 96
83 void TestingPrefStore::NotifyInitializationCompleted() { 97 void TestingPrefStore::NotifyInitializationCompleted() {
84 FOR_EACH_OBSERVER(Observer, observers_, OnInitializationCompleted(true)); 98 DCHECK(!init_complete_);
99 init_complete_ = true;
100 if (read_success_ && read_error_ != PREF_READ_ERROR_NONE && error_delegate_)
101 error_delegate_->OnError(read_error_);
102 FOR_EACH_OBSERVER(
103 Observer, observers_, OnInitializationCompleted(read_success_));
85 } 104 }
86 105
87 void TestingPrefStore::ReportValueChanged(const std::string& key) { 106 void TestingPrefStore::ReportValueChanged(const std::string& key) {
88 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key)); 107 FOR_EACH_OBSERVER(Observer, observers_, OnPrefValueChanged(key));
89 } 108 }
90 109
91 void TestingPrefStore::SetString(const std::string& key, 110 void TestingPrefStore::SetString(const std::string& key,
92 const std::string& value) { 111 const std::string& value) {
93 SetValue(key, new base::StringValue(value)); 112 SetValue(key, new base::StringValue(value));
94 } 113 }
(...skipping 24 matching lines...) Expand all
119 } 138 }
120 139
121 bool TestingPrefStore::GetBoolean(const std::string& key, bool* value) const { 140 bool TestingPrefStore::GetBoolean(const std::string& key, bool* value) const {
122 const base::Value* stored_value; 141 const base::Value* stored_value;
123 if (!prefs_.GetValue(key, &stored_value) || !stored_value) 142 if (!prefs_.GetValue(key, &stored_value) || !stored_value)
124 return false; 143 return false;
125 144
126 return stored_value->GetAsBoolean(value); 145 return stored_value->GetAsBoolean(value);
127 } 146 }
128 147
148 void TestingPrefStore::SetBlockAsyncRead(bool block_async_read) {
149 DCHECK(!init_complete_);
150 block_async_read_ = block_async_read;
151 if (pending_async_read_ && !block_async_read_)
152 NotifyInitializationCompleted();
153 }
154
129 void TestingPrefStore::set_read_only(bool read_only) { 155 void TestingPrefStore::set_read_only(bool read_only) {
130 read_only_ = read_only; 156 read_only_ = read_only;
131 } 157 }
132 158
159 void TestingPrefStore::set_read_success(bool read_success) {
160 DCHECK(!init_complete_);
161 read_success_ = read_success;
162 }
163
164 void TestingPrefStore::set_read_error(
165 PersistentPrefStore::PrefReadError read_error) {
166 DCHECK(!init_complete_);
167 read_error_ = read_error;
168 }
169
133 TestingPrefStore::~TestingPrefStore() {} 170 TestingPrefStore::~TestingPrefStore() {}
OLDNEW
« no previous file with comments | « base/prefs/testing_pref_store.h ('k') | components/policy/core/browser/configuration_policy_pref_store_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698