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 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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::Value 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.CreateDeepCopy()); |
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::Value 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.CreateDeepCopy()); |
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::Value 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 |
408 // to merge the local and sync value. Make sure the merge logic doesn't merge | 408 // to merge the local and sync value. Make sure the merge logic doesn't merge |
409 // managed preferences. | 409 // managed preferences. |
410 TEST_F(PrefServiceSyncableTest, ManagedListPreferences) { | 410 TEST_F(PrefServiceSyncableTest, ManagedListPreferences) { |
411 // Make the list of urls to restore on startup managed. | 411 // Make the list of urls to restore on startup managed. |
412 base::ListValue managed_value; | 412 base::ListValue managed_value; |
413 managed_value.AppendString(kExampleUrl0); | 413 managed_value.AppendString(kExampleUrl0); |
414 managed_value.AppendString(kExampleUrl1); | 414 managed_value.AppendString(kExampleUrl1); |
415 prefs_.SetManagedPref(kListPrefName, managed_value.DeepCopy()); | 415 prefs_.SetManagedPref(kListPrefName, managed_value.CreateDeepCopy()); |
416 | 416 |
417 // Set a cloud version. | 417 // Set a cloud version. |
418 syncer::SyncDataList in; | 418 syncer::SyncDataList in; |
419 syncer::SyncChangeList out; | 419 syncer::SyncChangeList out; |
420 base::ListValue urls_to_restore; | 420 base::ListValue urls_to_restore; |
421 urls_to_restore.AppendString(kExampleUrl1); | 421 urls_to_restore.AppendString(kExampleUrl1); |
422 urls_to_restore.AppendString(kExampleUrl2); | 422 urls_to_restore.AppendString(kExampleUrl2); |
423 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); | 423 AddToRemoteDataList(kListPrefName, urls_to_restore, &in); |
424 | 424 |
425 // Start sync and verify the synced value didn't get merged. | 425 // Start sync and verify the synced value didn't get merged. |
426 InitWithSyncDataTakeOutput(in, &out); | 426 InitWithSyncDataTakeOutput(in, &out); |
427 EXPECT_FALSE(FindValue(kListPrefName, out).get()); | 427 EXPECT_FALSE(FindValue(kListPrefName, out).get()); |
428 out.clear(); | 428 out.clear(); |
429 | 429 |
430 // Changing the user's urls to restore on startup pref should not sync | 430 // Changing the user's urls to restore on startup pref should not sync |
431 // anything. | 431 // anything. |
432 base::ListValue user_value; | 432 base::ListValue user_value; |
433 user_value.AppendString("http://chromium.org"); | 433 user_value.AppendString("http://chromium.org"); |
434 prefs_.SetUserPref(kListPrefName, user_value.DeepCopy()); | 434 prefs_.SetUserPref(kListPrefName, user_value.CreateDeepCopy()); |
435 EXPECT_FALSE(FindValue(kListPrefName, out).get()); | 435 EXPECT_FALSE(FindValue(kListPrefName, out).get()); |
436 | 436 |
437 // An incoming sync transaction should change the user value, not the managed | 437 // An incoming sync transaction should change the user value, not the managed |
438 // value. | 438 // value. |
439 base::ListValue sync_value; | 439 base::ListValue sync_value; |
440 sync_value.AppendString("http://crbug.com"); | 440 sync_value.AppendString("http://crbug.com"); |
441 syncer::SyncChangeList list; | 441 syncer::SyncChangeList list; |
442 list.push_back(MakeRemoteChange(1, kListPrefName, sync_value, | 442 list.push_back(MakeRemoteChange(1, kListPrefName, sync_value, |
443 SyncChange::ACTION_UPDATE)); | 443 SyncChange::ACTION_UPDATE)); |
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::Value 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::Value 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.CreateDeepCopy()); |
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::Value 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::Value 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.CreateDeepCopy()); |
489 | 489 |
490 // Change the sync value. | 490 // Change the sync value. |
491 base::Value 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))); |
(...skipping 12 matching lines...) Expand all Loading... |
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::Value 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.CreateDeepCopy()); |
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. |
530 EXPECT_TRUE(pref->IsDefaultValue()); | 530 EXPECT_TRUE(pref->IsDefaultValue()); |
531 // There should still be no synced value. | 531 // There should still be no synced value. |
(...skipping 22 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 |