| 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..175d18faff11e130fe5bfadc41847e69a04599dc 100644
|
| --- a/chrome/browser/extensions/settings/settings_sync_unittest.cc
|
| +++ b/chrome/browser/extensions/settings/settings_sync_unittest.cc
|
| @@ -142,6 +142,28 @@ class MockSyncChangeProcessor : public SyncChangeProcessor {
|
| bool fail_all_requests_;
|
| };
|
|
|
| +class SyncChangeProcessorDelegate : public SyncChangeProcessor {
|
| + 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_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SyncChangeProcessorDelegate);
|
| +};
|
| +
|
| // SettingsStorageFactory which always returns TestingSettingsStorage objects,
|
| // and allows individually created objects to be returned.
|
| class TestingSettingsStorageFactory : public SettingsStorageFactory {
|
| @@ -182,7 +204,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 +258,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 +279,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 +321,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 +356,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 +394,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 +435,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 +508,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 +517,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 +563,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 +590,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 +598,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 +655,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 +704,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 +721,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 +769,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 +816,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 +898,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 +941,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 +1003,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 +1049,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 +1095,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 +1148,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 +1188,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 +1236,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 +1284,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 +1330,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);
|
|
|