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

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

Issue 24021002: Propagate more information about ValueStore errors to callers, notably an (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add Pass*() Created 7 years, 3 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 | Annotate | Revision Log
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
7 #include "base/json/json_reader.h" 7 #include "base/json/json_reader.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 } 71 }
72 72
73 // Returns whether the result of a storage operation is an expected value. 73 // Returns whether the result of a storage operation is an expected value.
74 // Logs when different. 74 // Logs when different.
75 testing::AssertionResult SettingsEq( 75 testing::AssertionResult SettingsEq(
76 const char* _1, const char* _2, 76 const char* _1, const char* _2,
77 const DictionaryValue& expected, 77 const DictionaryValue& expected,
78 ValueStore::ReadResult actual) { 78 ValueStore::ReadResult actual) {
79 if (actual->HasError()) { 79 if (actual->HasError()) {
80 return testing::AssertionFailure() << 80 return testing::AssertionFailure() <<
81 "Expected: " << GetJson(expected) << 81 "Expected: " << expected <<
82 ", actual has error: " << actual->error(); 82 ", actual has error: " << actual->error().message;
83 } 83 }
84 return ValuesEq(_1, _2, &expected, actual->settings().get()); 84 return ValuesEq(_1, _2, &expected, &actual->settings());
85 } 85 }
86 86
87 // SyncChangeProcessor which just records the changes made, accessed after 87 // SyncChangeProcessor which just records the changes made, accessed after
88 // being converted to the more useful SettingSyncData via changes(). 88 // being converted to the more useful SettingSyncData via changes().
89 class MockSyncChangeProcessor : public syncer::SyncChangeProcessor { 89 class MockSyncChangeProcessor : public syncer::SyncChangeProcessor {
90 public: 90 public:
91 MockSyncChangeProcessor() : fail_all_requests_(false) {} 91 MockSyncChangeProcessor() : fail_all_requests_(false) {}
92 92
93 // syncer::SyncChangeProcessor implementation. 93 // syncer::SyncChangeProcessor implementation.
94 virtual syncer::SyncError ProcessSyncChanges( 94 virtual syncer::SyncError ProcessSyncChanges(
(...skipping 19 matching lines...) Expand all
114 } 114 }
115 115
116 // Mock methods. 116 // Mock methods.
117 117
118 const SettingSyncDataList& changes() { return changes_; } 118 const SettingSyncDataList& changes() { return changes_; }
119 119
120 void ClearChanges() { 120 void ClearChanges() {
121 changes_.clear(); 121 changes_.clear();
122 } 122 }
123 123
124 void SetFailAllRequests(bool fail_all_requests) { 124 void set_fail_all_requests(bool fail_all_requests) {
125 fail_all_requests_ = fail_all_requests; 125 fail_all_requests_ = fail_all_requests;
126 } 126 }
127 127
128 // Returns the only change for a given extension setting. If there is not 128 // Returns the only change for a given extension setting. If there is not
129 // exactly 1 change for that key, a test assertion will fail. 129 // exactly 1 change for that key, a test assertion will fail.
130 SettingSyncData GetOnlyChange( 130 SettingSyncData GetOnlyChange(
131 const std::string& extension_id, const std::string& key) { 131 const std::string& extension_id, const std::string& key) {
132 SettingSyncDataList matching_changes; 132 SettingSyncDataList matching_changes;
133 for (SettingSyncDataList::iterator it = changes_.begin(); 133 for (SettingSyncDataList::iterator it = changes_.begin();
134 it != changes_.end(); ++it) { 134 it != changes_.end(); ++it) {
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 // There is a bit of a convoluted method to get storage areas that can fail; 714 // There is a bit of a convoluted method to get storage areas that can fail;
715 // hand out TestingValueStore object then toggle them failing/succeeding 715 // hand out TestingValueStore object then toggle them failing/succeeding
716 // as necessary. 716 // as necessary.
717 TestingValueStoreFactory* testing_factory = new TestingValueStoreFactory(); 717 TestingValueStoreFactory* testing_factory = new TestingValueStoreFactory();
718 storage_factory_->Reset(testing_factory); 718 storage_factory_->Reset(testing_factory);
719 719
720 ValueStore* good = AddExtensionAndGetStorage("good", type); 720 ValueStore* good = AddExtensionAndGetStorage("good", type);
721 ValueStore* bad = AddExtensionAndGetStorage("bad", type); 721 ValueStore* bad = AddExtensionAndGetStorage("bad", type);
722 722
723 // Make bad fail for incoming sync changes. 723 // Make bad fail for incoming sync changes.
724 testing_factory->GetExisting("bad")->SetFailAllRequests(true); 724 testing_factory->GetExisting("bad")->set_error_code(ValueStore::CORRUPTION);
725 { 725 {
726 syncer::SyncDataList sync_data; 726 syncer::SyncDataList sync_data;
727 sync_data.push_back(settings_sync_util::CreateData( 727 sync_data.push_back(settings_sync_util::CreateData(
728 "good", "foo", fooValue, model_type)); 728 "good", "foo", fooValue, model_type));
729 sync_data.push_back(settings_sync_util::CreateData( 729 sync_data.push_back(settings_sync_util::CreateData(
730 "bad", "foo", fooValue, model_type)); 730 "bad", "foo", fooValue, model_type));
731 GetSyncableService(model_type)->MergeDataAndStartSyncing( 731 GetSyncableService(model_type)->MergeDataAndStartSyncing(
732 model_type, 732 model_type,
733 sync_data, 733 sync_data,
734 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 734 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
735 scoped_ptr<syncer::SyncErrorFactory>( 735 scoped_ptr<syncer::SyncErrorFactory>(
736 new syncer::SyncErrorFactoryMock())); 736 new syncer::SyncErrorFactoryMock()));
737 } 737 }
738 testing_factory->GetExisting("bad")->SetFailAllRequests(false); 738 testing_factory->GetExisting("bad")->set_error_code(ValueStore::OK);
739 739
740 { 740 {
741 DictionaryValue dict; 741 DictionaryValue dict;
742 dict.Set("foo", fooValue.DeepCopy()); 742 dict.Set("foo", fooValue.DeepCopy());
743 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 743 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
744 } 744 }
745 { 745 {
746 DictionaryValue dict; 746 DictionaryValue dict;
747 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 747 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
748 } 748 }
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
811 dict.Set("bar", fooValue.DeepCopy()); 811 dict.Set("bar", fooValue.DeepCopy());
812 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 812 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
813 } 813 }
814 { 814 {
815 DictionaryValue dict; 815 DictionaryValue dict;
816 dict.Set("bar", fooValue.DeepCopy()); 816 dict.Set("bar", fooValue.DeepCopy());
817 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 817 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
818 } 818 }
819 819
820 // Failing ProcessSyncChanges shouldn't go to the storage. 820 // Failing ProcessSyncChanges shouldn't go to the storage.
821 testing_factory->GetExisting("bad")->SetFailAllRequests(true); 821 testing_factory->GetExisting("bad")->set_error_code(ValueStore::CORRUPTION);
822 { 822 {
823 syncer::SyncChangeList change_list; 823 syncer::SyncChangeList change_list;
824 change_list.push_back(settings_sync_util::CreateUpdate( 824 change_list.push_back(settings_sync_util::CreateUpdate(
825 "good", "foo", fooValue, model_type)); 825 "good", "foo", fooValue, model_type));
826 // (Ditto.) 826 // (Ditto.)
827 change_list.push_back(settings_sync_util::CreateUpdate( 827 change_list.push_back(settings_sync_util::CreateUpdate(
828 "bad", "foo", fooValue, model_type)); 828 "bad", "foo", fooValue, model_type));
829 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 829 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
830 } 830 }
831 testing_factory->GetExisting("bad")->SetFailAllRequests(false); 831 testing_factory->GetExisting("bad")->set_error_code(ValueStore::OK);
832 832
833 { 833 {
834 DictionaryValue dict; 834 DictionaryValue dict;
835 dict.Set("foo", fooValue.DeepCopy()); 835 dict.Set("foo", fooValue.DeepCopy());
836 dict.Set("bar", fooValue.DeepCopy()); 836 dict.Set("bar", fooValue.DeepCopy());
837 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 837 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
838 } 838 }
839 { 839 {
840 DictionaryValue dict; 840 DictionaryValue dict;
841 dict.Set("bar", fooValue.DeepCopy()); 841 dict.Set("bar", fooValue.DeepCopy());
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 dict.Set("foo", fooValue.DeepCopy()); 939 dict.Set("foo", fooValue.DeepCopy());
940 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 940 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
941 } 941 }
942 { 942 {
943 DictionaryValue dict; 943 DictionaryValue dict;
944 dict.Set("foo", fooValue.DeepCopy()); 944 dict.Set("foo", fooValue.DeepCopy());
945 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); 945 EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get());
946 } 946 }
947 947
948 // Now fail ProcessSyncChanges for bad. 948 // Now fail ProcessSyncChanges for bad.
949 testing_factory->GetExisting("bad")->SetFailAllRequests(true); 949 testing_factory->GetExisting("bad")->set_error_code(ValueStore::CORRUPTION);
950 { 950 {
951 syncer::SyncChangeList change_list; 951 syncer::SyncChangeList change_list;
952 change_list.push_back(settings_sync_util::CreateAdd( 952 change_list.push_back(settings_sync_util::CreateAdd(
953 "good", "bar", barValue, model_type)); 953 "good", "bar", barValue, model_type));
954 change_list.push_back(settings_sync_util::CreateAdd( 954 change_list.push_back(settings_sync_util::CreateAdd(
955 "bad", "bar", barValue, model_type)); 955 "bad", "bar", barValue, model_type));
956 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 956 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
957 } 957 }
958 testing_factory->GetExisting("bad")->SetFailAllRequests(false); 958 testing_factory->GetExisting("bad")->set_error_code(ValueStore::OK);
959 959
960 { 960 {
961 DictionaryValue dict; 961 DictionaryValue dict;
962 dict.Set("foo", fooValue.DeepCopy()); 962 dict.Set("foo", fooValue.DeepCopy());
963 dict.Set("bar", barValue.DeepCopy()); 963 dict.Set("bar", barValue.DeepCopy());
964 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); 964 EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get());
965 } 965 }
966 { 966 {
967 DictionaryValue dict; 967 DictionaryValue dict;
968 dict.Set("foo", fooValue.DeepCopy()); 968 dict.Set("foo", fooValue.DeepCopy());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1013 storage_factory_->Reset(testing_factory); 1013 storage_factory_->Reset(testing_factory);
1014 1014
1015 ValueStore* good = AddExtensionAndGetStorage("good", type); 1015 ValueStore* good = AddExtensionAndGetStorage("good", type);
1016 ValueStore* bad = AddExtensionAndGetStorage("bad", type); 1016 ValueStore* bad = AddExtensionAndGetStorage("bad", type);
1017 1017
1018 good->Set(DEFAULTS, "foo", fooValue); 1018 good->Set(DEFAULTS, "foo", fooValue);
1019 bad->Set(DEFAULTS, "foo", fooValue); 1019 bad->Set(DEFAULTS, "foo", fooValue);
1020 1020
1021 // Even though bad will fail to get all sync data, sync data should still 1021 // Even though bad will fail to get all sync data, sync data should still
1022 // include that from good. 1022 // include that from good.
1023 testing_factory->GetExisting("bad")->SetFailAllRequests(true); 1023 testing_factory->GetExisting("bad")->set_error_code(ValueStore::CORRUPTION);
1024 { 1024 {
1025 syncer::SyncDataList all_sync_data = 1025 syncer::SyncDataList all_sync_data =
1026 GetSyncableService(model_type)->GetAllSyncData(model_type); 1026 GetSyncableService(model_type)->GetAllSyncData(model_type);
1027 EXPECT_EQ(1u, all_sync_data.size()); 1027 EXPECT_EQ(1u, all_sync_data.size());
1028 EXPECT_EQ("good/foo", all_sync_data[0].GetTag()); 1028 EXPECT_EQ("good/foo", all_sync_data[0].GetTag());
1029 } 1029 }
1030 testing_factory->GetExisting("bad")->SetFailAllRequests(false); 1030 testing_factory->GetExisting("bad")->set_error_code(ValueStore::OK);
1031 1031
1032 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). 1032 // Sync shouldn't be disabled for good (nor bad -- but this is unimportant).
1033 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1033 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1034 model_type, 1034 model_type,
1035 syncer::SyncDataList(), 1035 syncer::SyncDataList(),
1036 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1036 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1037 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1037 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1038 1038
1039 EXPECT_EQ( 1039 EXPECT_EQ(
1040 syncer::SyncChange::ACTION_ADD, 1040 syncer::SyncChange::ACTION_ADD,
(...skipping 27 matching lines...) Expand all
1068 storage_factory_->Reset(testing_factory); 1068 storage_factory_->Reset(testing_factory);
1069 1069
1070 ValueStore* good = AddExtensionAndGetStorage("good", type); 1070 ValueStore* good = AddExtensionAndGetStorage("good", type);
1071 ValueStore* bad = AddExtensionAndGetStorage("bad", type); 1071 ValueStore* bad = AddExtensionAndGetStorage("bad", type);
1072 1072
1073 good->Set(DEFAULTS, "foo", fooValue); 1073 good->Set(DEFAULTS, "foo", fooValue);
1074 bad->Set(DEFAULTS, "foo", fooValue); 1074 bad->Set(DEFAULTS, "foo", fooValue);
1075 1075
1076 // good will successfully push foo:fooValue to sync, but bad will fail to 1076 // good will successfully push foo:fooValue to sync, but bad will fail to
1077 // get them so won't. 1077 // get them so won't.
1078 testing_factory->GetExisting("bad")->SetFailAllRequests(true); 1078 testing_factory->GetExisting("bad")->set_error_code(ValueStore::CORRUPTION);
1079 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1079 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1080 model_type, 1080 model_type,
1081 syncer::SyncDataList(), 1081 syncer::SyncDataList(),
1082 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1082 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1083 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1083 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1084 testing_factory->GetExisting("bad")->SetFailAllRequests(false); 1084 testing_factory->GetExisting("bad")->set_error_code(ValueStore::OK);
1085 1085
1086 EXPECT_EQ( 1086 EXPECT_EQ(
1087 syncer::SyncChange::ACTION_ADD, 1087 syncer::SyncChange::ACTION_ADD,
1088 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1088 sync_processor_->GetOnlyChange("good", "foo").change_type());
1089 EXPECT_EQ(1u, sync_processor_->changes().size()); 1089 EXPECT_EQ(1u, sync_processor_->changes().size());
1090 1090
1091 // bad should now be disabled for sync. 1091 // bad should now be disabled for sync.
1092 sync_processor_->ClearChanges(); 1092 sync_processor_->ClearChanges();
1093 good->Set(DEFAULTS, "bar", barValue); 1093 good->Set(DEFAULTS, "bar", barValue);
1094 bad->Set(DEFAULTS, "bar", barValue); 1094 bad->Set(DEFAULTS, "bar", barValue);
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 1170
1171 TestingValueStoreFactory* testing_factory = new TestingValueStoreFactory(); 1171 TestingValueStoreFactory* testing_factory = new TestingValueStoreFactory();
1172 storage_factory_->Reset(testing_factory); 1172 storage_factory_->Reset(testing_factory);
1173 1173
1174 ValueStore* good = AddExtensionAndGetStorage("good", type); 1174 ValueStore* good = AddExtensionAndGetStorage("good", type);
1175 ValueStore* bad = AddExtensionAndGetStorage("bad", type); 1175 ValueStore* bad = AddExtensionAndGetStorage("bad", type);
1176 1176
1177 // Only set bad; setting good will cause it to fail below. 1177 // Only set bad; setting good will cause it to fail below.
1178 bad->Set(DEFAULTS, "foo", fooValue); 1178 bad->Set(DEFAULTS, "foo", fooValue);
1179 1179
1180 sync_processor_->SetFailAllRequests(true); 1180 sync_processor_->set_fail_all_requests(true);
1181 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1181 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1182 model_type, 1182 model_type,
1183 syncer::SyncDataList(), 1183 syncer::SyncDataList(),
1184 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1184 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1185 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1185 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1186 sync_processor_->SetFailAllRequests(false); 1186 sync_processor_->set_fail_all_requests(false);
1187 1187
1188 // Changes from good will be send to sync, changes from bad won't. 1188 // Changes from good will be send to sync, changes from bad won't.
1189 sync_processor_->ClearChanges(); 1189 sync_processor_->ClearChanges();
1190 good->Set(DEFAULTS, "foo", barValue); 1190 good->Set(DEFAULTS, "foo", barValue);
1191 bad->Set(DEFAULTS, "foo", barValue); 1191 bad->Set(DEFAULTS, "foo", barValue);
1192 1192
1193 EXPECT_EQ( 1193 EXPECT_EQ(
1194 syncer::SyncChange::ACTION_ADD, 1194 syncer::SyncChange::ACTION_ADD,
1195 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1195 sync_processor_->GetOnlyChange("good", "foo").change_type());
1196 EXPECT_EQ(1u, sync_processor_->changes().size()); 1196 EXPECT_EQ(1u, sync_processor_->changes().size());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
1266 ValueStore* bad = AddExtensionAndGetStorage("bad", type); 1266 ValueStore* bad = AddExtensionAndGetStorage("bad", type);
1267 1267
1268 GetSyncableService(model_type)->MergeDataAndStartSyncing( 1268 GetSyncableService(model_type)->MergeDataAndStartSyncing(
1269 model_type, 1269 model_type,
1270 syncer::SyncDataList(), 1270 syncer::SyncDataList(),
1271 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(), 1271 sync_processor_delegate_.PassAs<syncer::SyncChangeProcessor>(),
1272 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock())); 1272 scoped_ptr<syncer::SyncErrorFactory>(new syncer::SyncErrorFactoryMock()));
1273 1273
1274 // bad will fail to send changes. 1274 // bad will fail to send changes.
1275 good->Set(DEFAULTS, "foo", fooValue); 1275 good->Set(DEFAULTS, "foo", fooValue);
1276 sync_processor_->SetFailAllRequests(true); 1276 sync_processor_->set_fail_all_requests(true);
1277 bad->Set(DEFAULTS, "foo", fooValue); 1277 bad->Set(DEFAULTS, "foo", fooValue);
1278 sync_processor_->SetFailAllRequests(false); 1278 sync_processor_->set_fail_all_requests(false);
1279 1279
1280 EXPECT_EQ( 1280 EXPECT_EQ(
1281 syncer::SyncChange::ACTION_ADD, 1281 syncer::SyncChange::ACTION_ADD,
1282 sync_processor_->GetOnlyChange("good", "foo").change_type()); 1282 sync_processor_->GetOnlyChange("good", "foo").change_type());
1283 EXPECT_EQ(1u, sync_processor_->changes().size()); 1283 EXPECT_EQ(1u, sync_processor_->changes().size());
1284 1284
1285 // No further changes should be sent from bad. 1285 // No further changes should be sent from bad.
1286 sync_processor_->ClearChanges(); 1286 sync_processor_->ClearChanges();
1287 good->Set(DEFAULTS, "foo", barValue); 1287 good->Set(DEFAULTS, "foo", barValue);
1288 bad->Set(DEFAULTS, "foo", barValue); 1288 bad->Set(DEFAULTS, "foo", barValue);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1414 1414
1415 // Test dots in keys that come from sync. 1415 // Test dots in keys that come from sync.
1416 { 1416 {
1417 ValueStore::ReadResult data = storage->Get(); 1417 ValueStore::ReadResult data = storage->Get();
1418 ASSERT_FALSE(data->HasError()); 1418 ASSERT_FALSE(data->HasError());
1419 1419
1420 DictionaryValue expected_data; 1420 DictionaryValue expected_data;
1421 expected_data.SetWithoutPathExpansion( 1421 expected_data.SetWithoutPathExpansion(
1422 "key.with.dot", 1422 "key.with.dot",
1423 new base::StringValue("value")); 1423 new base::StringValue("value"));
1424 EXPECT_TRUE(Value::Equals(&expected_data, data->settings().get())); 1424 EXPECT_TRUE(Value::Equals(&expected_data, &data->settings()));
1425 } 1425 }
1426 1426
1427 // Test dots in keys going to sync. 1427 // Test dots in keys going to sync.
1428 { 1428 {
1429 scoped_ptr<Value> string_value(new base::StringValue("spot")); 1429 scoped_ptr<Value> string_value(new base::StringValue("spot"));
1430 storage->Set(DEFAULTS, "key.with.spot", *string_value); 1430 storage->Set(DEFAULTS, "key.with.spot", *string_value);
1431 1431
1432 ASSERT_EQ(1u, sync_processor_->changes().size()); 1432 ASSERT_EQ(1u, sync_processor_->changes().size());
1433 SettingSyncData sync_data = sync_processor_->changes()[0]; 1433 SettingSyncData sync_data = sync_processor_->changes()[0];
1434 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data.change_type()); 1434 EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data.change_type());
1435 EXPECT_EQ("ext", sync_data.extension_id()); 1435 EXPECT_EQ("ext", sync_data.extension_id());
1436 EXPECT_EQ("key.with.spot", sync_data.key()); 1436 EXPECT_EQ("key.with.spot", sync_data.key());
1437 EXPECT_TRUE(sync_data.value().Equals(string_value.get())); 1437 EXPECT_TRUE(sync_data.value().Equals(string_value.get()));
1438 } 1438 }
1439 } 1439 }
1440 1440
1441 } // namespace extensions 1441 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698