OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/api/prefs/pref_member.h" | 5 #include "chrome/browser/api/prefs/pref_member.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "chrome/browser/prefs/pref_value_store.h" | 9 #include "chrome/browser/prefs/pref_value_store.h" |
10 #include "chrome/common/chrome_notification_types.h" | 10 #include "chrome/common/chrome_notification_types.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 new ListValue(), | 35 new ListValue(), |
36 PrefService::UNSYNCABLE_PREF); | 36 PrefService::UNSYNCABLE_PREF); |
37 } | 37 } |
38 | 38 |
39 class GetPrefValueCallback | 39 class GetPrefValueCallback |
40 : public base::RefCountedThreadSafe<GetPrefValueCallback> { | 40 : public base::RefCountedThreadSafe<GetPrefValueCallback> { |
41 public: | 41 public: |
42 GetPrefValueCallback() : value_(false) {} | 42 GetPrefValueCallback() : value_(false) {} |
43 | 43 |
44 void Init(const char* pref_name, PrefService* prefs) { | 44 void Init(const char* pref_name, PrefService* prefs) { |
45 pref_.Init(pref_name, prefs, NULL); | 45 pref_.Init(pref_name, prefs); |
46 pref_.MoveToThread( | 46 pref_.MoveToThread( |
47 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)); | 47 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)); |
48 } | 48 } |
49 | 49 |
50 void Destroy() { | 50 void Destroy() { |
51 pref_.Destroy(); | 51 pref_.Destroy(); |
52 } | 52 } |
53 | 53 |
54 bool FetchValue() { | 54 bool FetchValue() { |
55 if (!BrowserThread::PostTask( | 55 if (!BrowserThread::PostTask( |
(...skipping 14 matching lines...) Expand all Loading... |
70 void GetPrefValueOnIOThread() { | 70 void GetPrefValueOnIOThread() { |
71 value_ = pref_.GetValue(); | 71 value_ = pref_.GetValue(); |
72 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 72 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |
73 MessageLoop::QuitClosure()); | 73 MessageLoop::QuitClosure()); |
74 } | 74 } |
75 | 75 |
76 BooleanPrefMember pref_; | 76 BooleanPrefMember pref_; |
77 bool value_; | 77 bool value_; |
78 }; | 78 }; |
79 | 79 |
80 class PrefMemberTestClass : public PrefObserver { | 80 class PrefMemberTestClass { |
81 public: | 81 public: |
82 explicit PrefMemberTestClass(PrefService* prefs) | 82 explicit PrefMemberTestClass(PrefService* prefs) |
83 : observe_cnt_(0), prefs_(prefs) { | 83 : observe_cnt_(0), prefs_(prefs) { |
84 str_.Init(kStringPref, prefs, this); | 84 str_.Init(kStringPref, prefs, |
| 85 base::Bind(&PrefMemberTestClass::OnPreferenceChanged, |
| 86 base::Unretained(this))); |
85 } | 87 } |
86 | 88 |
87 virtual void OnPreferenceChanged(PrefServiceBase* service, | 89 void OnPreferenceChanged(const std::string& pref_name) { |
88 const std::string& pref_name) OVERRIDE { | |
89 EXPECT_EQ(service, prefs_); | |
90 EXPECT_EQ(pref_name, kStringPref); | 90 EXPECT_EQ(pref_name, kStringPref); |
91 EXPECT_EQ(str_.GetValue(), prefs_->GetString(kStringPref)); | 91 EXPECT_EQ(str_.GetValue(), prefs_->GetString(kStringPref)); |
92 ++observe_cnt_; | 92 ++observe_cnt_; |
93 } | 93 } |
94 | 94 |
95 StringPrefMember str_; | 95 StringPrefMember str_; |
96 int observe_cnt_; | 96 int observe_cnt_; |
97 | 97 |
98 private: | 98 private: |
99 PrefService* prefs_; | 99 PrefService* prefs_; |
100 }; | 100 }; |
101 | 101 |
102 } // anonymous namespace | 102 } // anonymous namespace |
103 | 103 |
104 TEST(PrefMemberTest, BasicGetAndSet) { | 104 TEST(PrefMemberTest, BasicGetAndSet) { |
105 TestingPrefService prefs; | 105 TestingPrefService prefs; |
106 RegisterTestPrefs(&prefs); | 106 RegisterTestPrefs(&prefs); |
107 | 107 |
108 // Test bool | 108 // Test bool |
109 BooleanPrefMember boolean; | 109 BooleanPrefMember boolean; |
110 boolean.Init(kBoolPref, &prefs, NULL); | 110 boolean.Init(kBoolPref, &prefs); |
111 | 111 |
112 // Check the defaults | 112 // Check the defaults |
113 EXPECT_FALSE(prefs.GetBoolean(kBoolPref)); | 113 EXPECT_FALSE(prefs.GetBoolean(kBoolPref)); |
114 EXPECT_FALSE(boolean.GetValue()); | 114 EXPECT_FALSE(boolean.GetValue()); |
115 EXPECT_FALSE(*boolean); | 115 EXPECT_FALSE(*boolean); |
116 | 116 |
117 // Try changing through the member variable. | 117 // Try changing through the member variable. |
118 boolean.SetValue(true); | 118 boolean.SetValue(true); |
119 EXPECT_TRUE(boolean.GetValue()); | 119 EXPECT_TRUE(boolean.GetValue()); |
120 EXPECT_TRUE(prefs.GetBoolean(kBoolPref)); | 120 EXPECT_TRUE(prefs.GetBoolean(kBoolPref)); |
121 EXPECT_TRUE(*boolean); | 121 EXPECT_TRUE(*boolean); |
122 | 122 |
123 // Try changing back through the pref. | 123 // Try changing back through the pref. |
124 prefs.SetBoolean(kBoolPref, false); | 124 prefs.SetBoolean(kBoolPref, false); |
125 EXPECT_FALSE(prefs.GetBoolean(kBoolPref)); | 125 EXPECT_FALSE(prefs.GetBoolean(kBoolPref)); |
126 EXPECT_FALSE(boolean.GetValue()); | 126 EXPECT_FALSE(boolean.GetValue()); |
127 EXPECT_FALSE(*boolean); | 127 EXPECT_FALSE(*boolean); |
128 | 128 |
129 // Test int | 129 // Test int |
130 IntegerPrefMember integer; | 130 IntegerPrefMember integer; |
131 integer.Init(kIntPref, &prefs, NULL); | 131 integer.Init(kIntPref, &prefs); |
132 | 132 |
133 // Check the defaults | 133 // Check the defaults |
134 EXPECT_EQ(0, prefs.GetInteger(kIntPref)); | 134 EXPECT_EQ(0, prefs.GetInteger(kIntPref)); |
135 EXPECT_EQ(0, integer.GetValue()); | 135 EXPECT_EQ(0, integer.GetValue()); |
136 EXPECT_EQ(0, *integer); | 136 EXPECT_EQ(0, *integer); |
137 | 137 |
138 // Try changing through the member variable. | 138 // Try changing through the member variable. |
139 integer.SetValue(5); | 139 integer.SetValue(5); |
140 EXPECT_EQ(5, integer.GetValue()); | 140 EXPECT_EQ(5, integer.GetValue()); |
141 EXPECT_EQ(5, prefs.GetInteger(kIntPref)); | 141 EXPECT_EQ(5, prefs.GetInteger(kIntPref)); |
142 EXPECT_EQ(5, *integer); | 142 EXPECT_EQ(5, *integer); |
143 | 143 |
144 // Try changing back through the pref. | 144 // Try changing back through the pref. |
145 prefs.SetInteger(kIntPref, 2); | 145 prefs.SetInteger(kIntPref, 2); |
146 EXPECT_EQ(2, prefs.GetInteger(kIntPref)); | 146 EXPECT_EQ(2, prefs.GetInteger(kIntPref)); |
147 EXPECT_EQ(2, integer.GetValue()); | 147 EXPECT_EQ(2, integer.GetValue()); |
148 EXPECT_EQ(2, *integer); | 148 EXPECT_EQ(2, *integer); |
149 | 149 |
150 // Test double | 150 // Test double |
151 DoublePrefMember double_member; | 151 DoublePrefMember double_member; |
152 double_member.Init(kDoublePref, &prefs, NULL); | 152 double_member.Init(kDoublePref, &prefs); |
153 | 153 |
154 // Check the defaults | 154 // Check the defaults |
155 EXPECT_EQ(0.0, prefs.GetDouble(kDoublePref)); | 155 EXPECT_EQ(0.0, prefs.GetDouble(kDoublePref)); |
156 EXPECT_EQ(0.0, double_member.GetValue()); | 156 EXPECT_EQ(0.0, double_member.GetValue()); |
157 EXPECT_EQ(0.0, *double_member); | 157 EXPECT_EQ(0.0, *double_member); |
158 | 158 |
159 // Try changing through the member variable. | 159 // Try changing through the member variable. |
160 double_member.SetValue(1.0); | 160 double_member.SetValue(1.0); |
161 EXPECT_EQ(1.0, double_member.GetValue()); | 161 EXPECT_EQ(1.0, double_member.GetValue()); |
162 EXPECT_EQ(1.0, prefs.GetDouble(kDoublePref)); | 162 EXPECT_EQ(1.0, prefs.GetDouble(kDoublePref)); |
163 EXPECT_EQ(1.0, *double_member); | 163 EXPECT_EQ(1.0, *double_member); |
164 | 164 |
165 // Try changing back through the pref. | 165 // Try changing back through the pref. |
166 prefs.SetDouble(kDoublePref, 3.0); | 166 prefs.SetDouble(kDoublePref, 3.0); |
167 EXPECT_EQ(3.0, prefs.GetDouble(kDoublePref)); | 167 EXPECT_EQ(3.0, prefs.GetDouble(kDoublePref)); |
168 EXPECT_EQ(3.0, double_member.GetValue()); | 168 EXPECT_EQ(3.0, double_member.GetValue()); |
169 EXPECT_EQ(3.0, *double_member); | 169 EXPECT_EQ(3.0, *double_member); |
170 | 170 |
171 // Test string | 171 // Test string |
172 StringPrefMember string; | 172 StringPrefMember string; |
173 string.Init(kStringPref, &prefs, NULL); | 173 string.Init(kStringPref, &prefs); |
174 | 174 |
175 // Check the defaults | 175 // Check the defaults |
176 EXPECT_EQ("default", prefs.GetString(kStringPref)); | 176 EXPECT_EQ("default", prefs.GetString(kStringPref)); |
177 EXPECT_EQ("default", string.GetValue()); | 177 EXPECT_EQ("default", string.GetValue()); |
178 EXPECT_EQ("default", *string); | 178 EXPECT_EQ("default", *string); |
179 | 179 |
180 // Try changing through the member variable. | 180 // Try changing through the member variable. |
181 string.SetValue("foo"); | 181 string.SetValue("foo"); |
182 EXPECT_EQ("foo", string.GetValue()); | 182 EXPECT_EQ("foo", string.GetValue()); |
183 EXPECT_EQ("foo", prefs.GetString(kStringPref)); | 183 EXPECT_EQ("foo", prefs.GetString(kStringPref)); |
184 EXPECT_EQ("foo", *string); | 184 EXPECT_EQ("foo", *string); |
185 | 185 |
186 // Try changing back through the pref. | 186 // Try changing back through the pref. |
187 prefs.SetString(kStringPref, "bar"); | 187 prefs.SetString(kStringPref, "bar"); |
188 EXPECT_EQ("bar", prefs.GetString(kStringPref)); | 188 EXPECT_EQ("bar", prefs.GetString(kStringPref)); |
189 EXPECT_EQ("bar", string.GetValue()); | 189 EXPECT_EQ("bar", string.GetValue()); |
190 EXPECT_EQ("bar", *string); | 190 EXPECT_EQ("bar", *string); |
191 | 191 |
192 // Test string list | 192 // Test string list |
193 ListValue expected_list; | 193 ListValue expected_list; |
194 std::vector<std::string> expected_vector; | 194 std::vector<std::string> expected_vector; |
195 StringListPrefMember string_list; | 195 StringListPrefMember string_list; |
196 string_list.Init(kStringListPref, &prefs, NULL); | 196 string_list.Init(kStringListPref, &prefs); |
197 | 197 |
198 // Check the defaults | 198 // Check the defaults |
199 EXPECT_TRUE(expected_list.Equals(prefs.GetList(kStringListPref))); | 199 EXPECT_TRUE(expected_list.Equals(prefs.GetList(kStringListPref))); |
200 EXPECT_EQ(expected_vector, string_list.GetValue()); | 200 EXPECT_EQ(expected_vector, string_list.GetValue()); |
201 EXPECT_EQ(expected_vector, *string_list); | 201 EXPECT_EQ(expected_vector, *string_list); |
202 | 202 |
203 // Try changing through the pref member. | 203 // Try changing through the pref member. |
204 expected_list.AppendString("foo"); | 204 expected_list.AppendString("foo"); |
205 expected_vector.push_back("foo"); | 205 expected_vector.push_back("foo"); |
206 string_list.SetValue(expected_vector); | 206 string_list.SetValue(expected_vector); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 EXPECT_FALSE(subtle::PrefMemberVectorStringUpdate(list, &vector)); | 245 EXPECT_FALSE(subtle::PrefMemberVectorStringUpdate(list, &vector)); |
246 EXPECT_EQ(expected_vector, vector); | 246 EXPECT_EQ(expected_vector, vector); |
247 } | 247 } |
248 | 248 |
249 TEST(PrefMemberTest, TwoPrefs) { | 249 TEST(PrefMemberTest, TwoPrefs) { |
250 // Make sure two DoublePrefMembers stay in sync. | 250 // Make sure two DoublePrefMembers stay in sync. |
251 TestingPrefService prefs; | 251 TestingPrefService prefs; |
252 RegisterTestPrefs(&prefs); | 252 RegisterTestPrefs(&prefs); |
253 | 253 |
254 DoublePrefMember pref1; | 254 DoublePrefMember pref1; |
255 pref1.Init(kDoublePref, &prefs, NULL); | 255 pref1.Init(kDoublePref, &prefs); |
256 DoublePrefMember pref2; | 256 DoublePrefMember pref2; |
257 pref2.Init(kDoublePref, &prefs, NULL); | 257 pref2.Init(kDoublePref, &prefs); |
258 | 258 |
259 pref1.SetValue(2.3); | 259 pref1.SetValue(2.3); |
260 EXPECT_EQ(2.3, *pref2); | 260 EXPECT_EQ(2.3, *pref2); |
261 | 261 |
262 pref2.SetValue(3.5); | 262 pref2.SetValue(3.5); |
263 EXPECT_EQ(3.5, *pref1); | 263 EXPECT_EQ(3.5, *pref1); |
264 | 264 |
265 prefs.SetDouble(kDoublePref, 4.2); | 265 prefs.SetDouble(kDoublePref, 4.2); |
266 EXPECT_EQ(4.2, *pref1); | 266 EXPECT_EQ(4.2, *pref1); |
267 EXPECT_EQ(4.2, *pref2); | 267 EXPECT_EQ(4.2, *pref2); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 prefs.SetBoolean(kBoolPref, true); | 316 prefs.SetBoolean(kBoolPref, true); |
317 | 317 |
318 ASSERT_TRUE(callback->FetchValue()); | 318 ASSERT_TRUE(callback->FetchValue()); |
319 EXPECT_TRUE(callback->value()); | 319 EXPECT_TRUE(callback->value()); |
320 | 320 |
321 callback->Destroy(); | 321 callback->Destroy(); |
322 | 322 |
323 ASSERT_TRUE(callback->FetchValue()); | 323 ASSERT_TRUE(callback->FetchValue()); |
324 EXPECT_TRUE(callback->value()); | 324 EXPECT_TRUE(callback->value()); |
325 } | 325 } |
OLD | NEW |