Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(33)

Side by Side Diff: chrome/browser/extensions/api/storage/settings_sync_unittest.cc

Issue 2777063003: Stop passing raw pointers to base::Value API in c/b/chromeos and c/b/extensions (Closed)
Patch Set: Fix SupervisedUserWhitelistInstaller Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/files/scoped_temp_dir.h" 11 #include "base/files/scoped_temp_dir.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/json/json_writer.h" 13 #include "base/json/json_writer.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/message_loop/message_loop.h" 15 #include "base/message_loop/message_loop.h"
16 #include "base/run_loop.h" 16 #include "base/run_loop.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
jdoerrie 2017/04/06 14:25:50 #include "base/values.h"
vabr (Chromium) 2017/04/07 20:40:40 Done.
18 #include "build/build_config.h" 18 #include "build/build_config.h"
19 #include "chrome/browser/extensions/api/storage/settings_sync_util.h" 19 #include "chrome/browser/extensions/api/storage/settings_sync_util.h"
20 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h" 20 #include "chrome/browser/extensions/api/storage/sync_value_store_cache.h"
21 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h" 21 #include "chrome/browser/extensions/api/storage/syncable_settings_storage.h"
22 #include "chrome/test/base/testing_profile.h" 22 #include "chrome/test/base/testing_profile.h"
23 #include "components/sync/model/sync_change_processor.h" 23 #include "components/sync/model/sync_change_processor.h"
24 #include "components/sync/model/sync_change_processor_wrapper_for_test.h" 24 #include "components/sync/model/sync_change_processor_wrapper_for_test.h"
25 #include "components/sync/model/sync_error_factory.h" 25 #include "components/sync/model/sync_error_factory.h"
26 #include "components/sync/model/sync_error_factory_mock.h" 26 #include "components/sync/model/sync_error_factory_mock.h"
27 #include "content/public/test/test_browser_thread.h" 27 #include "content/public/test/test_browser_thread.h"
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 395
396 syncer::SyncDataList sync_data; 396 syncer::SyncDataList sync_data;
397 sync_data.push_back(settings_sync_util::CreateData( 397 sync_data.push_back(settings_sync_util::CreateData(
398 "s1", "foo", value1, model_type)); 398 "s1", "foo", value1, model_type));
399 sync_data.push_back(settings_sync_util::CreateData( 399 sync_data.push_back(settings_sync_util::CreateData(
400 "s2", "bar", value2, model_type)); 400 "s2", "bar", value2, model_type));
401 GetSyncableService(model_type) 401 GetSyncableService(model_type)
402 ->MergeDataAndStartSyncing( 402 ->MergeDataAndStartSyncing(
403 model_type, sync_data, std::move(sync_processor_wrapper_), 403 model_type, sync_data, std::move(sync_processor_wrapper_),
404 base::MakeUnique<syncer::SyncErrorFactoryMock>()); 404 base::MakeUnique<syncer::SyncErrorFactoryMock>());
405 expected1.Set("foo", value1.DeepCopy()); 405 expected1.Set("foo", value1.CreateDeepCopy());
406 expected2.Set("bar", value2.DeepCopy()); 406 expected2.Set("bar", value2.CreateDeepCopy());
407 407
408 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); 408 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type);
409 409
410 // All changes should be local, so no sync changes. 410 // All changes should be local, so no sync changes.
411 EXPECT_EQ(0u, sync_processor_->changes().size()); 411 EXPECT_EQ(0u, sync_processor_->changes().size());
412 412
413 // Sync settings should have been pushed to local settings. 413 // Sync settings should have been pushed to local settings.
414 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 414 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
415 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 415 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
416 416
(...skipping 10 matching lines...) Expand all
427 427
428 // Maintain dictionaries mirrored to the expected values of the settings in 428 // Maintain dictionaries mirrored to the expected values of the settings in
429 // each storage area. 429 // each storage area.
430 base::DictionaryValue expected1, expected2; 430 base::DictionaryValue expected1, expected2;
431 431
432 // Make storage1 initialised from local data, storage2 initialised from sync. 432 // Make storage1 initialised from local data, storage2 initialised from sync.
433 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); 433 ValueStore* storage1 = AddExtensionAndGetStorage("s1", type);
434 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); 434 ValueStore* storage2 = AddExtensionAndGetStorage("s2", type);
435 435
436 storage1->Set(DEFAULTS, "foo", value1); 436 storage1->Set(DEFAULTS, "foo", value1);
437 expected1.Set("foo", value1.DeepCopy()); 437 expected1.Set("foo", value1.CreateDeepCopy());
438 438
439 syncer::SyncDataList sync_data; 439 syncer::SyncDataList sync_data;
440 sync_data.push_back(settings_sync_util::CreateData( 440 sync_data.push_back(settings_sync_util::CreateData(
441 "s2", "bar", value2, model_type)); 441 "s2", "bar", value2, model_type));
442 442
443 GetSyncableService(model_type) 443 GetSyncableService(model_type)
444 ->MergeDataAndStartSyncing( 444 ->MergeDataAndStartSyncing(
445 model_type, sync_data, std::move(sync_processor_wrapper_), 445 model_type, sync_data, std::move(sync_processor_wrapper_),
446 base::MakeUnique<syncer::SyncErrorFactoryMock>()); 446 base::MakeUnique<syncer::SyncErrorFactoryMock>());
447 expected2.Set("bar", value2.DeepCopy()); 447 expected2.Set("bar", value2.CreateDeepCopy());
448 448
449 // Make sync add some settings. 449 // Make sync add some settings.
450 syncer::SyncChangeList change_list; 450 syncer::SyncChangeList change_list;
451 change_list.push_back(settings_sync_util::CreateAdd( 451 change_list.push_back(settings_sync_util::CreateAdd(
452 "s1", "bar", value2, model_type)); 452 "s1", "bar", value2, model_type));
453 change_list.push_back(settings_sync_util::CreateAdd( 453 change_list.push_back(settings_sync_util::CreateAdd(
454 "s2", "foo", value1, model_type)); 454 "s2", "foo", value1, model_type));
455 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 455 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
456 expected1.Set("bar", value2.DeepCopy()); 456 expected1.Set("bar", value2.CreateDeepCopy());
457 expected2.Set("foo", value1.DeepCopy()); 457 expected2.Set("foo", value1.CreateDeepCopy());
458 458
459 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 459 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
460 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 460 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
461 461
462 // Make sync update some settings, storage1 the new setting, storage2 the 462 // Make sync update some settings, storage1 the new setting, storage2 the
463 // initial setting. 463 // initial setting.
464 change_list.clear(); 464 change_list.clear();
465 change_list.push_back(settings_sync_util::CreateUpdate( 465 change_list.push_back(settings_sync_util::CreateUpdate(
466 "s1", "bar", value2, model_type)); 466 "s1", "bar", value2, model_type));
467 change_list.push_back(settings_sync_util::CreateUpdate( 467 change_list.push_back(settings_sync_util::CreateUpdate(
468 "s2", "bar", value1, model_type)); 468 "s2", "bar", value1, model_type));
469 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 469 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
470 expected1.Set("bar", value2.DeepCopy()); 470 expected1.Set("bar", value2.CreateDeepCopy());
471 expected2.Set("bar", value1.DeepCopy()); 471 expected2.Set("bar", value1.CreateDeepCopy());
472 472
473 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 473 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
474 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 474 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
475 475
476 // Make sync remove some settings, storage1 the initial setting, storage2 the 476 // Make sync remove some settings, storage1 the initial setting, storage2 the
477 // new setting. 477 // new setting.
478 change_list.clear(); 478 change_list.clear();
479 change_list.push_back(settings_sync_util::CreateDelete( 479 change_list.push_back(settings_sync_util::CreateDelete(
480 "s1", "foo", model_type)); 480 "s1", "foo", model_type));
481 change_list.push_back(settings_sync_util::CreateDelete( 481 change_list.push_back(settings_sync_util::CreateDelete(
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
700 "bad", "foo", fooValue, model_type)); 700 "bad", "foo", fooValue, model_type));
701 GetSyncableService(model_type) 701 GetSyncableService(model_type)
702 ->MergeDataAndStartSyncing( 702 ->MergeDataAndStartSyncing(
703 model_type, sync_data, std::move(sync_processor_wrapper_), 703 model_type, sync_data, std::move(sync_processor_wrapper_),
704 base::MakeUnique<syncer::SyncErrorFactoryMock>()); 704 base::MakeUnique<syncer::SyncErrorFactoryMock>());
705 } 705 }
706 GetExisting("bad")->set_status_code(ValueStore::OK); 706 GetExisting("bad")->set_status_code(ValueStore::OK);
707 707
708 { 708 {
709 base::DictionaryValue dict; 709 base::DictionaryValue dict;
710 dict.Set("foo", fooValue.DeepCopy()); 710 dict.Set("foo", fooValue.CreateDeepCopy());
711 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 711 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
712 } 712 }
713 { 713 {
714 base::DictionaryValue dict; 714 base::DictionaryValue dict;
715 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 715 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
716 } 716 }
717 717
718 // Changes made to good should be sent to sync, changes from bad shouldn't. 718 // Changes made to good should be sent to sync, changes from bad shouldn't.
719 sync_processor_->ClearChanges(); 719 sync_processor_->ClearChanges();
720 good->Set(DEFAULTS, "bar", barValue); 720 good->Set(DEFAULTS, "bar", barValue);
721 bad->Set(DEFAULTS, "bar", barValue); 721 bad->Set(DEFAULTS, "bar", barValue);
722 722
723 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, 723 EXPECT_EQ(syncer::SyncChange::ACTION_ADD,
724 sync_processor_->GetOnlyChange("good", "bar")->change_type()); 724 sync_processor_->GetOnlyChange("good", "bar")->change_type());
725 EXPECT_EQ(1u, sync_processor_->changes().size()); 725 EXPECT_EQ(1u, sync_processor_->changes().size());
726 726
727 { 727 {
728 base::DictionaryValue dict; 728 base::DictionaryValue dict;
729 dict.Set("foo", fooValue.DeepCopy()); 729 dict.Set("foo", fooValue.CreateDeepCopy());
730 dict.Set("bar", barValue.DeepCopy()); 730 dict.Set("bar", barValue.CreateDeepCopy());
731 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 731 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
732 } 732 }
733 { 733 {
734 base::DictionaryValue dict; 734 base::DictionaryValue dict;
735 dict.Set("bar", barValue.DeepCopy()); 735 dict.Set("bar", barValue.CreateDeepCopy());
736 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 736 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
737 } 737 }
738 738
739 // Changes received from sync should go to good but not bad (even when it's 739 // Changes received from sync should go to good but not bad (even when it's
740 // not failing). 740 // not failing).
741 { 741 {
742 syncer::SyncChangeList change_list; 742 syncer::SyncChangeList change_list;
743 change_list.push_back(settings_sync_util::CreateUpdate( 743 change_list.push_back(settings_sync_util::CreateUpdate(
744 "good", "foo", barValue, model_type)); 744 "good", "foo", barValue, model_type));
745 // (Sending UPDATE here even though it's adding, since that's what the state 745 // (Sending UPDATE here even though it's adding, since that's what the state
746 // of sync is. In any case, it won't work.) 746 // of sync is. In any case, it won't work.)
747 change_list.push_back(settings_sync_util::CreateUpdate( 747 change_list.push_back(settings_sync_util::CreateUpdate(
748 "bad", "foo", barValue, model_type)); 748 "bad", "foo", barValue, model_type));
749 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 749 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
750 } 750 }
751 751
752 { 752 {
753 base::DictionaryValue dict; 753 base::DictionaryValue dict;
754 dict.Set("foo", barValue.DeepCopy()); 754 dict.Set("foo", barValue.CreateDeepCopy());
755 dict.Set("bar", barValue.DeepCopy()); 755 dict.Set("bar", barValue.CreateDeepCopy());
756 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 756 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
757 } 757 }
758 { 758 {
759 base::DictionaryValue dict; 759 base::DictionaryValue dict;
760 dict.Set("bar", barValue.DeepCopy()); 760 dict.Set("bar", barValue.CreateDeepCopy());
761 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 761 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
762 } 762 }
763 763
764 // Changes made to bad still shouldn't go to sync, even though it didn't fail 764 // Changes made to bad still shouldn't go to sync, even though it didn't fail
765 // last time. 765 // last time.
766 sync_processor_->ClearChanges(); 766 sync_processor_->ClearChanges();
767 good->Set(DEFAULTS, "bar", fooValue); 767 good->Set(DEFAULTS, "bar", fooValue);
768 bad->Set(DEFAULTS, "bar", fooValue); 768 bad->Set(DEFAULTS, "bar", fooValue);
769 769
770 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, 770 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE,
771 sync_processor_->GetOnlyChange("good", "bar")->change_type()); 771 sync_processor_->GetOnlyChange("good", "bar")->change_type());
772 EXPECT_EQ(1u, sync_processor_->changes().size()); 772 EXPECT_EQ(1u, sync_processor_->changes().size());
773 773
774 { 774 {
775 base::DictionaryValue dict; 775 base::DictionaryValue dict;
776 dict.Set("foo", barValue.DeepCopy()); 776 dict.Set("foo", barValue.CreateDeepCopy());
777 dict.Set("bar", fooValue.DeepCopy()); 777 dict.Set("bar", fooValue.CreateDeepCopy());
778 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 778 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
779 } 779 }
780 { 780 {
781 base::DictionaryValue dict; 781 base::DictionaryValue dict;
782 dict.Set("bar", fooValue.DeepCopy()); 782 dict.Set("bar", fooValue.CreateDeepCopy());
783 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 783 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
784 } 784 }
785 785
786 // Failing ProcessSyncChanges shouldn't go to the storage. 786 // Failing ProcessSyncChanges shouldn't go to the storage.
787 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); 787 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION);
788 { 788 {
789 syncer::SyncChangeList change_list; 789 syncer::SyncChangeList change_list;
790 change_list.push_back(settings_sync_util::CreateUpdate( 790 change_list.push_back(settings_sync_util::CreateUpdate(
791 "good", "foo", fooValue, model_type)); 791 "good", "foo", fooValue, model_type));
792 // (Ditto.) 792 // (Ditto.)
793 change_list.push_back(settings_sync_util::CreateUpdate( 793 change_list.push_back(settings_sync_util::CreateUpdate(
794 "bad", "foo", fooValue, model_type)); 794 "bad", "foo", fooValue, model_type));
795 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 795 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
796 } 796 }
797 GetExisting("bad")->set_status_code(ValueStore::OK); 797 GetExisting("bad")->set_status_code(ValueStore::OK);
798 798
799 { 799 {
800 base::DictionaryValue dict; 800 base::DictionaryValue dict;
801 dict.Set("foo", fooValue.DeepCopy()); 801 dict.Set("foo", fooValue.CreateDeepCopy());
802 dict.Set("bar", fooValue.DeepCopy()); 802 dict.Set("bar", fooValue.CreateDeepCopy());
803 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 803 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
804 } 804 }
805 { 805 {
806 base::DictionaryValue dict; 806 base::DictionaryValue dict;
807 dict.Set("bar", fooValue.DeepCopy()); 807 dict.Set("bar", fooValue.CreateDeepCopy());
808 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 808 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
809 } 809 }
810 810
811 // Restarting sync should make bad start syncing again. 811 // Restarting sync should make bad start syncing again.
812 sync_processor_->ClearChanges(); 812 sync_processor_->ClearChanges();
813 GetSyncableService(model_type)->StopSyncing(model_type); 813 GetSyncableService(model_type)->StopSyncing(model_type);
814 sync_processor_wrapper_.reset( 814 sync_processor_wrapper_.reset(
815 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); 815 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
816 GetSyncableService(model_type) 816 GetSyncableService(model_type)
817 ->MergeDataAndStartSyncing( 817 ->MergeDataAndStartSyncing(
(...skipping 27 matching lines...) Expand all
845 syncer::SyncChangeList change_list; 845 syncer::SyncChangeList change_list;
846 change_list.push_back(settings_sync_util::CreateUpdate( 846 change_list.push_back(settings_sync_util::CreateUpdate(
847 "good", "bar", fooValue, model_type)); 847 "good", "bar", fooValue, model_type));
848 change_list.push_back(settings_sync_util::CreateUpdate( 848 change_list.push_back(settings_sync_util::CreateUpdate(
849 "bad", "bar", fooValue, model_type)); 849 "bad", "bar", fooValue, model_type));
850 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 850 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
851 } 851 }
852 852
853 { 853 {
854 base::DictionaryValue dict; 854 base::DictionaryValue dict;
855 dict.Set("foo", fooValue.DeepCopy()); 855 dict.Set("foo", fooValue.CreateDeepCopy());
856 dict.Set("bar", fooValue.DeepCopy()); 856 dict.Set("bar", fooValue.CreateDeepCopy());
857 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 857 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
858 } 858 }
859 { 859 {
860 base::DictionaryValue dict; 860 base::DictionaryValue dict;
861 dict.Set("bar", fooValue.DeepCopy()); 861 dict.Set("bar", fooValue.CreateDeepCopy());
862 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 862 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
863 } 863 }
864 } 864 }
865 865
866 TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { 866 TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) {
867 // The test above tests a failing ProcessSyncChanges too, but here test with 867 // The test above tests a failing ProcessSyncChanges too, but here test with
868 // an initially passing MergeDataAndStartSyncing. 868 // an initially passing MergeDataAndStartSyncing.
869 syncer::ModelType model_type = syncer::APP_SETTINGS; 869 syncer::ModelType model_type = syncer::APP_SETTINGS;
870 Manifest::Type type = Manifest::TYPE_LEGACY_PACKAGED_APP; 870 Manifest::Type type = Manifest::TYPE_LEGACY_PACKAGED_APP;
871 871
(...skipping 13 matching lines...) Expand all
885 GetSyncableService(model_type) 885 GetSyncableService(model_type)
886 ->MergeDataAndStartSyncing( 886 ->MergeDataAndStartSyncing(
887 model_type, sync_data, std::move(sync_processor_wrapper_), 887 model_type, sync_data, std::move(sync_processor_wrapper_),
888 base::MakeUnique<syncer::SyncErrorFactoryMock>()); 888 base::MakeUnique<syncer::SyncErrorFactoryMock>());
889 } 889 }
890 890
891 EXPECT_EQ(0u, sync_processor_->changes().size()); 891 EXPECT_EQ(0u, sync_processor_->changes().size());
892 892
893 { 893 {
894 base::DictionaryValue dict; 894 base::DictionaryValue dict;
895 dict.Set("foo", fooValue.DeepCopy()); 895 dict.Set("foo", fooValue.CreateDeepCopy());
896 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 896 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
897 } 897 }
898 { 898 {
899 base::DictionaryValue dict; 899 base::DictionaryValue dict;
900 dict.Set("foo", fooValue.DeepCopy()); 900 dict.Set("foo", fooValue.CreateDeepCopy());
901 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 901 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
902 } 902 }
903 903
904 // Now fail ProcessSyncChanges for bad. 904 // Now fail ProcessSyncChanges for bad.
905 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); 905 GetExisting("bad")->set_status_code(ValueStore::CORRUPTION);
906 { 906 {
907 syncer::SyncChangeList change_list; 907 syncer::SyncChangeList change_list;
908 change_list.push_back(settings_sync_util::CreateAdd( 908 change_list.push_back(settings_sync_util::CreateAdd(
909 "good", "bar", barValue, model_type)); 909 "good", "bar", barValue, model_type));
910 change_list.push_back(settings_sync_util::CreateAdd( 910 change_list.push_back(settings_sync_util::CreateAdd(
911 "bad", "bar", barValue, model_type)); 911 "bad", "bar", barValue, model_type));
912 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 912 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
913 } 913 }
914 GetExisting("bad")->set_status_code(ValueStore::OK); 914 GetExisting("bad")->set_status_code(ValueStore::OK);
915 915
916 { 916 {
917 base::DictionaryValue dict; 917 base::DictionaryValue dict;
918 dict.Set("foo", fooValue.DeepCopy()); 918 dict.Set("foo", fooValue.CreateDeepCopy());
919 dict.Set("bar", barValue.DeepCopy()); 919 dict.Set("bar", barValue.CreateDeepCopy());
920 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 920 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
921 } 921 }
922 { 922 {
923 base::DictionaryValue dict; 923 base::DictionaryValue dict;
924 dict.Set("foo", fooValue.DeepCopy()); 924 dict.Set("foo", fooValue.CreateDeepCopy());
925 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 925 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
926 } 926 }
927 927
928 // No more changes sent to sync for bad. 928 // No more changes sent to sync for bad.
929 sync_processor_->ClearChanges(); 929 sync_processor_->ClearChanges();
930 good->Set(DEFAULTS, "foo", barValue); 930 good->Set(DEFAULTS, "foo", barValue);
931 bad->Set(DEFAULTS, "foo", barValue); 931 bad->Set(DEFAULTS, "foo", barValue);
932 932
933 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, 933 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE,
934 sync_processor_->GetOnlyChange("good", "foo")->change_type()); 934 sync_processor_->GetOnlyChange("good", "foo")->change_type());
935 EXPECT_EQ(1u, sync_processor_->changes().size()); 935 EXPECT_EQ(1u, sync_processor_->changes().size());
936 936
937 // No more changes received from sync should go to bad. 937 // No more changes received from sync should go to bad.
938 { 938 {
939 syncer::SyncChangeList change_list; 939 syncer::SyncChangeList change_list;
940 change_list.push_back(settings_sync_util::CreateAdd( 940 change_list.push_back(settings_sync_util::CreateAdd(
941 "good", "foo", fooValue, model_type)); 941 "good", "foo", fooValue, model_type));
942 change_list.push_back(settings_sync_util::CreateAdd( 942 change_list.push_back(settings_sync_util::CreateAdd(
943 "bad", "foo", fooValue, model_type)); 943 "bad", "foo", fooValue, model_type));
944 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 944 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
945 } 945 }
946 946
947 { 947 {
948 base::DictionaryValue dict; 948 base::DictionaryValue dict;
949 dict.Set("foo", fooValue.DeepCopy()); 949 dict.Set("foo", fooValue.CreateDeepCopy());
950 dict.Set("bar", barValue.DeepCopy()); 950 dict.Set("bar", barValue.CreateDeepCopy());
951 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 951 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
952 } 952 }
953 { 953 {
954 base::DictionaryValue dict; 954 base::DictionaryValue dict;
955 dict.Set("foo", barValue.DeepCopy()); 955 dict.Set("foo", barValue.CreateDeepCopy());
956 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 956 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
957 } 957 }
958 } 958 }
959 959
960 TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { 960 TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) {
961 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; 961 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS;
962 Manifest::Type type = Manifest::TYPE_EXTENSION; 962 Manifest::Type type = Manifest::TYPE_EXTENSION;
963 963
964 base::Value fooValue("fooValue"); 964 base::Value fooValue("fooValue");
965 base::Value barValue("barValue"); 965 base::Value barValue("barValue");
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1047 "good", "foo", barValue, model_type)); 1047 "good", "foo", barValue, model_type));
1048 // (Sending ADD here even though it's updating, since that's what the state 1048 // (Sending ADD here even though it's updating, since that's what the state
1049 // of sync is. In any case, it won't work.) 1049 // of sync is. In any case, it won't work.)
1050 change_list.push_back(settings_sync_util::CreateAdd( 1050 change_list.push_back(settings_sync_util::CreateAdd(
1051 "bad", "foo", barValue, model_type)); 1051 "bad", "foo", barValue, model_type));
1052 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 1052 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
1053 } 1053 }
1054 1054
1055 { 1055 {
1056 base::DictionaryValue dict; 1056 base::DictionaryValue dict;
1057 dict.Set("foo", barValue.DeepCopy()); 1057 dict.Set("foo", barValue.CreateDeepCopy());
1058 dict.Set("bar", barValue.DeepCopy()); 1058 dict.Set("bar", barValue.CreateDeepCopy());
1059 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 1059 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
1060 } 1060 }
1061 { 1061 {
1062 base::DictionaryValue dict; 1062 base::DictionaryValue dict;
1063 dict.Set("foo", fooValue.DeepCopy()); 1063 dict.Set("foo", fooValue.CreateDeepCopy());
1064 dict.Set("bar", barValue.DeepCopy()); 1064 dict.Set("bar", barValue.CreateDeepCopy());
1065 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1065 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1066 } 1066 }
1067 1067
1068 // Re-enabling sync without failing should cause the local changes from bad 1068 // Re-enabling sync without failing should cause the local changes from bad
1069 // to be pushed to sync successfully, as should future changes to bad. 1069 // to be pushed to sync successfully, as should future changes to bad.
1070 sync_processor_->ClearChanges(); 1070 sync_processor_->ClearChanges();
1071 GetSyncableService(model_type)->StopSyncing(model_type); 1071 GetSyncableService(model_type)->StopSyncing(model_type);
1072 sync_processor_wrapper_.reset( 1072 sync_processor_wrapper_.reset(
1073 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); 1073 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
1074 GetSyncableService(model_type) 1074 GetSyncableService(model_type)
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 syncer::SyncChangeList change_list; 1133 syncer::SyncChangeList change_list;
1134 change_list.push_back(settings_sync_util::CreateAdd( 1134 change_list.push_back(settings_sync_util::CreateAdd(
1135 "good", "bar", barValue, model_type)); 1135 "good", "bar", barValue, model_type));
1136 change_list.push_back(settings_sync_util::CreateAdd( 1136 change_list.push_back(settings_sync_util::CreateAdd(
1137 "bad", "bar", barValue, model_type)); 1137 "bad", "bar", barValue, model_type));
1138 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 1138 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
1139 } 1139 }
1140 1140
1141 { 1141 {
1142 base::DictionaryValue dict; 1142 base::DictionaryValue dict;
1143 dict.Set("foo", barValue.DeepCopy()); 1143 dict.Set("foo", barValue.CreateDeepCopy());
1144 dict.Set("bar", barValue.DeepCopy()); 1144 dict.Set("bar", barValue.CreateDeepCopy());
1145 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 1145 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
1146 } 1146 }
1147 { 1147 {
1148 base::DictionaryValue dict; 1148 base::DictionaryValue dict;
1149 dict.Set("foo", barValue.DeepCopy()); 1149 dict.Set("foo", barValue.CreateDeepCopy());
1150 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1150 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1151 } 1151 }
1152 1152
1153 // Restarting sync makes everything work again. 1153 // Restarting sync makes everything work again.
1154 sync_processor_->ClearChanges(); 1154 sync_processor_->ClearChanges();
1155 GetSyncableService(model_type)->StopSyncing(model_type); 1155 GetSyncableService(model_type)->StopSyncing(model_type);
1156 sync_processor_wrapper_.reset( 1156 sync_processor_wrapper_.reset(
1157 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); 1157 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
1158 GetSyncableService(model_type) 1158 GetSyncableService(model_type)
1159 ->MergeDataAndStartSyncing( 1159 ->MergeDataAndStartSyncing(
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1220 syncer::SyncChangeList change_list; 1220 syncer::SyncChangeList change_list;
1221 change_list.push_back(settings_sync_util::CreateAdd( 1221 change_list.push_back(settings_sync_util::CreateAdd(
1222 "good", "bar", barValue, model_type)); 1222 "good", "bar", barValue, model_type));
1223 change_list.push_back(settings_sync_util::CreateAdd( 1223 change_list.push_back(settings_sync_util::CreateAdd(
1224 "bad", "bar", barValue, model_type)); 1224 "bad", "bar", barValue, model_type));
1225 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 1225 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
1226 } 1226 }
1227 1227
1228 { 1228 {
1229 base::DictionaryValue dict; 1229 base::DictionaryValue dict;
1230 dict.Set("foo", barValue.DeepCopy()); 1230 dict.Set("foo", barValue.CreateDeepCopy());
1231 dict.Set("bar", barValue.DeepCopy()); 1231 dict.Set("bar", barValue.CreateDeepCopy());
1232 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 1232 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
1233 } 1233 }
1234 { 1234 {
1235 base::DictionaryValue dict; 1235 base::DictionaryValue dict;
1236 dict.Set("foo", barValue.DeepCopy()); 1236 dict.Set("foo", barValue.CreateDeepCopy());
1237 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 1237 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
1238 } 1238 }
1239 1239
1240 // Restarting sync makes everything work again. 1240 // Restarting sync makes everything work again.
1241 sync_processor_->ClearChanges(); 1241 sync_processor_->ClearChanges();
1242 GetSyncableService(model_type)->StopSyncing(model_type); 1242 GetSyncableService(model_type)->StopSyncing(model_type);
1243 sync_processor_wrapper_.reset( 1243 sync_processor_wrapper_.reset(
1244 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); 1244 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get()));
1245 GetSyncableService(model_type) 1245 GetSyncableService(model_type)
1246 ->MergeDataAndStartSyncing( 1246 ->MergeDataAndStartSyncing(
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 { 1296 {
1297 syncer::SyncChangeList change_list; 1297 syncer::SyncChangeList change_list;
1298 change_list.push_back(settings_sync_util::CreateAdd( 1298 change_list.push_back(settings_sync_util::CreateAdd(
1299 "s1", "large_value", large_value, model_type)); 1299 "s1", "large_value", large_value, model_type));
1300 change_list.push_back(settings_sync_util::CreateAdd( 1300 change_list.push_back(settings_sync_util::CreateAdd(
1301 "s2", "large_value", large_value, model_type)); 1301 "s2", "large_value", large_value, model_type));
1302 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 1302 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
1303 } 1303 }
1304 { 1304 {
1305 base::DictionaryValue expected; 1305 base::DictionaryValue expected;
1306 expected.Set("large_value", large_value.DeepCopy()); 1306 expected.Set("large_value", large_value.CreateDeepCopy());
1307 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); 1307 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get());
1308 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); 1308 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get());
1309 } 1309 }
1310 1310
1311 GetSyncableService(model_type)->StopSyncing(model_type); 1311 GetSyncableService(model_type)->StopSyncing(model_type);
1312 } 1312 }
1313 1313
1314 TEST_F(ExtensionSettingsSyncTest, Dots) { 1314 TEST_F(ExtensionSettingsSyncTest, Dots) {
1315 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; 1315 syncer::ModelType model_type = syncer::EXTENSION_SETTINGS;
1316 Manifest::Type type = Manifest::TYPE_EXTENSION; 1316 Manifest::Type type = Manifest::TYPE_EXTENSION;
(...skipping 11 matching lines...) Expand all
1328 model_type, sync_data_list, std::move(sync_processor_wrapper_), 1328 model_type, sync_data_list, std::move(sync_processor_wrapper_),
1329 base::MakeUnique<syncer::SyncErrorFactoryMock>()); 1329 base::MakeUnique<syncer::SyncErrorFactoryMock>());
1330 } 1330 }
1331 1331
1332 // Test dots in keys that come from sync. 1332 // Test dots in keys that come from sync.
1333 { 1333 {
1334 ValueStore::ReadResult data = storage->Get(); 1334 ValueStore::ReadResult data = storage->Get();
1335 ASSERT_TRUE(data->status().ok()); 1335 ASSERT_TRUE(data->status().ok());
1336 1336
1337 base::DictionaryValue expected_data; 1337 base::DictionaryValue expected_data;
1338 expected_data.SetWithoutPathExpansion("key.with.dot", 1338 expected_data.SetWithoutPathExpansion(
1339 new base::Value("value")); 1339 "key.with.dot", base::MakeUnique<base::Value>("value"));
1340 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); 1340 EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings()));
1341 } 1341 }
1342 1342
1343 // Test dots in keys going to sync. 1343 // Test dots in keys going to sync.
1344 { 1344 {
1345 std::unique_ptr<base::Value> string_value(new base::Value("spot")); 1345 std::unique_ptr<base::Value> string_value(new base::Value("spot"));
1346 storage->Set(DEFAULTS, "key.with.spot", *string_value); 1346 storage->Set(DEFAULTS, "key.with.spot", *string_value);
1347 1347
1348 ASSERT_EQ(1u, sync_processor_->changes().size()); 1348 ASSERT_EQ(1u, sync_processor_->changes().size());
1349 SettingSyncData* sync_data = sync_processor_->changes()[0].get(); 1349 SettingSyncData* sync_data = sync_processor_->changes()[0].get();
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1407 settings_namespace::SYNC, 1407 settings_namespace::SYNC,
1408 base::Bind(&UnlimitedSyncStorageTestCallback)); 1408 base::Bind(&UnlimitedSyncStorageTestCallback));
1409 frontend_->RunWithStorage(extension, 1409 frontend_->RunWithStorage(extension,
1410 settings_namespace::LOCAL, 1410 settings_namespace::LOCAL,
1411 base::Bind(&UnlimitedLocalStorageTestCallback)); 1411 base::Bind(&UnlimitedLocalStorageTestCallback));
1412 1412
1413 base::RunLoop().RunUntilIdle(); 1413 base::RunLoop().RunUntilIdle();
1414 } 1414 }
1415 1415
1416 } // namespace extensions 1416 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698