Chromium Code Reviews| Index: chrome/browser/extensions/settings/settings_sync_unittest.cc |
| diff --git a/chrome/browser/extensions/settings/settings_sync_unittest.cc b/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| index 87945e99c6166c3c3fd8ac6be729a6f510db9910..b803931a51f95dc76cfac4bd3e2a7a25334d910d 100644 |
| --- a/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| +++ b/chrome/browser/extensions/settings/settings_sync_unittest.cc |
| @@ -142,6 +142,26 @@ class MockSyncChangeProcessor : public SyncChangeProcessor { |
| bool fail_all_requests_; |
| }; |
| +class SyncChangeProcessorDelegate : public SyncChangeProcessor { |
|
asargent_no_longer_on_chrome
2012/03/22 22:54:11
same thing here about duplicate code
Nicolas Zea
2012/03/22 23:05:29
See previous comment.
|
| + public: |
| + explicit SyncChangeProcessorDelegate(SyncChangeProcessor* recipient) |
| + : recipient_(recipient) { |
| + DCHECK(recipient_); |
| + } |
| + virtual ~SyncChangeProcessorDelegate() {} |
| + |
| + // SyncChangeProcessor implementation. |
| + virtual SyncError ProcessSyncChanges( |
| + const tracked_objects::Location& from_here, |
| + const SyncChangeList& change_list) OVERRIDE { |
| + return recipient_->ProcessSyncChanges(from_here, change_list); |
| + } |
| + |
| + private: |
| + // The recipient of all sync changes. |
| + SyncChangeProcessor* recipient_; |
| +}; |
| + |
| // SettingsStorageFactory which always returns TestingSettingsStorage objects, |
| // and allows individually created objects to be returned. |
| class TestingSettingsStorageFactory : public SettingsStorageFactory { |
| @@ -182,7 +202,10 @@ class ExtensionSettingsSyncTest : public testing::Test { |
| ExtensionSettingsSyncTest() |
| : ui_thread_(BrowserThread::UI, MessageLoop::current()), |
| file_thread_(BrowserThread::FILE, MessageLoop::current()), |
| - storage_factory_(new util::ScopedSettingsStorageFactory()) {} |
| + storage_factory_(new util::ScopedSettingsStorageFactory()), |
| + sync_processor_(new MockSyncChangeProcessor), |
| + sync_processor_delegate_(new SyncChangeProcessorDelegate( |
| + sync_processor_.get())) {} |
| virtual void SetUp() OVERRIDE { |
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| @@ -233,10 +256,11 @@ class ExtensionSettingsSyncTest : public testing::Test { |
| content::TestBrowserThread file_thread_; |
| ScopedTempDir temp_dir_; |
| - MockSyncChangeProcessor sync_; |
| scoped_ptr<util::MockProfile> profile_; |
| scoped_ptr<SettingsFrontend> frontend_; |
| scoped_refptr<util::ScopedSettingsStorageFactory> storage_factory_; |
| + scoped_ptr<MockSyncChangeProcessor> sync_processor_; |
| + scoped_ptr<SyncChangeProcessorDelegate> sync_processor_delegate_; |
| }; |
| // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS |
| @@ -253,14 +277,16 @@ TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
| EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| AddExtensionAndGetStorage("s2", type); |
| EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
| } |
| @@ -293,19 +319,20 @@ TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
| "s2", "bar", value2, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // Already in sync, so no changes. |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| // Regression test: not-changing the synced value shouldn't result in a sync |
| // change, and changing the synced value should result in an update. |
| storage1->Set(DEFAULTS, "foo", value1); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| storage1->Set(DEFAULTS, "foo", value2); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| - SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| + SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| @@ -327,14 +354,16 @@ TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
| storage2->Set(DEFAULTS, "bar", value2); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // All settings should have been pushed to sync. |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| - SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| + SettingSyncData change = sync_processor_->GetOnlyChange("s1", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value1.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s2", "bar"); |
| + change = sync_processor_->GetOnlyChange("s2", "bar"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| @@ -363,14 +392,15 @@ TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
| sync_data.push_back(settings_sync_util::CreateData( |
| "s2", "bar", value2, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| expected1.Set("foo", value1.DeepCopy()); |
| expected2.Set("bar", value2.DeepCopy()); |
| SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |
| // All changes should be local, so no sync changes. |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| // Sync settings should have been pushed to local settings. |
| EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
| @@ -403,7 +433,8 @@ TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
| "s2", "bar", value2, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| expected2.Set("bar", value2.DeepCopy()); |
| // Make sync add some settings. |
| @@ -475,7 +506,8 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| "s4", "bar", value2, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // Add something locally. |
| storage1->Set(DEFAULTS, "bar", value2); |
| @@ -483,45 +515,45 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| storage3->Set(DEFAULTS, "foo", value1); |
| storage4->Set(DEFAULTS, "foo", value1); |
| - SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); |
| + SettingSyncData change = sync_processor_->GetOnlyChange("s1", "bar"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| - sync_.GetOnlyChange("s2", "bar"); |
| + sync_processor_->GetOnlyChange("s2", "bar"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s3", "foo"); |
| + change = sync_processor_->GetOnlyChange("s3", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value1.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s4", "foo"); |
| + change = sync_processor_->GetOnlyChange("s4", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| EXPECT_TRUE(value1.Equals(&change.value())); |
| // Change something locally, storage1/3 the new setting and storage2/4 the |
| // initial setting, for all combinations of local vs sync intialisation and |
| // new vs initial. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| storage1->Set(DEFAULTS, "bar", value1); |
| storage2->Set(DEFAULTS, "foo", value2); |
| storage3->Set(DEFAULTS, "bar", value1); |
| storage4->Set(DEFAULTS, "foo", value2); |
| - change = sync_.GetOnlyChange("s1", "bar"); |
| + change = sync_processor_->GetOnlyChange("s1", "bar"); |
| EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| EXPECT_TRUE(value1.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s2", "foo"); |
| + change = sync_processor_->GetOnlyChange("s2", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s3", "bar"); |
| + change = sync_processor_->GetOnlyChange("s3", "bar"); |
| EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| EXPECT_TRUE(value1.Equals(&change.value())); |
| - change = sync_.GetOnlyChange("s4", "foo"); |
| + change = sync_processor_->GetOnlyChange("s4", "foo"); |
| EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); |
| EXPECT_TRUE(value2.Equals(&change.value())); |
| // Remove something locally, storage1/3 the new setting and storage2/4 the |
| // initial setting, for all combinations of local vs sync intialisation and |
| // new vs initial. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| storage1->Remove("foo"); |
| storage2->Remove("bar"); |
| storage3->Remove("foo"); |
| @@ -529,25 +561,25 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s1", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s2", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s3", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s4", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
| // Remove some nonexistent settings. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| storage1->Remove("foo"); |
| storage2->Remove("bar"); |
| storage3->Remove("foo"); |
| storage4->Remove("bar"); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| // Clear the rest of the settings. Add the removed ones back first so that |
| // more than one setting is cleared. |
| @@ -556,7 +588,7 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| storage3->Set(DEFAULTS, "foo", value1); |
| storage4->Set(DEFAULTS, "bar", value2); |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| storage1->Clear(); |
| storage2->Clear(); |
| storage3->Clear(); |
| @@ -564,28 +596,28 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s1", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s1", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s1", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s1", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s2", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s2", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s2", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s2", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s3", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s3", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s3", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s3", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s4", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("s4", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_DELETE, |
| - sync_.GetOnlyChange("s4", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("s4", "bar").change_type()); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| } |
| @@ -621,21 +653,27 @@ TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
| sync_data.push_back(settings_sync_util::CreateData( |
| "s1", "foo", value1, syncable::EXTENSION_SETTINGS)); |
| - GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
| - MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); |
| + GetSyncableService(syncable::EXTENSION_SETTINGS)->MergeDataAndStartSyncing( |
| + syncable::EXTENSION_SETTINGS, |
| + sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| GetSyncableService(syncable::EXTENSION_SETTINGS)-> |
| StopSyncing(syncable::EXTENSION_SETTINGS); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| sync_data.clear(); |
| sync_data.push_back(settings_sync_util::CreateData( |
| "s2", "bar", value2, syncable::APP_SETTINGS)); |
| - GetSyncableService(syncable::APP_SETTINGS)-> |
| - MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); |
| + scoped_ptr<SyncChangeProcessorDelegate> app_settings_delegate_( |
| + new SyncChangeProcessorDelegate(sync_processor_.get())); |
| + GetSyncableService(syncable::APP_SETTINGS)->MergeDataAndStartSyncing( |
| + syncable::APP_SETTINGS, |
| + sync_data, |
| + app_settings_delegate_.PassAs<SyncChangeProcessor>()); |
| GetSyncableService(syncable::APP_SETTINGS)-> |
| StopSyncing(syncable::APP_SETTINGS); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| } |
| TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| @@ -664,7 +702,9 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| sync_data.push_back(settings_sync_util::CreateData( |
| "bad", "foo", fooValue, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, |
| + sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| } |
| testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| @@ -679,14 +719,14 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| } |
| // Changes made to good should be sent to sync, changes from bad shouldn't. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", barValue); |
| bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| { |
| DictionaryValue dict; |
| @@ -727,14 +767,14 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| // Changes made to bad still shouldn't go to sync, even though it didn't fail |
| // last time. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", fooValue); |
| bad->Set(DEFAULTS, "bar", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| { |
| DictionaryValue dict; |
| @@ -774,36 +814,40 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
| } |
| // Restarting sync should make bad start syncing again. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| + sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| + sync_processor_.get())); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // Local settings will have been pushed to sync, since it's empty (in this |
| // test; presumably it wouldn't be live, since we've been getting changes). |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "bar").change_type()); |
| - EXPECT_EQ(3u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| + EXPECT_EQ(3u, sync_processor_->changes().size()); |
| // Live local changes now get pushed, too. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", barValue); |
| bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("bad", "bar").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| // And ProcessSyncChanges work, too. |
| { |
| @@ -852,10 +896,12 @@ TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { |
| sync_data.push_back(settings_sync_util::CreateData( |
| "bad", "foo", fooValue, model_type)); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, sync_data, &sync_); |
| + model_type, |
| + sync_data, |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| } |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| { |
| DictionaryValue dict; |
| @@ -893,14 +939,14 @@ TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { |
| } |
| // No more changes sent to sync for bad. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "foo", barValue); |
| bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| // No more changes received from sync should go to bad. |
| { |
| @@ -955,27 +1001,29 @@ TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { |
| // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "foo").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", barValue); |
| bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "bar").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| } |
| TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| @@ -999,23 +1047,25 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| // get them so won't. |
| testing_factory->GetExisting("bad")->SetFailAllRequests(true); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| testing_factory->GetExisting("bad")->SetFailAllRequests(false); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| // bad should now be disabled for sync. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", barValue); |
| bad->Set(DEFAULTS, "bar", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| { |
| SyncChangeList change_list; |
| @@ -1043,36 +1093,40 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
| // Re-enabling sync without failing should cause the local changes from bad |
| // to be pushed to sync successfully, as should future changes to bad. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| + sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| + sync_processor_.get())); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "bar").change_type()); |
| - EXPECT_EQ(4u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "bar").change_type()); |
| + EXPECT_EQ(4u, sync_processor_->changes().size()); |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "bar", fooValue); |
| bad->Set(DEFAULTS, "bar", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| } |
| TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| @@ -1092,20 +1146,22 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| // Only set bad; setting good will cause it to fail below. |
| bad->Set(DEFAULTS, "foo", fooValue); |
| - sync_.SetFailAllRequests(true); |
| + sync_processor_->SetFailAllRequests(true); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| - sync_.SetFailAllRequests(false); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| + sync_processor_->SetFailAllRequests(false); |
| // Changes from good will be send to sync, changes from bad won't. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "foo", barValue); |
| bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| // Changes from sync will be sent to good, not to bad. |
| { |
| @@ -1130,33 +1186,37 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
| } |
| // Restarting sync makes everything work again. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| + sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| + sync_processor_.get())); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "foo").change_type()); |
| - EXPECT_EQ(3u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| + EXPECT_EQ(3u, sync_processor_->changes().size()); |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "foo", fooValue); |
| bad->Set(DEFAULTS, "foo", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| } |
| TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| @@ -1174,28 +1234,30 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| SettingsStorage* bad = AddExtensionAndGetStorage("bad", type); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // bad will fail to send changes. |
| good->Set(DEFAULTS, "foo", fooValue); |
| - sync_.SetFailAllRequests(true); |
| + sync_processor_->SetFailAllRequests(true); |
| bad->Set(DEFAULTS, "foo", fooValue); |
| - sync_.SetFailAllRequests(false); |
| + sync_processor_->SetFailAllRequests(false); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| // No further changes should be sent from bad. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "foo", barValue); |
| bad->Set(DEFAULTS, "foo", barValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(1u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(1u, sync_processor_->changes().size()); |
| // Changes from sync will be sent to good, not to bad. |
| { |
| @@ -1220,37 +1282,41 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
| } |
| // Restarting sync makes everything work again. |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| GetSyncableService(model_type)->StopSyncing(model_type); |
| + sync_processor_delegate_.reset(new SyncChangeProcessorDelegate( |
| + sync_processor_.get())); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("good", "bar").change_type()); |
| + sync_processor_->GetOnlyChange("good", "bar").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_ADD, |
| - sync_.GetOnlyChange("bad", "foo").change_type()); |
| - EXPECT_EQ(3u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("bad", "foo").change_type()); |
| + EXPECT_EQ(3u, sync_processor_->changes().size()); |
| - sync_.ClearChanges(); |
| + sync_processor_->ClearChanges(); |
| good->Set(DEFAULTS, "foo", fooValue); |
| bad->Set(DEFAULTS, "foo", fooValue); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| EXPECT_EQ( |
| SyncChange::ACTION_UPDATE, |
| - sync_.GetOnlyChange("good", "foo").change_type()); |
| - EXPECT_EQ(2u, sync_.changes().size()); |
| + sync_processor_->GetOnlyChange("good", "foo").change_type()); |
| + EXPECT_EQ(2u, sync_processor_->changes().size()); |
| } |
| TEST_F(ExtensionSettingsSyncTest, |
| - LargeOutgoingChangeRejectedButIncomingAccepted) { |
| + LargeOutgoingChangeRejectedButIncomingAccepted) { |
| syncable::ModelType model_type = syncable::APP_SETTINGS; |
| Extension::Type type = Extension::TYPE_PACKAGED_APP; |
| @@ -1262,12 +1328,14 @@ TEST_F(ExtensionSettingsSyncTest, |
| StringValue large_value(string_5k); |
| GetSyncableService(model_type)->MergeDataAndStartSyncing( |
| - model_type, SyncDataList(), &sync_); |
| + model_type, |
| + SyncDataList(), |
| + sync_processor_delegate_.PassAs<SyncChangeProcessor>()); |
| // Large local change rejected and doesn't get sent out. |
| SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); |
| EXPECT_TRUE(storage1->Set(DEFAULTS, "large_value", large_value).HasError()); |
| - EXPECT_EQ(0u, sync_.changes().size()); |
| + EXPECT_EQ(0u, sync_processor_->changes().size()); |
| // Large incoming change should still get accepted. |
| SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); |