OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <set> |
| 6 #include <string> |
| 7 |
5 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
6 #include "base/values.h" | 9 #include "base/values.h" |
7 #include "chrome/browser/browser_thread.h" | 10 #include "chrome/browser/browser_thread.h" |
8 #include "chrome/browser/policy/configuration_policy_pref_store.h" | 11 #include "chrome/browser/policy/configuration_policy_pref_store.h" |
9 #include "chrome/browser/prefs/dummy_pref_store.h" | 12 #include "chrome/browser/prefs/pref_notifier.h" |
10 #include "chrome/browser/prefs/pref_value_store.h" | 13 #include "chrome/browser/prefs/pref_value_store.h" |
| 14 #include "chrome/browser/prefs/testing_pref_store.h" |
11 #include "chrome/common/pref_names.h" | 15 #include "chrome/common/pref_names.h" |
12 #include "chrome/test/testing_pref_value_store.h" | |
13 #include "testing/gmock/include/gmock/gmock.h" | 16 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
15 | 18 |
16 using testing::_; | 19 using testing::_; |
| 20 using testing::AnyNumber; |
17 using testing::Mock; | 21 using testing::Mock; |
| 22 using testing::Invoke; |
18 | 23 |
19 namespace { | 24 namespace { |
20 | 25 |
21 class MockPolicyRefreshCallback { | 26 // Records preference changes. |
| 27 class PrefChangeRecorder { |
22 public: | 28 public: |
23 MockPolicyRefreshCallback() {} | 29 void Record(const std::string& pref_name) { |
24 MOCK_METHOD1(DoCallback, void(const std::vector<std::string>)); | 30 changed_prefs_.insert(pref_name); |
| 31 } |
| 32 |
| 33 void Clear() { |
| 34 changed_prefs_.clear(); |
| 35 } |
| 36 |
| 37 const std::set<std::string>& changed_prefs() { return changed_prefs_; } |
| 38 |
| 39 private: |
| 40 std::set<std::string> changed_prefs_; |
| 41 }; |
| 42 |
| 43 // Allows to capture pref notifications through gmock. |
| 44 class MockPrefNotifier : public PrefNotifier { |
| 45 public: |
| 46 // It's OK to pass a NULL PrefService, since it's only used as notification |
| 47 // source. |
| 48 MockPrefNotifier() |
| 49 : PrefNotifier(NULL) {} |
| 50 |
| 51 MOCK_METHOD1(OnPreferenceChanged, void(const std::string&)); |
| 52 MOCK_METHOD0(OnIntializationCompleted, void()); |
25 }; | 53 }; |
26 | 54 |
27 } // namespace | 55 } // namespace |
28 | 56 |
29 // Names of the preferences used in this test program. | 57 // Names of the preferences used in this test program. |
30 namespace prefs { | 58 namespace prefs { |
31 const char kMissingPref[] = "this.pref.does_not_exist"; | 59 const char kMissingPref[] = "this.pref.does_not_exist"; |
32 const char kRecommendedPref[] = "this.pref.recommended_value_only"; | 60 const char kRecommendedPref[] = "this.pref.recommended_value_only"; |
33 const char kSampleDict[] = "sample.dict"; | 61 const char kSampleDict[] = "sample.dict"; |
34 const char kSampleList[] = "sample.list"; | 62 const char kSampleList[] = "sample.list"; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 virtual void SetUp() { | 113 virtual void SetUp() { |
86 // Create dummy user preferences. | 114 // Create dummy user preferences. |
87 managed_platform_prefs_= CreateManagedPlatformPrefs(); | 115 managed_platform_prefs_= CreateManagedPlatformPrefs(); |
88 device_management_prefs_ = CreateDeviceManagementPrefs(); | 116 device_management_prefs_ = CreateDeviceManagementPrefs(); |
89 extension_prefs_ = CreateExtensionPrefs(); | 117 extension_prefs_ = CreateExtensionPrefs(); |
90 command_line_prefs_ = CreateCommandLinePrefs(); | 118 command_line_prefs_ = CreateCommandLinePrefs(); |
91 user_prefs_ = CreateUserPrefs(); | 119 user_prefs_ = CreateUserPrefs(); |
92 recommended_prefs_ = CreateRecommendedPrefs(); | 120 recommended_prefs_ = CreateRecommendedPrefs(); |
93 default_prefs_ = CreateDefaultPrefs(); | 121 default_prefs_ = CreateDefaultPrefs(); |
94 | 122 |
95 std::sort(expected_differing_paths_.begin(), | 123 // Create TestingPrefStores. |
96 expected_differing_paths_.end()); | 124 managed_platform_pref_store_ = new TestingPrefStore(); |
97 | |
98 // Create |DummyPrefStore|s. | |
99 managed_platform_pref_store_ = new DummyPrefStore(); | |
100 managed_platform_pref_store_->set_prefs(managed_platform_prefs_); | 125 managed_platform_pref_store_->set_prefs(managed_platform_prefs_); |
101 device_management_pref_store_ = new DummyPrefStore(); | 126 device_management_pref_store_ = new TestingPrefStore(); |
102 device_management_pref_store_->set_prefs(device_management_prefs_); | 127 device_management_pref_store_->set_prefs(device_management_prefs_); |
103 extension_pref_store_ = new DummyPrefStore(); | 128 extension_pref_store_ = new TestingPrefStore(); |
104 extension_pref_store_->set_prefs(extension_prefs_); | 129 extension_pref_store_->set_prefs(extension_prefs_); |
105 command_line_pref_store_ = new DummyPrefStore(); | 130 command_line_pref_store_ = new TestingPrefStore(); |
106 command_line_pref_store_->set_prefs(command_line_prefs_); | 131 command_line_pref_store_->set_prefs(command_line_prefs_); |
107 user_pref_store_ = new DummyPrefStore(); | 132 user_pref_store_ = new TestingPrefStore(); |
108 user_pref_store_->set_read_only(false); | 133 user_pref_store_->set_read_only(false); |
109 user_pref_store_->set_prefs(user_prefs_); | 134 user_pref_store_->set_prefs(user_prefs_); |
110 recommended_pref_store_ = new DummyPrefStore(); | 135 recommended_pref_store_ = new TestingPrefStore(); |
111 recommended_pref_store_->set_prefs(recommended_prefs_); | 136 recommended_pref_store_->set_prefs(recommended_prefs_); |
112 default_pref_store_ = new DummyPrefStore(); | 137 default_pref_store_ = new TestingPrefStore(); |
113 default_pref_store_->set_prefs(default_prefs_); | 138 default_pref_store_->set_prefs(default_prefs_); |
114 | 139 |
115 // Create a new pref-value-store. | 140 // Create a new pref-value-store. |
116 pref_value_store_ = new TestingPrefValueStore( | 141 pref_value_store_ = new PrefValueStore( |
117 managed_platform_pref_store_, | 142 managed_platform_pref_store_, |
118 device_management_pref_store_, | 143 device_management_pref_store_, |
119 extension_pref_store_, | 144 extension_pref_store_, |
120 command_line_pref_store_, | 145 command_line_pref_store_, |
121 user_pref_store_, | 146 user_pref_store_, |
122 recommended_pref_store_, | 147 recommended_pref_store_, |
123 default_pref_store_); | 148 default_pref_store_, |
| 149 &pref_notifier_, |
| 150 NULL); |
124 | 151 |
125 // Register prefs with the PrefValueStore. | 152 // Register prefs with the PrefValueStore. |
126 pref_value_store_->RegisterPreferenceType(prefs::kApplicationLocale, | 153 pref_value_store_->RegisterPreferenceType(prefs::kApplicationLocale, |
127 Value::TYPE_STRING); | 154 Value::TYPE_STRING); |
128 pref_value_store_->RegisterPreferenceType(prefs::kCurrentThemeID, | 155 pref_value_store_->RegisterPreferenceType(prefs::kCurrentThemeID, |
129 Value::TYPE_STRING); | 156 Value::TYPE_STRING); |
130 pref_value_store_->RegisterPreferenceType( | 157 pref_value_store_->RegisterPreferenceType( |
131 prefs::kDefaultSearchProviderName, | 158 prefs::kDefaultSearchProviderName, |
132 Value::TYPE_STRING); | 159 Value::TYPE_STRING); |
133 pref_value_store_->RegisterPreferenceType(prefs::kDeleteCache, | 160 pref_value_store_->RegisterPreferenceType(prefs::kDeleteCache, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 user_pref::kSearchProviderNameValue); | 193 user_pref::kSearchProviderNameValue); |
167 user_prefs->SetString(prefs::kHomePage, user_pref::kHomepageValue); | 194 user_prefs->SetString(prefs::kHomePage, user_pref::kHomepageValue); |
168 return user_prefs; | 195 return user_prefs; |
169 } | 196 } |
170 | 197 |
171 DictionaryValue* CreateManagedPlatformPrefs() { | 198 DictionaryValue* CreateManagedPlatformPrefs() { |
172 DictionaryValue* managed_platform_prefs = new DictionaryValue(); | 199 DictionaryValue* managed_platform_prefs = new DictionaryValue(); |
173 managed_platform_prefs->SetString( | 200 managed_platform_prefs->SetString( |
174 prefs::kHomePage, | 201 prefs::kHomePage, |
175 managed_platform_pref::kHomepageValue); | 202 managed_platform_pref::kHomepageValue); |
176 expected_differing_paths_.push_back(prefs::kHomePage); | 203 expected_differing_paths_.insert(prefs::kHomePage); |
177 return managed_platform_prefs; | 204 return managed_platform_prefs; |
178 } | 205 } |
179 | 206 |
180 DictionaryValue* CreateDeviceManagementPrefs() { | 207 DictionaryValue* CreateDeviceManagementPrefs() { |
181 DictionaryValue* device_management_prefs = new DictionaryValue(); | 208 DictionaryValue* device_management_prefs = new DictionaryValue(); |
182 device_management_prefs->SetString( | 209 device_management_prefs->SetString( |
183 prefs::kDefaultSearchProviderName, | 210 prefs::kDefaultSearchProviderName, |
184 device_management_pref::kSearchProviderNameValue); | 211 device_management_pref::kSearchProviderNameValue); |
185 expected_differing_paths_.push_back("default_search_provider"); | 212 expected_differing_paths_.insert("default_search_provider"); |
186 expected_differing_paths_.push_back(prefs::kDefaultSearchProviderName); | 213 expected_differing_paths_.insert(prefs::kDefaultSearchProviderName); |
187 device_management_prefs->SetString(prefs::kHomePage, | 214 device_management_prefs->SetString(prefs::kHomePage, |
188 device_management_pref::kHomepageValue); | 215 device_management_pref::kHomepageValue); |
189 return device_management_prefs; | 216 return device_management_prefs; |
190 } | 217 } |
191 | 218 |
192 DictionaryValue* CreateExtensionPrefs() { | 219 DictionaryValue* CreateExtensionPrefs() { |
193 DictionaryValue* extension_prefs = new DictionaryValue(); | 220 DictionaryValue* extension_prefs = new DictionaryValue(); |
194 extension_prefs->SetString(prefs::kCurrentThemeID, | 221 extension_prefs->SetString(prefs::kCurrentThemeID, |
195 extension_pref::kCurrentThemeIDValue); | 222 extension_pref::kCurrentThemeIDValue); |
196 extension_prefs->SetString(prefs::kHomePage, | 223 extension_prefs->SetString(prefs::kHomePage, |
(...skipping 18 matching lines...) Expand all Loading... |
215 } | 242 } |
216 | 243 |
217 DictionaryValue* CreateRecommendedPrefs() { | 244 DictionaryValue* CreateRecommendedPrefs() { |
218 DictionaryValue* recommended_prefs = new DictionaryValue(); | 245 DictionaryValue* recommended_prefs = new DictionaryValue(); |
219 recommended_prefs->SetInteger(prefs::kStabilityLaunchCount, | 246 recommended_prefs->SetInteger(prefs::kStabilityLaunchCount, |
220 recommended_pref::kStabilityLaunchCountValue); | 247 recommended_pref::kStabilityLaunchCountValue); |
221 recommended_prefs->SetBoolean( | 248 recommended_prefs->SetBoolean( |
222 prefs::kRecommendedPref, | 249 prefs::kRecommendedPref, |
223 recommended_pref::kRecommendedPrefValue); | 250 recommended_pref::kRecommendedPrefValue); |
224 | 251 |
225 // Expected differing paths must be added in lexicographic order | 252 expected_differing_paths_.insert("this"); |
226 // to work properly | 253 expected_differing_paths_.insert("this.pref"); |
227 expected_differing_paths_.push_back("this"); | 254 expected_differing_paths_.insert(prefs::kRecommendedPref); |
228 expected_differing_paths_.push_back("this.pref"); | 255 expected_differing_paths_.insert("user_experience_metrics"); |
229 expected_differing_paths_.push_back(prefs::kRecommendedPref); | 256 expected_differing_paths_.insert("user_experience_metrics.stability"); |
230 expected_differing_paths_.push_back("user_experience_metrics"); | 257 expected_differing_paths_.insert(prefs::kStabilityLaunchCount); |
231 expected_differing_paths_.push_back("user_experience_metrics.stability"); | |
232 expected_differing_paths_.push_back(prefs::kStabilityLaunchCount); | |
233 return recommended_prefs; | 258 return recommended_prefs; |
234 } | 259 } |
235 | 260 |
236 DictionaryValue* CreateDefaultPrefs() { | 261 DictionaryValue* CreateDefaultPrefs() { |
237 DictionaryValue* default_prefs = new DictionaryValue(); | 262 DictionaryValue* default_prefs = new DictionaryValue(); |
238 default_prefs->SetInteger(prefs::kDefaultPref, default_pref::kDefaultValue); | 263 default_prefs->SetInteger(prefs::kDefaultPref, default_pref::kDefaultValue); |
239 return default_prefs; | 264 return default_prefs; |
240 } | 265 } |
241 | 266 |
242 DictionaryValue* CreateSampleDictValue() { | 267 DictionaryValue* CreateSampleDictValue() { |
(...skipping 11 matching lines...) Expand all Loading... |
254 sample_list->Set(2, Value::CreateIntegerValue(2)); | 279 sample_list->Set(2, Value::CreateIntegerValue(2)); |
255 sample_list->Set(3, Value::CreateIntegerValue(3)); | 280 sample_list->Set(3, Value::CreateIntegerValue(3)); |
256 return sample_list; | 281 return sample_list; |
257 } | 282 } |
258 | 283 |
259 virtual void TearDown() { | 284 virtual void TearDown() { |
260 loop_.RunAllPending(); | 285 loop_.RunAllPending(); |
261 } | 286 } |
262 | 287 |
263 MessageLoop loop_; | 288 MessageLoop loop_; |
264 | 289 MockPrefNotifier pref_notifier_; |
265 scoped_refptr<TestingPrefValueStore> pref_value_store_; | 290 scoped_refptr<PrefValueStore> pref_value_store_; |
266 | 291 |
267 // |PrefStore|s are owned by the |PrefValueStore|. | 292 // |PrefStore|s are owned by the |PrefValueStore|. |
268 DummyPrefStore* managed_platform_pref_store_; | 293 TestingPrefStore* managed_platform_pref_store_; |
269 DummyPrefStore* device_management_pref_store_; | 294 TestingPrefStore* device_management_pref_store_; |
270 DummyPrefStore* extension_pref_store_; | 295 TestingPrefStore* extension_pref_store_; |
271 DummyPrefStore* command_line_pref_store_; | 296 TestingPrefStore* command_line_pref_store_; |
272 DummyPrefStore* user_pref_store_; | 297 TestingPrefStore* user_pref_store_; |
273 DummyPrefStore* recommended_pref_store_; | 298 TestingPrefStore* recommended_pref_store_; |
274 DummyPrefStore* default_pref_store_; | 299 TestingPrefStore* default_pref_store_; |
275 | 300 |
276 // A vector of the preferences paths in the managed and recommended | 301 // A vector of the preferences paths in the managed and recommended |
277 // PrefStores that are set at the beginning of a test. Can be modified | 302 // PrefStores that are set at the beginning of a test. Can be modified |
278 // by the test to track changes that it makes to the preferences | 303 // by the test to track changes that it makes to the preferences |
279 // stored in the managed and recommended PrefStores. | 304 // stored in the managed and recommended PrefStores. |
280 std::vector<std::string> expected_differing_paths_; | 305 std::set<std::string> expected_differing_paths_; |
281 | 306 |
282 // Preferences are owned by the individual |DummyPrefStores|. | 307 // Preferences are owned by the individual |TestingPrefStores|. |
283 DictionaryValue* managed_platform_prefs_; | 308 DictionaryValue* managed_platform_prefs_; |
284 DictionaryValue* device_management_prefs_; | 309 DictionaryValue* device_management_prefs_; |
285 DictionaryValue* extension_prefs_; | 310 DictionaryValue* extension_prefs_; |
286 DictionaryValue* command_line_prefs_; | 311 DictionaryValue* command_line_prefs_; |
287 DictionaryValue* user_prefs_; | 312 DictionaryValue* user_prefs_; |
288 DictionaryValue* recommended_prefs_; | 313 DictionaryValue* recommended_prefs_; |
289 DictionaryValue* default_prefs_; | 314 DictionaryValue* default_prefs_; |
290 | 315 |
291 private: | 316 private: |
292 scoped_ptr<BrowserThread> ui_thread_; | 317 scoped_ptr<BrowserThread> ui_thread_; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 // User preference | 445 // User preference |
421 EXPECT_TRUE(pref_value_store_->HasPrefPath(prefs::kDeleteCache)); | 446 EXPECT_TRUE(pref_value_store_->HasPrefPath(prefs::kDeleteCache)); |
422 // Recommended preference | 447 // Recommended preference |
423 EXPECT_TRUE(pref_value_store_->HasPrefPath(prefs::kRecommendedPref)); | 448 EXPECT_TRUE(pref_value_store_->HasPrefPath(prefs::kRecommendedPref)); |
424 // Default preference | 449 // Default preference |
425 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kDefaultPref)); | 450 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kDefaultPref)); |
426 // Unknown preference | 451 // Unknown preference |
427 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kMissingPref)); | 452 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kMissingPref)); |
428 } | 453 } |
429 | 454 |
430 TEST_F(PrefValueStoreTest, PrefHasChanged) { | 455 TEST_F(PrefValueStoreTest, PrefChanges) { |
431 // Setup. | 456 // Setup. |
432 const char managed_platform_pref_path[] = "managed_platform_pref"; | 457 const char managed_platform_pref_path[] = "managed_platform_pref"; |
433 pref_value_store_->RegisterPreferenceType(managed_platform_pref_path, | 458 pref_value_store_->RegisterPreferenceType(managed_platform_pref_path, |
434 Value::TYPE_STRING); | 459 Value::TYPE_STRING); |
435 managed_platform_pref_store_->prefs()->SetString(managed_platform_pref_path, | 460 managed_platform_pref_store_->prefs()->SetString(managed_platform_pref_path, |
436 "managed value"); | 461 "managed value"); |
437 const char user_pref_path[] = "user_pref"; | 462 const char user_pref_path[] = "user_pref"; |
438 pref_value_store_->RegisterPreferenceType(user_pref_path, Value::TYPE_STRING); | 463 pref_value_store_->RegisterPreferenceType(user_pref_path, Value::TYPE_STRING); |
439 user_pref_store_->prefs()->SetString(user_pref_path, "user value"); | 464 user_pref_store_->prefs()->SetString(user_pref_path, "user value"); |
440 const char default_pref_path[] = "default_pref"; | 465 const char default_pref_path[] = "default_pref"; |
441 pref_value_store_->RegisterPreferenceType(default_pref_path, | 466 pref_value_store_->RegisterPreferenceType(default_pref_path, |
442 Value::TYPE_STRING); | 467 Value::TYPE_STRING); |
443 default_pref_store_->prefs()->SetString(default_pref_path, "default value"); | 468 default_pref_store_->prefs()->SetString(default_pref_path, "default value"); |
444 | 469 |
445 // Check pref controlled by highest-priority store. | 470 // Check pref controlled by highest-priority store. |
446 EXPECT_TRUE(pref_value_store_->PrefHasChanged(managed_platform_pref_path, | 471 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(managed_platform_pref_path)); |
447 static_cast<PrefNotifier::PrefStoreType>(0))); | 472 managed_platform_pref_store_->NotifyPrefValueChanged( |
448 EXPECT_FALSE(pref_value_store_->PrefHasChanged(managed_platform_pref_path, | 473 managed_platform_pref_path); |
449 PrefNotifier::USER_STORE)); | 474 Mock::VerifyAndClearExpectations(&pref_notifier_); |
| 475 |
| 476 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0); |
| 477 user_pref_store_->NotifyPrefValueChanged(managed_platform_pref_path); |
| 478 Mock::VerifyAndClearExpectations(&pref_notifier_); |
450 | 479 |
451 // Check pref controlled by user store. | 480 // Check pref controlled by user store. |
452 EXPECT_TRUE(pref_value_store_->PrefHasChanged(user_pref_path, | 481 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(user_pref_path)); |
453 static_cast<PrefNotifier::PrefStoreType>(0))); | 482 managed_platform_pref_store_->NotifyPrefValueChanged(user_pref_path); |
454 EXPECT_TRUE(pref_value_store_->PrefHasChanged(user_pref_path, | 483 Mock::VerifyAndClearExpectations(&pref_notifier_); |
455 PrefNotifier::USER_STORE)); | 484 |
456 EXPECT_FALSE(pref_value_store_->PrefHasChanged(user_pref_path, | 485 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(user_pref_path)); |
457 PrefNotifier::PREF_STORE_TYPE_MAX)); | 486 user_pref_store_->NotifyPrefValueChanged(user_pref_path); |
| 487 Mock::VerifyAndClearExpectations(&pref_notifier_); |
| 488 |
| 489 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0); |
| 490 default_pref_store_->NotifyPrefValueChanged(user_pref_path); |
| 491 Mock::VerifyAndClearExpectations(&pref_notifier_); |
458 | 492 |
459 // Check pref controlled by default-pref store. | 493 // Check pref controlled by default-pref store. |
460 EXPECT_TRUE(pref_value_store_->PrefHasChanged(default_pref_path, | 494 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(default_pref_path)); |
461 PrefNotifier::USER_STORE)); | 495 user_pref_store_->NotifyPrefValueChanged(default_pref_path); |
462 EXPECT_TRUE(pref_value_store_->PrefHasChanged(default_pref_path, | 496 Mock::VerifyAndClearExpectations(&pref_notifier_); |
463 PrefNotifier::DEFAULT_STORE)); | 497 |
| 498 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(default_pref_path)); |
| 499 default_pref_store_->NotifyPrefValueChanged(default_pref_path); |
| 500 Mock::VerifyAndClearExpectations(&pref_notifier_); |
464 } | 501 } |
465 | 502 |
466 TEST_F(PrefValueStoreTest, ReadPrefs) { | 503 TEST_F(PrefValueStoreTest, ReadPrefs) { |
467 pref_value_store_->ReadPrefs(); | 504 pref_value_store_->ReadPrefs(); |
468 // The ReadPrefs method of the |DummyPrefStore| deletes the |pref_store|s | 505 // The ReadPrefs method of the |TestingPrefStore| deletes the |pref_store|s |
469 // internal dictionary and creates a new empty dictionary. Hence this | 506 // internal dictionary and creates a new empty dictionary. Hence this |
470 // dictionary does not contain any of the preloaded preferences. | 507 // dictionary does not contain any of the preloaded preferences. |
471 // This shows that the ReadPrefs method of the |DummyPrefStore| was called. | 508 // This shows that the ReadPrefs method of the |TestingPrefStore| was called. |
472 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kDeleteCache)); | 509 EXPECT_FALSE(pref_value_store_->HasPrefPath(prefs::kDeleteCache)); |
473 } | 510 } |
474 | 511 |
475 TEST_F(PrefValueStoreTest, WritePrefs) { | 512 TEST_F(PrefValueStoreTest, WritePrefs) { |
476 user_pref_store_->set_prefs_written(false); | 513 user_pref_store_->set_prefs_written(false); |
477 pref_value_store_->WritePrefs(); | 514 pref_value_store_->WritePrefs(); |
478 ASSERT_TRUE(user_pref_store_->get_prefs_written()); | 515 ASSERT_TRUE(user_pref_store_->get_prefs_written()); |
479 } | 516 } |
480 | 517 |
481 TEST_F(PrefValueStoreTest, SetUserPrefValue) { | 518 TEST_F(PrefValueStoreTest, SetUserPrefValue) { |
482 Value* new_value = NULL; | 519 Value* new_value = NULL; |
483 Value* actual_value = NULL; | 520 Value* actual_value = NULL; |
484 | 521 |
485 // Test that managed platform values can not be set. | 522 // Test that managed platform values can not be set. |
| 523 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(0); |
486 ASSERT_TRUE(pref_value_store_->PrefValueInManagedPlatformStore( | 524 ASSERT_TRUE(pref_value_store_->PrefValueInManagedPlatformStore( |
487 prefs::kHomePage)); | 525 prefs::kHomePage)); |
488 // The Ownership is tranfered to |PrefValueStore|. | 526 // The ownership is transfered to PrefValueStore. |
489 new_value = Value::CreateStringValue("http://www.youtube.com"); | 527 new_value = Value::CreateStringValue("http://www.youtube.com"); |
490 pref_value_store_->SetUserPrefValue(prefs::kHomePage, new_value); | 528 pref_value_store_->SetUserPrefValue(prefs::kHomePage, new_value); |
| 529 Mock::VerifyAndClearExpectations(&pref_notifier_); |
491 | 530 |
492 ASSERT_TRUE(pref_value_store_->GetValue(prefs::kHomePage, &actual_value)); | 531 ASSERT_TRUE(pref_value_store_->GetValue(prefs::kHomePage, &actual_value)); |
493 std::string value_str; | 532 std::string value_str; |
494 actual_value->GetAsString(&value_str); | 533 actual_value->GetAsString(&value_str); |
495 ASSERT_EQ(managed_platform_pref::kHomepageValue, value_str); | 534 ASSERT_EQ(managed_platform_pref::kHomepageValue, value_str); |
496 | 535 |
497 // User preferences values can be set | 536 // User preferences values can be set. |
498 ASSERT_FALSE(pref_value_store_->PrefValueInManagedPlatformStore( | 537 ASSERT_FALSE(pref_value_store_->PrefValueInManagedPlatformStore( |
499 prefs::kStabilityLaunchCount)); | 538 prefs::kStabilityLaunchCount)); |
500 actual_value = NULL; | 539 actual_value = NULL; |
501 pref_value_store_->GetValue(prefs::kStabilityLaunchCount, &actual_value); | 540 pref_value_store_->GetValue(prefs::kStabilityLaunchCount, &actual_value); |
502 int int_value; | 541 int int_value; |
503 EXPECT_TRUE(actual_value->GetAsInteger(&int_value)); | 542 EXPECT_TRUE(actual_value->GetAsInteger(&int_value)); |
504 EXPECT_EQ(user_pref::kStabilityLaunchCountValue, int_value); | 543 EXPECT_EQ(user_pref::kStabilityLaunchCountValue, int_value); |
505 | 544 |
| 545 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1); |
506 new_value = Value::CreateIntegerValue(1); | 546 new_value = Value::CreateIntegerValue(1); |
507 pref_value_store_->SetUserPrefValue(prefs::kStabilityLaunchCount, new_value); | 547 pref_value_store_->SetUserPrefValue(prefs::kStabilityLaunchCount, new_value); |
508 actual_value = NULL; | 548 actual_value = NULL; |
509 pref_value_store_->GetValue(prefs::kStabilityLaunchCount, &actual_value); | 549 pref_value_store_->GetValue(prefs::kStabilityLaunchCount, &actual_value); |
510 EXPECT_TRUE(new_value->Equals(actual_value)); | 550 EXPECT_TRUE(new_value->Equals(actual_value)); |
| 551 Mock::VerifyAndClearExpectations(&pref_notifier_); |
511 | 552 |
512 // Set and Get |DictionaryValue| | 553 // Set and Get DictionaryValue. |
| 554 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1); |
513 DictionaryValue* expected_dict_value = CreateSampleDictValue(); | 555 DictionaryValue* expected_dict_value = CreateSampleDictValue(); |
514 pref_value_store_->SetUserPrefValue(prefs::kSampleDict, expected_dict_value); | 556 pref_value_store_->SetUserPrefValue(prefs::kSampleDict, expected_dict_value); |
| 557 Mock::VerifyAndClearExpectations(&pref_notifier_); |
515 | 558 |
516 actual_value = NULL; | 559 actual_value = NULL; |
517 std::string key(prefs::kSampleDict); | 560 std::string key(prefs::kSampleDict); |
518 pref_value_store_->GetValue(key, &actual_value); | 561 pref_value_store_->GetValue(key, &actual_value); |
519 | 562 |
520 ASSERT_EQ(expected_dict_value, actual_value); | 563 ASSERT_EQ(expected_dict_value, actual_value); |
521 ASSERT_TRUE(expected_dict_value->Equals(actual_value)); | 564 ASSERT_TRUE(expected_dict_value->Equals(actual_value)); |
522 | 565 |
523 // Set and Get a |ListValue| | 566 // Set and Get a ListValue. |
| 567 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)).Times(1); |
524 ListValue* expected_list_value = CreateSampleListValue(); | 568 ListValue* expected_list_value = CreateSampleListValue(); |
525 pref_value_store_->SetUserPrefValue(prefs::kSampleList, expected_list_value); | 569 pref_value_store_->SetUserPrefValue(prefs::kSampleList, expected_list_value); |
| 570 Mock::VerifyAndClearExpectations(&pref_notifier_); |
526 | 571 |
527 actual_value = NULL; | 572 actual_value = NULL; |
528 key = prefs::kSampleList; | 573 key = prefs::kSampleList; |
529 pref_value_store_->GetValue(key, &actual_value); | 574 pref_value_store_->GetValue(key, &actual_value); |
530 | 575 |
531 ASSERT_EQ(expected_list_value, actual_value); | 576 ASSERT_EQ(expected_list_value, actual_value); |
532 ASSERT_TRUE(expected_list_value->Equals(actual_value)); | 577 ASSERT_TRUE(expected_list_value->Equals(actual_value)); |
533 } | 578 } |
534 | 579 |
535 TEST_F(PrefValueStoreTest, PrefValueInManagedPlatformStore) { | 580 TEST_F(PrefValueStoreTest, PrefValueInManagedPlatformStore) { |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
739 EXPECT_FALSE( | 784 EXPECT_FALSE( |
740 pref_value_store_->PrefValueFromDefaultStore(prefs::kMissingPref)); | 785 pref_value_store_->PrefValueFromDefaultStore(prefs::kMissingPref)); |
741 } | 786 } |
742 | 787 |
743 TEST_F(PrefValueStoreTest, TestPolicyRefresh) { | 788 TEST_F(PrefValueStoreTest, TestPolicyRefresh) { |
744 // pref_value_store_ is initialized by PrefValueStoreTest to have values in | 789 // pref_value_store_ is initialized by PrefValueStoreTest to have values in |
745 // the managed platform, device management and recommended stores. By | 790 // the managed platform, device management and recommended stores. By |
746 // replacing them with dummy stores, all of the paths of the prefs originally | 791 // replacing them with dummy stores, all of the paths of the prefs originally |
747 // in the managed platform, device management and recommended stores should | 792 // in the managed platform, device management and recommended stores should |
748 // change. | 793 // change. |
749 MockPolicyRefreshCallback callback; | 794 pref_value_store_->RefreshPolicyPrefs(); |
750 EXPECT_CALL(callback, DoCallback(_)).Times(0); | 795 |
| 796 PrefChangeRecorder recorder; |
| 797 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)) |
| 798 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record)); |
| 799 loop_.RunAllPending(); |
| 800 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 801 } |
| 802 |
| 803 TEST_F(PrefValueStoreTest, TestRefreshPolicyPrefsCompletion) { |
| 804 PrefChangeRecorder recorder; |
| 805 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)) |
| 806 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record)); |
| 807 |
| 808 // Test changed preferences in the managed platform store and removed |
| 809 // preferences in the recommended store. In addition to "homepage", the other |
| 810 // prefs that are set by default in the test class are removed by the |
| 811 // DummyStore. |
| 812 scoped_ptr<TestingPrefStore> new_managed_platform_store( |
| 813 new TestingPrefStore()); |
| 814 DictionaryValue* dict = new DictionaryValue(); |
| 815 dict->SetString("homepage", "some other changed homepage"); |
| 816 new_managed_platform_store->set_prefs(dict); |
| 817 |
| 818 recorder.Clear(); |
| 819 pref_value_store_->RefreshPolicyPrefsCompletion( |
| 820 new_managed_platform_store.release(), |
| 821 new TestingPrefStore(), |
| 822 new TestingPrefStore()); |
| 823 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 824 |
| 825 // Test properties that have been removed from the managed platform store. |
| 826 // Homepage is still set in managed prefs. |
| 827 expected_differing_paths_.clear(); |
| 828 expected_differing_paths_.insert(prefs::kHomePage); |
| 829 |
| 830 recorder.Clear(); |
| 831 pref_value_store_->RefreshPolicyPrefsCompletion( |
| 832 new TestingPrefStore(), |
| 833 new TestingPrefStore(), |
| 834 new TestingPrefStore()); |
| 835 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 836 |
| 837 // Test properties that are added to the device management store. |
| 838 expected_differing_paths_.clear(); |
| 839 expected_differing_paths_.insert(prefs::kHomePage); |
| 840 scoped_ptr<TestingPrefStore> new_device_management_store( |
| 841 new TestingPrefStore()); |
| 842 dict = new DictionaryValue(); |
| 843 dict->SetString("homepage", "some other changed homepage"); |
| 844 new_device_management_store->set_prefs(dict); |
| 845 |
| 846 recorder.Clear(); |
| 847 pref_value_store_->RefreshPolicyPrefsCompletion( |
| 848 new TestingPrefStore(), |
| 849 new_device_management_store.release(), |
| 850 new TestingPrefStore()); |
| 851 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 852 |
| 853 // Test properties that are added to the recommended store. |
| 854 scoped_ptr<TestingPrefStore> new_recommended_store(new TestingPrefStore()); |
| 855 dict = new DictionaryValue(); |
| 856 dict->SetString("homepage", "some other changed homepage 2"); |
| 857 new_recommended_store->set_prefs(dict); |
| 858 expected_differing_paths_.clear(); |
| 859 expected_differing_paths_.insert(prefs::kHomePage); |
| 860 |
| 861 recorder.Clear(); |
| 862 pref_value_store_->RefreshPolicyPrefsCompletion( |
| 863 new TestingPrefStore(), |
| 864 new TestingPrefStore(), |
| 865 new_recommended_store.release()); |
| 866 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 867 |
| 868 // Test adding a multi-key path. |
| 869 new_managed_platform_store.reset(new TestingPrefStore()); |
| 870 dict = new DictionaryValue(); |
| 871 dict->SetString("segment1.segment2", "value"); |
| 872 new_managed_platform_store->set_prefs(dict); |
| 873 expected_differing_paths_.clear(); |
| 874 expected_differing_paths_.insert(prefs::kHomePage); |
| 875 expected_differing_paths_.insert("segment1"); |
| 876 expected_differing_paths_.insert("segment1.segment2"); |
| 877 |
| 878 recorder.Clear(); |
| 879 pref_value_store_->RefreshPolicyPrefsCompletion( |
| 880 new_managed_platform_store.release(), |
| 881 new TestingPrefStore(), |
| 882 new TestingPrefStore()); |
| 883 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
| 884 } |
| 885 |
| 886 TEST_F(PrefValueStoreTest, TestConcurrentPolicyRefresh) { |
| 887 PrefChangeRecorder recorder; |
| 888 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_)) |
| 889 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record)); |
| 890 |
751 BrowserThread::PostTask( | 891 BrowserThread::PostTask( |
752 BrowserThread::UI, FROM_HERE, | 892 BrowserThread::UI, FROM_HERE, |
753 NewRunnableMethod( | 893 NewRunnableMethod( |
754 pref_value_store_.get(), | 894 pref_value_store_.get(), |
755 &PrefValueStore::RefreshPolicyPrefs, | 895 &PrefValueStore::RefreshPolicyPrefs)); |
756 NewCallback(&callback, | |
757 &MockPolicyRefreshCallback::DoCallback))); | |
758 Mock::VerifyAndClearExpectations(&callback); | |
759 EXPECT_CALL(callback, DoCallback(expected_differing_paths_)).Times(1); | |
760 loop_.RunAllPending(); | |
761 } | |
762 | 896 |
763 TEST_F(PrefValueStoreTest, TestRefreshPolicyPrefsCompletion) { | |
764 // Test changed preferences in the managed platform store and removed | |
765 // preferences in the recommended store. In addition to "homepage", the other | |
766 // prefs that are set by default in the test class are removed by the | |
767 // DummyStore. | |
768 scoped_ptr<DummyPrefStore> new_managed_platform_store(new DummyPrefStore()); | |
769 DictionaryValue* dict = new DictionaryValue(); | |
770 dict->SetString("homepage", "some other changed homepage"); | |
771 new_managed_platform_store->set_prefs(dict); | |
772 MockPolicyRefreshCallback callback; | |
773 EXPECT_CALL(callback, DoCallback(expected_differing_paths_)).Times(1); | |
774 pref_value_store_->RefreshPolicyPrefsCompletion( | |
775 new_managed_platform_store.release(), | |
776 new DummyPrefStore(), | |
777 new DummyPrefStore(), | |
778 NewCallback(&callback, | |
779 &MockPolicyRefreshCallback::DoCallback)); | |
780 | |
781 // Test properties that have been removed from the managed platform store. | |
782 // Homepage is still set in managed prefs. | |
783 expected_differing_paths_.clear(); | |
784 expected_differing_paths_.push_back(std::string("homepage")); | |
785 MockPolicyRefreshCallback callback2; | |
786 EXPECT_CALL(callback2, DoCallback(expected_differing_paths_)).Times(1); | |
787 pref_value_store_->RefreshPolicyPrefsCompletion( | |
788 new DummyPrefStore(), | |
789 new DummyPrefStore(), | |
790 new DummyPrefStore(), | |
791 NewCallback(&callback2, | |
792 &MockPolicyRefreshCallback::DoCallback)); | |
793 | |
794 // Test properties that are added to the device management store. | |
795 expected_differing_paths_.clear(); | |
796 expected_differing_paths_.push_back(std::string("homepage")); | |
797 scoped_ptr<DummyPrefStore> new_device_management_store( | |
798 new DummyPrefStore()); | |
799 dict = new DictionaryValue(); | |
800 dict->SetString("homepage", "some other changed homepage"); | |
801 new_device_management_store->set_prefs(dict); | |
802 MockPolicyRefreshCallback callback3; | |
803 EXPECT_CALL(callback3, DoCallback(expected_differing_paths_)).Times(1); | |
804 pref_value_store_->RefreshPolicyPrefsCompletion( | |
805 new DummyPrefStore(), | |
806 new_device_management_store.release(), | |
807 new DummyPrefStore(), | |
808 NewCallback(&callback3, | |
809 &MockPolicyRefreshCallback::DoCallback)); | |
810 | |
811 // Test properties that are added to the recommended store. | |
812 scoped_ptr<DummyPrefStore> new_recommended_store(new DummyPrefStore()); | |
813 dict = new DictionaryValue(); | |
814 dict->SetString("homepage", "some other changed homepage 2"); | |
815 new_recommended_store->set_prefs(dict); | |
816 expected_differing_paths_.clear(); | |
817 expected_differing_paths_.push_back(std::string("homepage")); | |
818 MockPolicyRefreshCallback callback4; | |
819 EXPECT_CALL(callback4, DoCallback(expected_differing_paths_)).Times(1); | |
820 pref_value_store_->RefreshPolicyPrefsCompletion( | |
821 new DummyPrefStore(), | |
822 new DummyPrefStore(), | |
823 new_recommended_store.release(), | |
824 NewCallback(&callback4, | |
825 &MockPolicyRefreshCallback::DoCallback)); | |
826 | |
827 // Test adding a multi-key path. | |
828 new_managed_platform_store.reset(new DummyPrefStore()); | |
829 dict = new DictionaryValue(); | |
830 dict->SetString("segment1.segment2", "value"); | |
831 new_managed_platform_store->set_prefs(dict); | |
832 expected_differing_paths_.clear(); | |
833 expected_differing_paths_.push_back(std::string("homepage")); | |
834 expected_differing_paths_.push_back(std::string("segment1")); | |
835 expected_differing_paths_.push_back(std::string("segment1.segment2")); | |
836 MockPolicyRefreshCallback callback5; | |
837 EXPECT_CALL(callback5, DoCallback(expected_differing_paths_)).Times(1); | |
838 pref_value_store_->RefreshPolicyPrefsCompletion( | |
839 new_managed_platform_store.release(), | |
840 new DummyPrefStore(), | |
841 new DummyPrefStore(), | |
842 NewCallback(&callback5, | |
843 &MockPolicyRefreshCallback::DoCallback)); | |
844 } | |
845 | |
846 TEST_F(PrefValueStoreTest, TestConcurrentPolicyRefresh) { | |
847 MockPolicyRefreshCallback callback1; | |
848 BrowserThread::PostTask( | 897 BrowserThread::PostTask( |
849 BrowserThread::UI, FROM_HERE, | 898 BrowserThread::UI, FROM_HERE, |
850 NewRunnableMethod( | 899 NewRunnableMethod( |
851 pref_value_store_.get(), | 900 pref_value_store_.get(), |
852 &PrefValueStore::RefreshPolicyPrefs, | 901 &PrefValueStore::RefreshPolicyPrefs)); |
853 NewCallback(&callback1, | |
854 &MockPolicyRefreshCallback::DoCallback))); | |
855 EXPECT_CALL(callback1, DoCallback(_)).Times(0); | |
856 | 902 |
857 MockPolicyRefreshCallback callback2; | |
858 BrowserThread::PostTask( | 903 BrowserThread::PostTask( |
859 BrowserThread::UI, FROM_HERE, | 904 BrowserThread::UI, FROM_HERE, |
860 NewRunnableMethod( | 905 NewRunnableMethod( |
861 pref_value_store_.get(), | 906 pref_value_store_.get(), |
862 &PrefValueStore::RefreshPolicyPrefs, | 907 &PrefValueStore::RefreshPolicyPrefs)); |
863 NewCallback(&callback2, | |
864 &MockPolicyRefreshCallback::DoCallback))); | |
865 EXPECT_CALL(callback2, DoCallback(_)).Times(0); | |
866 | 908 |
867 MockPolicyRefreshCallback callback3; | |
868 BrowserThread::PostTask( | |
869 BrowserThread::UI, FROM_HERE, | |
870 NewRunnableMethod( | |
871 pref_value_store_.get(), | |
872 &PrefValueStore::RefreshPolicyPrefs, | |
873 NewCallback(&callback3, | |
874 &MockPolicyRefreshCallback::DoCallback))); | |
875 EXPECT_CALL(callback3, DoCallback(_)).Times(0); | |
876 Mock::VerifyAndClearExpectations(&callback1); | |
877 Mock::VerifyAndClearExpectations(&callback2); | |
878 Mock::VerifyAndClearExpectations(&callback3); | |
879 | |
880 EXPECT_CALL(callback1, DoCallback(expected_differing_paths_)).Times(1); | |
881 std::vector<std::string> no_differing_paths; | |
882 EXPECT_CALL(callback2, DoCallback(no_differing_paths)).Times(1); | |
883 EXPECT_CALL(callback3, DoCallback(no_differing_paths)).Times(1); | |
884 loop_.RunAllPending(); | 909 loop_.RunAllPending(); |
| 910 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs()); |
885 } | 911 } |
OLD | NEW |