| 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 |