| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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/file_util.h" | 5 #include "base/file_util.h" |
| 6 #include "base/path_service.h" | 6 #include "base/path_service.h" |
| 7 #include "chrome/common/chrome_paths.h" | 7 #include "chrome/common/chrome_paths.h" |
| 8 #include "chrome/common/json_value_serializer.h" | 8 #include "chrome/common/json_value_serializer.h" |
| 9 #include "chrome/common/notification_service.h" | 9 #include "chrome/common/notification_service.h" |
| 10 #include "chrome/common/notification_type.h" | 10 #include "chrome/common/notification_type.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 70 new_pref_value_ = new_pref_value; | 70 new_pref_value_ = new_pref_value; |
| 71 } | 71 } |
| 72 | 72 |
| 73 private: | 73 private: |
| 74 bool observer_fired_; | 74 bool observer_fired_; |
| 75 const PrefService* prefs_; | 75 const PrefService* prefs_; |
| 76 const std::wstring pref_name_; | 76 const std::wstring pref_name_; |
| 77 std::wstring new_pref_value_; | 77 std::wstring new_pref_value_; |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 // This test is disabled. See issue 8339. | |
| 81 TEST_F(PrefServiceTest, Basic) { | 80 TEST_F(PrefServiceTest, Basic) { |
| 82 PrefService prefs; | 81 { |
| 82 // Test that it fails on nonexistent file. |
| 83 FilePath bogus_input_file = data_dir_.AppendASCII("read.txt"); |
| 84 PrefService prefs(bogus_input_file, NULL); |
| 85 EXPECT_FALSE(prefs.ReloadPersistentPrefs()); |
| 86 } |
| 83 | 87 |
| 84 // Test that it fails on nonexistent file. | 88 ASSERT_TRUE(file_util::CopyFile(data_dir_.AppendASCII("read.json"), |
| 85 FilePath bogus_input_file = data_dir_.AppendASCII("read.txt"); | 89 test_dir_.AppendASCII("write.json"))); |
| 86 EXPECT_FALSE(prefs.LoadPersistentPrefs(bogus_input_file)); | |
| 87 | 90 |
| 88 // Test that the persistent value can be loaded. | 91 // Test that the persistent value can be loaded. |
| 89 FilePath input_file = data_dir_.AppendASCII("read.json"); | 92 FilePath input_file = test_dir_.AppendASCII("write.json"); |
| 90 ASSERT_TRUE(file_util::PathExists(input_file)); | 93 ASSERT_TRUE(file_util::PathExists(input_file)); |
| 91 ASSERT_TRUE(prefs.LoadPersistentPrefs(input_file)); | 94 PrefService prefs(input_file, NULL); |
| 95 ASSERT_TRUE(prefs.ReloadPersistentPrefs()); |
| 92 | 96 |
| 93 // Register test prefs. | 97 // Register test prefs. |
| 94 const wchar_t kNewWindowsInTabs[] = L"tabs.new_windows_in_tabs"; | 98 const wchar_t kNewWindowsInTabs[] = L"tabs.new_windows_in_tabs"; |
| 95 const wchar_t kMaxTabs[] = L"tabs.max_tabs"; | 99 const wchar_t kMaxTabs[] = L"tabs.max_tabs"; |
| 96 const wchar_t kLongIntPref[] = L"long_int.pref"; | 100 const wchar_t kLongIntPref[] = L"long_int.pref"; |
| 97 prefs.RegisterStringPref(prefs::kHomePage, L""); | 101 prefs.RegisterStringPref(prefs::kHomePage, L""); |
| 98 prefs.RegisterBooleanPref(kNewWindowsInTabs, false); | 102 prefs.RegisterBooleanPref(kNewWindowsInTabs, false); |
| 99 prefs.RegisterIntegerPref(kMaxTabs, 0); | 103 prefs.RegisterIntegerPref(kMaxTabs, 0); |
| 100 prefs.RegisterStringPref(kLongIntPref, L"2147483648"); | 104 prefs.RegisterStringPref(kLongIntPref, L"2147483648"); |
| 101 | 105 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 131 prefs.SetInt64(kLongIntPref, 214748364842LL); | 135 prefs.SetInt64(kLongIntPref, 214748364842LL); |
| 132 EXPECT_EQ(214748364842LL, prefs.GetInt64(kLongIntPref)); | 136 EXPECT_EQ(214748364842LL, prefs.GetInt64(kLongIntPref)); |
| 133 | 137 |
| 134 EXPECT_EQ(FilePath::StringType(FILE_PATH_LITERAL("/usr/local/")), | 138 EXPECT_EQ(FilePath::StringType(FILE_PATH_LITERAL("/usr/local/")), |
| 135 prefs.GetFilePath(kSomeDirectory).value()); | 139 prefs.GetFilePath(kSomeDirectory).value()); |
| 136 prefs.SetFilePath(kSomeDirectory, some_path); | 140 prefs.SetFilePath(kSomeDirectory, some_path); |
| 137 EXPECT_EQ(some_path.value(), prefs.GetFilePath(kSomeDirectory).value()); | 141 EXPECT_EQ(some_path.value(), prefs.GetFilePath(kSomeDirectory).value()); |
| 138 | 142 |
| 139 // Serialize and compare to expected output. | 143 // Serialize and compare to expected output. |
| 140 FilePath output_file = test_dir_.AppendASCII("write.json"); | 144 FilePath output_file = test_dir_.AppendASCII("write.json"); |
| 141 prefs.pref_filename_ = output_file; | |
| 142 ASSERT_TRUE(prefs.SavePersistentPrefs(NULL)); | |
| 143 FilePath golden_output_file = data_dir_.AppendASCII("write.golden.json"); | 145 FilePath golden_output_file = data_dir_.AppendASCII("write.golden.json"); |
| 144 ASSERT_TRUE(file_util::PathExists(golden_output_file)); | 146 ASSERT_TRUE(file_util::PathExists(golden_output_file)); |
| 145 ASSERT_TRUE(file_util::ContentsEqual(golden_output_file, output_file)); | 147 ASSERT_TRUE(prefs.SavePersistentPrefs()); |
| 148 EXPECT_TRUE(file_util::ContentsEqual(golden_output_file, output_file)); |
| 149 ASSERT_TRUE(file_util::Delete(output_file, false)); |
| 146 } | 150 } |
| 147 | 151 |
| 148 TEST_F(PrefServiceTest, Overlay) { | 152 TEST_F(PrefServiceTest, Overlay) { |
| 149 const std::string transient = | 153 const std::string transient = |
| 150 "{\"bool\":true, \"int\":2, \"real\":2.0, \"string\":\"transient\"," | 154 "{\"bool\":true, \"int\":2, \"real\":2.0, \"string\":\"transient\"," |
| 151 "\"dictionary\":{\"value\":\"transient\"}," | 155 "\"dictionary\":{\"value\":\"transient\"}," |
| 152 "\"list\":[\"transient\"]}"; | 156 "\"list\":[\"transient\"]}"; |
| 153 | 157 |
| 154 std::wstring persistent_string(L"persistent"); | 158 std::wstring persistent_string(L"persistent"); |
| 155 std::wstring transient_string(L"transient"); | 159 std::wstring transient_string(L"transient"); |
| 156 | 160 |
| 157 PrefService prefs; | |
| 158 | |
| 159 FilePath persistent_file = data_dir_.AppendASCII("overlay.json"); | 161 FilePath persistent_file = data_dir_.AppendASCII("overlay.json"); |
| 160 EXPECT_TRUE(prefs.LoadPersistentPrefs(persistent_file)); | 162 PrefService prefs(persistent_file, NULL); |
| 163 EXPECT_TRUE(prefs.ReloadPersistentPrefs()); |
| 161 | 164 |
| 162 Value* transient_value; | 165 Value* transient_value; |
| 163 { | 166 { |
| 164 JSONStringValueSerializer serializer(transient); | 167 JSONStringValueSerializer serializer(transient); |
| 165 transient_value = serializer.Deserialize(NULL); | 168 transient_value = serializer.Deserialize(NULL); |
| 166 ASSERT_TRUE(transient_value); | 169 ASSERT_TRUE(transient_value); |
| 167 } | 170 } |
| 168 prefs.transient()->Set(transient_string, transient_value); | 171 prefs.transient()->Set(transient_string, transient_value); |
| 169 | 172 |
| 170 Value* both_transient_value; | 173 Value* both_transient_value; |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 Value* member_value; | 276 Value* member_value; |
| 274 ASSERT_TRUE(result_value->Get(0, &member_value)); | 277 ASSERT_TRUE(result_value->Get(0, &member_value)); |
| 275 ASSERT_TRUE(member_value); | 278 ASSERT_TRUE(member_value); |
| 276 std::wstring result_string; | 279 std::wstring result_string; |
| 277 ASSERT_TRUE(member_value->GetAsString(&result_string)); | 280 ASSERT_TRUE(member_value->GetAsString(&result_string)); |
| 278 ASSERT_EQ(transient_string, result_string); | 281 ASSERT_EQ(transient_string, result_string); |
| 279 } | 282 } |
| 280 } | 283 } |
| 281 | 284 |
| 282 TEST_F(PrefServiceTest, Observers) { | 285 TEST_F(PrefServiceTest, Observers) { |
| 283 PrefService prefs; | |
| 284 | |
| 285 FilePath input_file = data_dir_.AppendASCII("read.json"); | 286 FilePath input_file = data_dir_.AppendASCII("read.json"); |
| 286 EXPECT_TRUE(file_util::PathExists(input_file)); | 287 EXPECT_TRUE(file_util::PathExists(input_file)); |
| 287 EXPECT_TRUE(prefs.LoadPersistentPrefs(input_file)); | 288 |
| 289 PrefService prefs(input_file, NULL); |
| 290 |
| 291 EXPECT_TRUE(prefs.ReloadPersistentPrefs()); |
| 288 | 292 |
| 289 const wchar_t pref_name[] = L"homepage"; | 293 const wchar_t pref_name[] = L"homepage"; |
| 290 prefs.RegisterStringPref(pref_name, L""); | 294 prefs.RegisterStringPref(pref_name, L""); |
| 291 EXPECT_EQ(std::wstring(L"http://www.cnn.com"), prefs.GetString(pref_name)); | 295 EXPECT_EQ(std::wstring(L"http://www.cnn.com"), prefs.GetString(pref_name)); |
| 292 | 296 |
| 293 const std::wstring new_pref_value(L"http://www.google.com/"); | 297 const std::wstring new_pref_value(L"http://www.google.com/"); |
| 294 TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 298 TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
| 295 prefs.AddPrefObserver(pref_name, &obs); | 299 prefs.AddPrefObserver(pref_name, &obs); |
| 296 // This should fire the checks in TestPrefObserver::Observe. | 300 // This should fire the checks in TestPrefObserver::Observe. |
| 297 prefs.SetString(pref_name, new_pref_value); | 301 prefs.SetString(pref_name, new_pref_value); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 318 EXPECT_FALSE(obs.observer_fired()); | 322 EXPECT_FALSE(obs.observer_fired()); |
| 319 EXPECT_TRUE(obs2.observer_fired()); | 323 EXPECT_TRUE(obs2.observer_fired()); |
| 320 | 324 |
| 321 // Ok, clean up. | 325 // Ok, clean up. |
| 322 prefs.RemovePrefObserver(pref_name, &obs2); | 326 prefs.RemovePrefObserver(pref_name, &obs2); |
| 323 } | 327 } |
| 324 | 328 |
| 325 // TODO(port): port this test to POSIX. | 329 // TODO(port): port this test to POSIX. |
| 326 #if defined(OS_WIN) | 330 #if defined(OS_WIN) |
| 327 TEST_F(PrefServiceTest, LocalizedPrefs) { | 331 TEST_F(PrefServiceTest, LocalizedPrefs) { |
| 328 PrefService prefs; | 332 PrefService prefs(FilePath(), NULL); |
| 329 const wchar_t kBoolean[] = L"boolean"; | 333 const wchar_t kBoolean[] = L"boolean"; |
| 330 const wchar_t kInteger[] = L"integer"; | 334 const wchar_t kInteger[] = L"integer"; |
| 331 const wchar_t kString[] = L"string"; | 335 const wchar_t kString[] = L"string"; |
| 332 prefs.RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL); | 336 prefs.RegisterLocalizedBooleanPref(kBoolean, IDS_LOCALE_BOOL); |
| 333 prefs.RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT); | 337 prefs.RegisterLocalizedIntegerPref(kInteger, IDS_LOCALE_INT); |
| 334 prefs.RegisterLocalizedStringPref(kString, IDS_LOCALE_STRING); | 338 prefs.RegisterLocalizedStringPref(kString, IDS_LOCALE_STRING); |
| 335 | 339 |
| 336 // The locale default should take preference over the user default. | 340 // The locale default should take preference over the user default. |
| 337 EXPECT_FALSE(prefs.GetBoolean(kBoolean)); | 341 EXPECT_FALSE(prefs.GetBoolean(kBoolean)); |
| 338 EXPECT_EQ(1, prefs.GetInteger(kInteger)); | 342 EXPECT_EQ(1, prefs.GetInteger(kInteger)); |
| 339 EXPECT_EQ(L"hello", prefs.GetString(kString)); | 343 EXPECT_EQ(L"hello", prefs.GetString(kString)); |
| 340 | 344 |
| 341 prefs.SetBoolean(kBoolean, true); | 345 prefs.SetBoolean(kBoolean, true); |
| 342 EXPECT_TRUE(prefs.GetBoolean(kBoolean)); | 346 EXPECT_TRUE(prefs.GetBoolean(kBoolean)); |
| 343 prefs.SetInteger(kInteger, 5); | 347 prefs.SetInteger(kInteger, 5); |
| 344 EXPECT_EQ(5, prefs.GetInteger(kInteger)); | 348 EXPECT_EQ(5, prefs.GetInteger(kInteger)); |
| 345 prefs.SetString(kString, L"foo"); | 349 prefs.SetString(kString, L"foo"); |
| 346 EXPECT_EQ(L"foo", prefs.GetString(kString)); | 350 EXPECT_EQ(L"foo", prefs.GetString(kString)); |
| 347 } | 351 } |
| 348 #endif | 352 #endif |
| 349 | 353 |
| 350 TEST_F(PrefServiceTest, NoObserverFire) { | 354 TEST_F(PrefServiceTest, NoObserverFire) { |
| 351 PrefService prefs; | 355 PrefService prefs(FilePath(), NULL); |
| 352 | 356 |
| 353 const wchar_t pref_name[] = L"homepage"; | 357 const wchar_t pref_name[] = L"homepage"; |
| 354 prefs.RegisterStringPref(pref_name, L""); | 358 prefs.RegisterStringPref(pref_name, L""); |
| 355 | 359 |
| 356 const std::wstring new_pref_value(L"http://www.google.com/"); | 360 const std::wstring new_pref_value(L"http://www.google.com/"); |
| 357 TestPrefObserver obs(&prefs, pref_name, new_pref_value); | 361 TestPrefObserver obs(&prefs, pref_name, new_pref_value); |
| 358 prefs.AddPrefObserver(pref_name, &obs); | 362 prefs.AddPrefObserver(pref_name, &obs); |
| 359 // This should fire the checks in TestPrefObserver::Observe. | 363 // This should fire the checks in TestPrefObserver::Observe. |
| 360 prefs.SetString(pref_name, new_pref_value); | 364 prefs.SetString(pref_name, new_pref_value); |
| 361 | 365 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 376 // Clearing the pref again should not cause the pref to fire. | 380 // Clearing the pref again should not cause the pref to fire. |
| 377 obs.Reset(L""); | 381 obs.Reset(L""); |
| 378 prefs.ClearPref(pref_name); | 382 prefs.ClearPref(pref_name); |
| 379 EXPECT_FALSE(obs.observer_fired()); | 383 EXPECT_FALSE(obs.observer_fired()); |
| 380 | 384 |
| 381 // Ok, clean up. | 385 // Ok, clean up. |
| 382 prefs.RemovePrefObserver(pref_name, &obs); | 386 prefs.RemovePrefObserver(pref_name, &obs); |
| 383 } | 387 } |
| 384 | 388 |
| 385 TEST_F(PrefServiceTest, HasPrefPath) { | 389 TEST_F(PrefServiceTest, HasPrefPath) { |
| 386 PrefService prefs; | 390 PrefService prefs(FilePath(), NULL); |
| 387 | 391 |
| 388 const wchar_t path[] = L"fake.path"; | 392 const wchar_t path[] = L"fake.path"; |
| 389 | 393 |
| 390 // Shouldn't initially have a path. | 394 // Shouldn't initially have a path. |
| 391 EXPECT_FALSE(prefs.HasPrefPath(path)); | 395 EXPECT_FALSE(prefs.HasPrefPath(path)); |
| 392 | 396 |
| 393 // Register the path. This doesn't set a value, so the path still shouldn't | 397 // Register the path. This doesn't set a value, so the path still shouldn't |
| 394 // exist. | 398 // exist. |
| 395 prefs.RegisterStringPref(path, std::wstring()); | 399 prefs.RegisterStringPref(path, std::wstring()); |
| 396 EXPECT_FALSE(prefs.HasPrefPath(path)); | 400 EXPECT_FALSE(prefs.HasPrefPath(path)); |
| 397 | 401 |
| 398 // Set a value and make sure we have a path. | 402 // Set a value and make sure we have a path. |
| 399 prefs.persistent_->SetString(path, L"blah"); | 403 prefs.SetString(path, L"blah"); |
| 400 EXPECT_TRUE(prefs.HasPrefPath(path)); | 404 EXPECT_TRUE(prefs.HasPrefPath(path)); |
| 401 } | 405 } |
| OLD | NEW |