| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/sync_preferences/pref_service_syncable.h" | 5 #include "components/sync_preferences/pref_service_syncable.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 prefs_.SetString(kStringPrefName, kExampleUrl0); | 266 prefs_.SetString(kStringPrefName, kExampleUrl0); |
| 267 { | 267 { |
| 268 ListPrefUpdate update(GetPrefs(), kListPrefName); | 268 ListPrefUpdate update(GetPrefs(), kListPrefName); |
| 269 base::ListValue* url_list = update.Get(); | 269 base::ListValue* url_list = update.Get(); |
| 270 url_list->AppendString(kExampleUrl0); | 270 url_list->AppendString(kExampleUrl0); |
| 271 url_list->AppendString(kExampleUrl1); | 271 url_list->AppendString(kExampleUrl1); |
| 272 } | 272 } |
| 273 | 273 |
| 274 syncer::SyncDataList in; | 274 syncer::SyncDataList in; |
| 275 syncer::SyncChangeList out; | 275 syncer::SyncChangeList out; |
| 276 AddToRemoteDataList(kStringPrefName, base::StringValue(kExampleUrl1), &in); | 276 AddToRemoteDataList(kStringPrefName, base::Value(kExampleUrl1), &in); |
| 277 base::ListValue urls_to_restore; | 277 base::ListValue urls_to_restore; |
| 278 urls_to_restore.AppendString(kExampleUrl1); | 278 urls_to_restore.AppendString(kExampleUrl1); |
| 279 urls_to_restore.AppendString(kExampleUrl2); | 279 urls_to_restore.AppendString(kExampleUrl2); |
| 280 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); | 280 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); |
| 281 AddToRemoteDataList(kDefaultCharsetPrefName, | 281 AddToRemoteDataList(kDefaultCharsetPrefName, |
| 282 base::StringValue(kNonDefaultCharsetValue), &in); | 282 base::Value(kNonDefaultCharsetValue), &in); |
| 283 InitWithSyncDataTakeOutput(in, &out); | 283 InitWithSyncDataTakeOutput(in, &out); |
| 284 | 284 |
| 285 ASSERT_FALSE(FindValue(kStringPrefName, out).get()); | 285 ASSERT_FALSE(FindValue(kStringPrefName, out).get()); |
| 286 ASSERT_FALSE(FindValue(kDefaultCharsetPrefName, out).get()); | 286 ASSERT_FALSE(FindValue(kDefaultCharsetPrefName, out).get()); |
| 287 | 287 |
| 288 EXPECT_EQ(kExampleUrl1, prefs_.GetString(kStringPrefName)); | 288 EXPECT_EQ(kExampleUrl1, prefs_.GetString(kStringPrefName)); |
| 289 | 289 |
| 290 std::unique_ptr<base::ListValue> expected_urls(new base::ListValue); | 290 std::unique_ptr<base::ListValue> expected_urls(new base::ListValue); |
| 291 expected_urls->AppendString(kExampleUrl1); | 291 expected_urls->AppendString(kExampleUrl1); |
| 292 expected_urls->AppendString(kExampleUrl2); | 292 expected_urls->AppendString(kExampleUrl2); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 309 } | 309 } |
| 310 | 310 |
| 311 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { | 311 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithDefaultValue) { |
| 312 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); | 312 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); |
| 313 EXPECT_TRUE(pref->IsDefaultValue()); | 313 EXPECT_TRUE(pref->IsDefaultValue()); |
| 314 | 314 |
| 315 syncer::SyncChangeList out; | 315 syncer::SyncChangeList out; |
| 316 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 316 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 317 out.clear(); | 317 out.clear(); |
| 318 | 318 |
| 319 base::StringValue expected(kExampleUrl0); | 319 base::Value expected(kExampleUrl0); |
| 320 GetPrefs()->Set(kStringPrefName, expected); | 320 GetPrefs()->Set(kStringPrefName, expected); |
| 321 | 321 |
| 322 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 322 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
| 323 ASSERT_TRUE(actual.get()); | 323 ASSERT_TRUE(actual.get()); |
| 324 EXPECT_TRUE(expected.Equals(actual.get())); | 324 EXPECT_TRUE(expected.Equals(actual.get())); |
| 325 } | 325 } |
| 326 | 326 |
| 327 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { | 327 TEST_F(PrefServiceSyncableTest, UpdatedPreferenceWithValue) { |
| 328 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); | 328 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); |
| 329 syncer::SyncChangeList out; | 329 syncer::SyncChangeList out; |
| 330 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 330 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 331 out.clear(); | 331 out.clear(); |
| 332 | 332 |
| 333 base::StringValue expected(kExampleUrl1); | 333 base::Value expected(kExampleUrl1); |
| 334 GetPrefs()->Set(kStringPrefName, expected); | 334 GetPrefs()->Set(kStringPrefName, expected); |
| 335 | 335 |
| 336 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 336 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
| 337 ASSERT_TRUE(actual.get()); | 337 ASSERT_TRUE(actual.get()); |
| 338 EXPECT_TRUE(expected.Equals(actual.get())); | 338 EXPECT_TRUE(expected.Equals(actual.get())); |
| 339 } | 339 } |
| 340 | 340 |
| 341 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { | 341 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionUpdate) { |
| 342 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); | 342 GetPrefs()->SetString(kStringPrefName, kExampleUrl0); |
| 343 InitWithNoSyncData(); | 343 InitWithNoSyncData(); |
| 344 | 344 |
| 345 base::StringValue expected(kExampleUrl1); | 345 base::Value expected(kExampleUrl1); |
| 346 syncer::SyncChangeList list; | 346 syncer::SyncChangeList list; |
| 347 list.push_back(MakeRemoteChange(1, kStringPrefName, expected, | 347 list.push_back(MakeRemoteChange(1, kStringPrefName, expected, |
| 348 SyncChange::ACTION_UPDATE)); | 348 SyncChange::ACTION_UPDATE)); |
| 349 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 349 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 350 | 350 |
| 351 const base::Value& actual = GetPreferenceValue(kStringPrefName); | 351 const base::Value& actual = GetPreferenceValue(kStringPrefName); |
| 352 EXPECT_TRUE(expected.Equals(&actual)); | 352 EXPECT_TRUE(expected.Equals(&actual)); |
| 353 } | 353 } |
| 354 | 354 |
| 355 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { | 355 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeActionAdd) { |
| 356 InitWithNoSyncData(); | 356 InitWithNoSyncData(); |
| 357 | 357 |
| 358 base::StringValue expected(kExampleUrl0); | 358 base::Value expected(kExampleUrl0); |
| 359 syncer::SyncChangeList list; | 359 syncer::SyncChangeList list; |
| 360 list.push_back( | 360 list.push_back( |
| 361 MakeRemoteChange(1, kStringPrefName, expected, SyncChange::ACTION_ADD)); | 361 MakeRemoteChange(1, kStringPrefName, expected, SyncChange::ACTION_ADD)); |
| 362 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 362 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 363 | 363 |
| 364 const base::Value& actual = GetPreferenceValue(kStringPrefName); | 364 const base::Value& actual = GetPreferenceValue(kStringPrefName); |
| 365 EXPECT_TRUE(expected.Equals(&actual)); | 365 EXPECT_TRUE(expected.Equals(&actual)); |
| 366 EXPECT_EQ( | 366 EXPECT_EQ( |
| 367 1U, pref_sync_service_->registered_preferences().count(kStringPrefName)); | 367 1U, pref_sync_service_->registered_preferences().count(kStringPrefName)); |
| 368 } | 368 } |
| 369 | 369 |
| 370 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { | 370 TEST_F(PrefServiceSyncableTest, UpdatedSyncNodeUnknownPreference) { |
| 371 InitWithNoSyncData(); | 371 InitWithNoSyncData(); |
| 372 syncer::SyncChangeList list; | 372 syncer::SyncChangeList list; |
| 373 base::StringValue expected(kExampleUrl0); | 373 base::Value expected(kExampleUrl0); |
| 374 list.push_back(MakeRemoteChange(1, "unknown preference", expected, | 374 list.push_back(MakeRemoteChange(1, "unknown preference", expected, |
| 375 SyncChange::ACTION_UPDATE)); | 375 SyncChange::ACTION_UPDATE)); |
| 376 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 376 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 377 // Nothing interesting happens on the client when it gets an update | 377 // Nothing interesting happens on the client when it gets an update |
| 378 // of an unknown preference. We just should not crash. | 378 // of an unknown preference. We just should not crash. |
| 379 } | 379 } |
| 380 | 380 |
| 381 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { | 381 TEST_F(PrefServiceSyncableTest, ManagedPreferences) { |
| 382 // Make the homepage preference managed. | 382 // Make the homepage preference managed. |
| 383 base::StringValue managed_value("http://example.com"); | 383 base::Value managed_value("http://example.com"); |
| 384 prefs_.SetManagedPref(kStringPrefName, managed_value.DeepCopy()); | 384 prefs_.SetManagedPref(kStringPrefName, managed_value.DeepCopy()); |
| 385 | 385 |
| 386 syncer::SyncChangeList out; | 386 syncer::SyncChangeList out; |
| 387 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 387 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 388 out.clear(); | 388 out.clear(); |
| 389 | 389 |
| 390 // Changing the homepage preference should not sync anything. | 390 // Changing the homepage preference should not sync anything. |
| 391 base::StringValue user_value("http://chromium..com"); | 391 base::Value user_value("http://chromium..com"); |
| 392 prefs_.SetUserPref(kStringPrefName, user_value.DeepCopy()); | 392 prefs_.SetUserPref(kStringPrefName, user_value.DeepCopy()); |
| 393 EXPECT_TRUE(out.empty()); | 393 EXPECT_TRUE(out.empty()); |
| 394 | 394 |
| 395 // An incoming sync transaction should change the user value, not the managed | 395 // An incoming sync transaction should change the user value, not the managed |
| 396 // value. | 396 // value. |
| 397 base::StringValue sync_value("http://crbug.com"); | 397 base::Value sync_value("http://crbug.com"); |
| 398 syncer::SyncChangeList list; | 398 syncer::SyncChangeList list; |
| 399 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, | 399 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, |
| 400 SyncChange::ACTION_UPDATE)); | 400 SyncChange::ACTION_UPDATE)); |
| 401 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 401 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 402 | 402 |
| 403 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kStringPrefName))); | 403 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kStringPrefName))); |
| 404 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kStringPrefName))); | 404 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kStringPrefName))); |
| 405 } | 405 } |
| 406 | 406 |
| 407 // List preferences have special handling at association time due to our ability | 407 // List preferences have special handling at association time due to our ability |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 444 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 445 | 445 |
| 446 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kListPrefName))); | 446 EXPECT_TRUE(managed_value.Equals(prefs_.GetManagedPref(kListPrefName))); |
| 447 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kListPrefName))); | 447 EXPECT_TRUE(sync_value.Equals(prefs_.GetUserPref(kListPrefName))); |
| 448 } | 448 } |
| 449 | 449 |
| 450 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { | 450 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferences) { |
| 451 syncer::SyncChangeList out; | 451 syncer::SyncChangeList out; |
| 452 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 452 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 453 out.clear(); | 453 out.clear(); |
| 454 base::StringValue initial_value("http://example.com/initial"); | 454 base::Value initial_value("http://example.com/initial"); |
| 455 GetPrefs()->Set(kStringPrefName, initial_value); | 455 GetPrefs()->Set(kStringPrefName, initial_value); |
| 456 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 456 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
| 457 ASSERT_TRUE(actual.get()); | 457 ASSERT_TRUE(actual.get()); |
| 458 EXPECT_TRUE(initial_value.Equals(actual.get())); | 458 EXPECT_TRUE(initial_value.Equals(actual.get())); |
| 459 | 459 |
| 460 // Switch kHomePage to managed and set a different value. | 460 // Switch kHomePage to managed and set a different value. |
| 461 base::StringValue managed_value("http://example.com/managed"); | 461 base::Value managed_value("http://example.com/managed"); |
| 462 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 462 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
| 463 managed_value.DeepCopy()); | 463 managed_value.DeepCopy()); |
| 464 | 464 |
| 465 // The pref value should be the one dictated by policy. | 465 // The pref value should be the one dictated by policy. |
| 466 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 466 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
| 467 | 467 |
| 468 // Switch kHomePage back to unmanaged. | 468 // Switch kHomePage back to unmanaged. |
| 469 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 469 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
| 470 | 470 |
| 471 // The original value should be picked up. | 471 // The original value should be picked up. |
| 472 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kStringPrefName))); | 472 EXPECT_TRUE(initial_value.Equals(&GetPreferenceValue(kStringPrefName))); |
| 473 } | 473 } |
| 474 | 474 |
| 475 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { | 475 TEST_F(PrefServiceSyncableTest, DynamicManagedPreferencesWithSyncChange) { |
| 476 syncer::SyncChangeList out; | 476 syncer::SyncChangeList out; |
| 477 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 477 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 478 out.clear(); | 478 out.clear(); |
| 479 | 479 |
| 480 base::StringValue initial_value("http://example.com/initial"); | 480 base::Value initial_value("http://example.com/initial"); |
| 481 GetPrefs()->Set(kStringPrefName, initial_value); | 481 GetPrefs()->Set(kStringPrefName, initial_value); |
| 482 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); | 482 std::unique_ptr<base::Value> actual(FindValue(kStringPrefName, out)); |
| 483 EXPECT_TRUE(initial_value.Equals(actual.get())); | 483 EXPECT_TRUE(initial_value.Equals(actual.get())); |
| 484 | 484 |
| 485 // Switch kHomePage to managed and set a different value. | 485 // Switch kHomePage to managed and set a different value. |
| 486 base::StringValue managed_value("http://example.com/managed"); | 486 base::Value managed_value("http://example.com/managed"); |
| 487 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 487 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
| 488 managed_value.DeepCopy()); | 488 managed_value.DeepCopy()); |
| 489 | 489 |
| 490 // Change the sync value. | 490 // Change the sync value. |
| 491 base::StringValue sync_value("http://example.com/sync"); | 491 base::Value sync_value("http://example.com/sync"); |
| 492 syncer::SyncChangeList list; | 492 syncer::SyncChangeList list; |
| 493 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, | 493 list.push_back(MakeRemoteChange(1, kStringPrefName, sync_value, |
| 494 SyncChange::ACTION_UPDATE)); | 494 SyncChange::ACTION_UPDATE)); |
| 495 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); | 495 pref_sync_service_->ProcessSyncChanges(FROM_HERE, list); |
| 496 | 496 |
| 497 // The pref value should still be the one dictated by policy. | 497 // The pref value should still be the one dictated by policy. |
| 498 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 498 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
| 499 | 499 |
| 500 // Switch kHomePage back to unmanaged. | 500 // Switch kHomePage back to unmanaged. |
| 501 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 501 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
| 502 | 502 |
| 503 // Sync value should be picked up. | 503 // Sync value should be picked up. |
| 504 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kStringPrefName))); | 504 EXPECT_TRUE(sync_value.Equals(&GetPreferenceValue(kStringPrefName))); |
| 505 } | 505 } |
| 506 | 506 |
| 507 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { | 507 TEST_F(PrefServiceSyncableTest, DynamicManagedDefaultPreferences) { |
| 508 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); | 508 const PrefService::Preference* pref = prefs_.FindPreference(kStringPrefName); |
| 509 EXPECT_TRUE(pref->IsDefaultValue()); | 509 EXPECT_TRUE(pref->IsDefaultValue()); |
| 510 syncer::SyncChangeList out; | 510 syncer::SyncChangeList out; |
| 511 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); | 511 InitWithSyncDataTakeOutput(syncer::SyncDataList(), &out); |
| 512 | 512 |
| 513 EXPECT_TRUE(IsSynced(kStringPrefName)); | 513 EXPECT_TRUE(IsSynced(kStringPrefName)); |
| 514 EXPECT_TRUE(pref->IsDefaultValue()); | 514 EXPECT_TRUE(pref->IsDefaultValue()); |
| 515 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); | 515 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); |
| 516 out.clear(); | 516 out.clear(); |
| 517 | 517 |
| 518 // Switch kHomePage to managed and set a different value. | 518 // Switch kHomePage to managed and set a different value. |
| 519 base::StringValue managed_value("http://example.com/managed"); | 519 base::Value managed_value("http://example.com/managed"); |
| 520 GetTestingPrefService()->SetManagedPref(kStringPrefName, | 520 GetTestingPrefService()->SetManagedPref(kStringPrefName, |
| 521 managed_value.DeepCopy()); | 521 managed_value.DeepCopy()); |
| 522 // The pref value should be the one dictated by policy. | 522 // The pref value should be the one dictated by policy. |
| 523 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); | 523 EXPECT_TRUE(managed_value.Equals(&GetPreferenceValue(kStringPrefName))); |
| 524 EXPECT_FALSE(pref->IsDefaultValue()); | 524 EXPECT_FALSE(pref->IsDefaultValue()); |
| 525 // There should be no synced value. | 525 // There should be no synced value. |
| 526 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); | 526 EXPECT_FALSE(FindValue(kStringPrefName, out).get()); |
| 527 // Switch kHomePage back to unmanaged. | 527 // Switch kHomePage back to unmanaged. |
| 528 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); | 528 GetTestingPrefService()->RemoveManagedPref(kStringPrefName); |
| 529 // The original value should be picked up. | 529 // The original value should be picked up. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 554 base::Bind(&Increment, &num_callbacks)); | 554 base::Bind(&Increment, &num_callbacks)); |
| 555 EXPECT_EQ(0, num_callbacks); | 555 EXPECT_EQ(0, num_callbacks); |
| 556 | 556 |
| 557 InitWithNoSyncData(); | 557 InitWithNoSyncData(); |
| 558 EXPECT_EQ(1, num_callbacks); | 558 EXPECT_EQ(1, num_callbacks); |
| 559 } | 559 } |
| 560 | 560 |
| 561 } // namespace | 561 } // namespace |
| 562 | 562 |
| 563 } // namespace sync_preferences | 563 } // namespace sync_preferences |
| OLD | NEW |