| OLD | NEW | 
|     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  Loading... | 
|    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  Loading... | 
|   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  Loading... | 
|   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  Loading... | 
|   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  Loading... | 
|   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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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 | 
| OLD | NEW |