Index: chrome/browser/extensions/api/storage/settings_sync_unittest.cc |
diff --git a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc |
index cc00e08b6e89c09c49a96b5b2e3fa29da4fa453d..562ab151b6aabf581c14b00d4659d3a3a346416e 100644 |
--- a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc |
+++ b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc |
@@ -12,7 +12,6 @@ |
#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/memory/ptr_util.h" |
-#include "base/run_loop.h" |
#include "base/strings/string_number_conversions.h" |
#include "base/values.h" |
#include "build/build_config.h" |
@@ -25,6 +24,8 @@ |
#include "components/sync/model/sync_error_factory.h" |
#include "components/sync/model/sync_error_factory_mock.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
+#include "content/public/test/test_utils.h" |
+#include "extensions/browser/api/storage/backend_task_runner.h" |
#include "extensions/browser/api/storage/settings_test_util.h" |
#include "extensions/browser/api/storage/storage_frontend.h" |
#include "extensions/browser/event_router.h" |
@@ -204,7 +205,7 @@ class ExtensionSettingsSyncTest : public testing::Test { |
frontend_.reset(); |
profile_.reset(); |
// Execute any pending deletion tasks. |
- base::RunLoop().RunUntilIdle(); |
+ content::RunAllBlockingPoolTasksUntilIdle(); |
} |
protected: |
@@ -219,7 +220,6 @@ class ExtensionSettingsSyncTest : public testing::Test { |
// Gets the syncer::SyncableService for the given sync type. |
syncer::SyncableService* GetSyncableService(syncer::ModelType model_type) { |
- base::RunLoop().RunUntilIdle(); |
SyncValueStoreCache* sync_cache = static_cast<SyncValueStoreCache*>( |
frontend_->GetValueStoreCache(settings_namespace::SYNC)); |
return sync_cache->GetSyncableService(model_type); |
@@ -250,6 +250,19 @@ class ExtensionSettingsSyncTest : public testing::Test { |
storage_factory_->GetExisting(extension_id)); |
} |
+ template <typename Func> |
+ static void RunFunc(Func func) { |
+ func(); |
+ } |
+ |
+ template <typename Func> |
+ void PostOnBackendSequenceAndWait(const tracked_objects::Location& from_here, |
Devlin
2017/07/12 22:58:00
Heh, clever. :)
stanisc
2017/07/12 23:42:49
After failing to use lambda directly with base::Bi
|
+ Func func) { |
+ GetBackendTaskRunner()->PostTask( |
+ from_here, base::Bind(&ExtensionSettingsSyncTest::RunFunc<Func>, func)); |
+ content::RunAllBlockingPoolTasksUntilIdle(); |
+ } |
+ |
// Needed so that the DCHECKs for running on FILE or UI threads pass. |
content::TestBrowserThreadBundle test_browser_thread_bundle_; |
@@ -269,25 +282,33 @@ TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { |
syncer::ModelType model_type = syncer::EXTENSION_SETTINGS; |
Manifest::Type type = Manifest::TYPE_EXTENSION; |
- EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
+ }); |
// Have one extension created before sync is set up, the other created after. |
AddExtensionAndGetStorage("s1", type); |
- EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ }); |
AddExtensionAndGetStorage("s2", type); |
- EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
- EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ EXPECT_EQ(0u, GetAllSyncData(model_type).size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
@@ -301,42 +322,44 @@ TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { |
ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
- storage1->Set(DEFAULTS, "foo", value1); |
- storage2->Set(DEFAULTS, "bar", value2); |
- |
- SettingSyncDataMultimap all_sync_data = GetAllSyncData(model_type); |
- EXPECT_EQ(2u, all_sync_data.size()); |
- EXPECT_EQ(1u, all_sync_data["s1"]->size()); |
- EXPECT_PRED_FORMAT2(ValuesEq, &value1, &(*all_sync_data["s1"])[0]->value()); |
- EXPECT_EQ(1u, all_sync_data["s2"]->size()); |
- EXPECT_PRED_FORMAT2(ValuesEq, &value2, &(*all_sync_data["s2"])[0]->value()); |
- |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s1", "foo", value1, model_type)); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s2", "bar", value2, model_type)); |
- |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- // Already in sync, so no changes. |
- 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_processor_->changes().size()); |
- |
- storage1->Set(DEFAULTS, "foo", value2); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
- SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
- EXPECT_TRUE(value2.Equals(&change->value())); |
- |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ storage2->Set(DEFAULTS, "bar", value2); |
+ |
+ SettingSyncDataMultimap all_sync_data = GetAllSyncData(model_type); |
+ EXPECT_EQ(2u, all_sync_data.size()); |
+ EXPECT_EQ(1u, all_sync_data["s1"]->size()); |
+ EXPECT_PRED_FORMAT2(ValuesEq, &value1, &(*all_sync_data["s1"])[0]->value()); |
+ EXPECT_EQ(1u, all_sync_data["s2"]->size()); |
+ EXPECT_PRED_FORMAT2(ValuesEq, &value2, &(*all_sync_data["s2"])[0]->value()); |
+ |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s1", "foo", value1, model_type)); |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s2", "bar", value2, model_type)); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ |
+ // Already in sync, so no changes. |
+ 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_processor_->changes().size()); |
+ |
+ storage1->Set(DEFAULTS, "foo", value2); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
+ EXPECT_TRUE(value2.Equals(&change->value())); |
+ |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
@@ -350,25 +373,27 @@ TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { |
ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
- storage1->Set(DEFAULTS, "foo", value1); |
- storage2->Set(DEFAULTS, "bar", value2); |
- |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- // All settings should have been pushed to sync. |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
- SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
- EXPECT_TRUE(value1.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s2", "bar"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
- EXPECT_TRUE(value2.Equals(&change->value())); |
- |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ storage2->Set(DEFAULTS, "bar", value2); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ |
+ // All settings should have been pushed to sync. |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "foo"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
+ EXPECT_TRUE(value1.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s2", "bar"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
+ EXPECT_TRUE(value2.Equals(&change->value())); |
+ |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
@@ -385,30 +410,35 @@ TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { |
// Pre-populate one of the storage areas. |
ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
- storage1->Set(DEFAULTS, "overwriteMe", value1); |
- |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s1", "foo", value1, model_type)); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s2", "bar", value2, model_type)); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- expected1.Set("foo", value1.CreateDeepCopy()); |
- expected2.Set("bar", value2.CreateDeepCopy()); |
+ |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ storage1->Set(DEFAULTS, "overwriteMe", value1); |
+ |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s1", "foo", value1, model_type)); |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s2", "bar", value2, model_type)); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ expected1.Set("foo", value1.CreateDeepCopy()); |
+ expected2.Set("bar", value2.CreateDeepCopy()); |
+ }); |
ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
- // All changes should be local, so no sync changes. |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ // All changes should be local, so no sync changes. |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
- // Sync settings should have been pushed to local settings. |
- EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
+ // Sync settings should have been pushed to local settings. |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
@@ -419,69 +449,71 @@ TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { |
base::ListValue value2; |
value2.AppendString("barValue"); |
- // Maintain dictionaries mirrored to the expected values of the settings in |
Devlin
2017/07/12 22:58:00
Reitveld's struggling with some of these diffs - a
stanisc
2017/07/12 23:42:49
Yes, more or less. Some of code blocks had to be m
|
- // each storage area. |
- base::DictionaryValue expected1, expected2; |
- |
// Make storage1 initialised from local data, storage2 initialised from sync. |
ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
- storage1->Set(DEFAULTS, "foo", value1); |
- expected1.Set("foo", value1.CreateDeepCopy()); |
- |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s2", "bar", value2, model_type)); |
- |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- expected2.Set("bar", value2.CreateDeepCopy()); |
- |
- // Make sync add some settings. |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "s1", "bar", value2, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "s2", "foo", value1, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- expected1.Set("bar", value2.CreateDeepCopy()); |
- expected2.Set("foo", value1.CreateDeepCopy()); |
- |
- EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
- |
- // Make sync update some settings, storage1 the new setting, storage2 the |
- // initial setting. |
- change_list.clear(); |
- change_list.push_back(settings_sync_util::CreateUpdate( |
- "s1", "bar", value2, model_type)); |
- change_list.push_back(settings_sync_util::CreateUpdate( |
- "s2", "bar", value1, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- expected1.Set("bar", value2.CreateDeepCopy()); |
- expected2.Set("bar", value1.CreateDeepCopy()); |
- |
- EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
- |
- // Make sync remove some settings, storage1 the initial setting, storage2 the |
- // new setting. |
- change_list.clear(); |
- change_list.push_back(settings_sync_util::CreateDelete( |
- "s1", "foo", model_type)); |
- change_list.push_back(settings_sync_util::CreateDelete( |
- "s2", "foo", model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- expected1.Remove("foo", NULL); |
- expected2.Remove("foo", NULL); |
- |
- EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
- |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ // Maintain dictionaries mirrored to the expected values of the settings in |
+ // each storage area. |
+ base::DictionaryValue expected1, expected2; |
+ |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ expected1.Set("foo", value1.CreateDeepCopy()); |
+ |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s2", "bar", value2, model_type)); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ expected2.Set("bar", value2.CreateDeepCopy()); |
+ |
+ // Make sync add some settings. |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("s1", "bar", value2, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("s2", "foo", value1, model_type)); |
+ GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
+ expected1.Set("bar", value2.CreateDeepCopy()); |
+ expected2.Set("foo", value1.CreateDeepCopy()); |
+ |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
+ |
+ // Make sync update some settings, storage1 the new setting, storage2 the |
+ // initial setting. |
+ change_list.clear(); |
+ change_list.push_back( |
+ settings_sync_util::CreateUpdate("s1", "bar", value2, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateUpdate("s2", "bar", value1, model_type)); |
+ GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
+ expected1.Set("bar", value2.CreateDeepCopy()); |
+ expected2.Set("bar", value1.CreateDeepCopy()); |
+ |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
+ |
+ // Make sync remove some settings, storage1 the initial setting, storage2 |
+ // the new setting. |
+ change_list.clear(); |
+ change_list.push_back( |
+ settings_sync_util::CreateDelete("s1", "foo", model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateDelete("s2", "foo", model_type)); |
+ GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
+ expected1.Remove("foo", NULL); |
+ expected2.Remove("foo", NULL); |
+ |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); |
+ |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
@@ -499,119 +531,121 @@ TEST_F(ExtensionSettingsSyncTest, PushToSync) { |
ValueStore* storage3 = AddExtensionAndGetStorage("s3", type); |
ValueStore* storage4 = AddExtensionAndGetStorage("s4", type); |
- storage1->Set(DEFAULTS, "foo", value1); |
- storage2->Set(DEFAULTS, "foo", value1); |
- |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s3", "bar", value2, model_type)); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s4", "bar", value2, model_type)); |
- |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- // Add something locally. |
- storage1->Set(DEFAULTS, "bar", value2); |
- storage2->Set(DEFAULTS, "bar", value2); |
- storage3->Set(DEFAULTS, "foo", value1); |
- storage4->Set(DEFAULTS, "foo", value1); |
- |
- SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "bar"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
- EXPECT_TRUE(value2.Equals(&change->value())); |
- sync_processor_->GetOnlyChange("s2", "bar"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
- EXPECT_TRUE(value2.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s3", "foo"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
- EXPECT_TRUE(value1.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s4", "foo"); |
- EXPECT_EQ(syncer::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_processor_->ClearChanges(); |
- storage1->Set(DEFAULTS, "bar", value1); |
- storage2->Set(DEFAULTS, "foo", value2); |
- storage3->Set(DEFAULTS, "bar", value1); |
- storage4->Set(DEFAULTS, "foo", value2); |
- |
- change = sync_processor_->GetOnlyChange("s1", "bar"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
- EXPECT_TRUE(value1.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s2", "foo"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
- EXPECT_TRUE(value2.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s3", "bar"); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
- EXPECT_TRUE(value1.Equals(&change->value())); |
- change = sync_processor_->GetOnlyChange("s4", "foo"); |
- EXPECT_EQ(syncer::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_processor_->ClearChanges(); |
- storage1->Remove("foo"); |
- storage2->Remove("bar"); |
- storage3->Remove("foo"); |
- storage4->Remove("bar"); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s1", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s2", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s3", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s4", "bar")->change_type()); |
- |
- // Remove some nonexistent settings. |
- sync_processor_->ClearChanges(); |
- storage1->Remove("foo"); |
- storage2->Remove("bar"); |
- storage3->Remove("foo"); |
- storage4->Remove("bar"); |
- |
- 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. |
- storage1->Set(DEFAULTS, "foo", value1); |
- storage2->Set(DEFAULTS, "bar", value2); |
- storage3->Set(DEFAULTS, "foo", value1); |
- storage4->Set(DEFAULTS, "bar", value2); |
- |
- sync_processor_->ClearChanges(); |
- storage1->Clear(); |
- storage2->Clear(); |
- storage3->Clear(); |
- storage4->Clear(); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s1", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s1", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s2", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s2", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s3", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s3", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s4", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
- sync_processor_->GetOnlyChange("s4", "bar")->change_type()); |
- |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ storage2->Set(DEFAULTS, "foo", value1); |
+ |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s3", "bar", value2, model_type)); |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("s4", "bar", value2, model_type)); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ |
+ // Add something locally. |
+ storage1->Set(DEFAULTS, "bar", value2); |
+ storage2->Set(DEFAULTS, "bar", value2); |
+ storage3->Set(DEFAULTS, "foo", value1); |
+ storage4->Set(DEFAULTS, "foo", value1); |
+ |
+ SettingSyncData* change = sync_processor_->GetOnlyChange("s1", "bar"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
+ EXPECT_TRUE(value2.Equals(&change->value())); |
+ sync_processor_->GetOnlyChange("s2", "bar"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
+ EXPECT_TRUE(value2.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s3", "foo"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change->change_type()); |
+ EXPECT_TRUE(value1.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s4", "foo"); |
+ EXPECT_EQ(syncer::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_processor_->ClearChanges(); |
+ storage1->Set(DEFAULTS, "bar", value1); |
+ storage2->Set(DEFAULTS, "foo", value2); |
+ storage3->Set(DEFAULTS, "bar", value1); |
+ storage4->Set(DEFAULTS, "foo", value2); |
+ |
+ change = sync_processor_->GetOnlyChange("s1", "bar"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
+ EXPECT_TRUE(value1.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s2", "foo"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
+ EXPECT_TRUE(value2.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s3", "bar"); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change->change_type()); |
+ EXPECT_TRUE(value1.Equals(&change->value())); |
+ change = sync_processor_->GetOnlyChange("s4", "foo"); |
+ EXPECT_EQ(syncer::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_processor_->ClearChanges(); |
+ storage1->Remove("foo"); |
+ storage2->Remove("bar"); |
+ storage3->Remove("foo"); |
+ storage4->Remove("bar"); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s1", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s2", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s3", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s4", "bar")->change_type()); |
+ |
+ // Remove some nonexistent settings. |
+ sync_processor_->ClearChanges(); |
+ storage1->Remove("foo"); |
+ storage2->Remove("bar"); |
+ storage3->Remove("foo"); |
+ storage4->Remove("bar"); |
+ |
+ 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. |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ storage2->Set(DEFAULTS, "bar", value2); |
+ storage3->Set(DEFAULTS, "foo", value1); |
+ storage4->Set(DEFAULTS, "bar", value2); |
+ |
+ sync_processor_->ClearChanges(); |
+ storage1->Clear(); |
+ storage2->Clear(); |
+ storage3->Clear(); |
+ storage4->Clear(); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s1", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s1", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s2", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s2", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s3", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s3", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s4", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_DELETE, |
+ sync_processor_->GetOnlyChange("s4", "bar")->change_type()); |
+ |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
@@ -625,49 +659,51 @@ TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { |
ValueStore* storage2 = AddExtensionAndGetStorage( |
"s2", Manifest::TYPE_LEGACY_PACKAGED_APP); |
- storage1->Set(DEFAULTS, "foo", value1); |
- storage2->Set(DEFAULTS, "bar", value2); |
- |
- SettingSyncDataMultimap extension_sync_data = |
- GetAllSyncData(syncer::EXTENSION_SETTINGS); |
- EXPECT_EQ(1u, extension_sync_data.size()); |
- EXPECT_EQ(1u, extension_sync_data["s1"]->size()); |
- EXPECT_PRED_FORMAT2(ValuesEq, &value1, |
- &(*extension_sync_data["s1"])[0]->value()); |
- |
- SettingSyncDataMultimap app_sync_data = GetAllSyncData(syncer::APP_SETTINGS); |
- EXPECT_EQ(1u, app_sync_data.size()); |
- EXPECT_EQ(1u, app_sync_data["s2"]->size()); |
- EXPECT_PRED_FORMAT2(ValuesEq, &value2, &(*app_sync_data["s2"])[0]->value()); |
- |
- // Stop each separately, there should be no changes either time. |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s1", "foo", value1, syncer::EXTENSION_SETTINGS)); |
- |
- GetSyncableService(syncer::EXTENSION_SETTINGS) |
- ->MergeDataAndStartSyncing( |
- syncer::EXTENSION_SETTINGS, sync_data, |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- GetSyncableService(syncer::EXTENSION_SETTINGS)-> |
- StopSyncing(syncer::EXTENSION_SETTINGS); |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
- |
- sync_data.clear(); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "s2", "bar", value2, syncer::APP_SETTINGS)); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ storage1->Set(DEFAULTS, "foo", value1); |
+ storage2->Set(DEFAULTS, "bar", value2); |
- std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> |
- app_settings_delegate_( |
- new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
- GetSyncableService(syncer::APP_SETTINGS) |
- ->MergeDataAndStartSyncing( |
- syncer::APP_SETTINGS, sync_data, std::move(app_settings_delegate_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- GetSyncableService(syncer::APP_SETTINGS)-> |
- StopSyncing(syncer::APP_SETTINGS); |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ SettingSyncDataMultimap extension_sync_data = |
+ GetAllSyncData(syncer::EXTENSION_SETTINGS); |
+ EXPECT_EQ(1u, extension_sync_data.size()); |
+ EXPECT_EQ(1u, extension_sync_data["s1"]->size()); |
+ EXPECT_PRED_FORMAT2(ValuesEq, &value1, |
+ &(*extension_sync_data["s1"])[0]->value()); |
+ |
+ SettingSyncDataMultimap app_sync_data = |
+ GetAllSyncData(syncer::APP_SETTINGS); |
+ EXPECT_EQ(1u, app_sync_data.size()); |
+ EXPECT_EQ(1u, app_sync_data["s2"]->size()); |
+ EXPECT_PRED_FORMAT2(ValuesEq, &value2, &(*app_sync_data["s2"])[0]->value()); |
+ |
+ // Stop each separately, there should be no changes either time. |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back(settings_sync_util::CreateData( |
+ "s1", "foo", value1, syncer::EXTENSION_SETTINGS)); |
+ |
+ GetSyncableService(syncer::EXTENSION_SETTINGS) |
+ ->MergeDataAndStartSyncing( |
+ syncer::EXTENSION_SETTINGS, sync_data, |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ GetSyncableService(syncer::EXTENSION_SETTINGS) |
+ ->StopSyncing(syncer::EXTENSION_SETTINGS); |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ |
+ sync_data.clear(); |
+ sync_data.push_back(settings_sync_util::CreateData("s2", "bar", value2, |
+ syncer::APP_SETTINGS)); |
+ |
+ std::unique_ptr<syncer::SyncChangeProcessorWrapperForTest> |
+ app_settings_delegate_(new syncer::SyncChangeProcessorWrapperForTest( |
+ sync_processor_.get())); |
+ GetSyncableService(syncer::APP_SETTINGS) |
+ ->MergeDataAndStartSyncing( |
+ syncer::APP_SETTINGS, sync_data, std::move(app_settings_delegate_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ GetSyncableService(syncer::APP_SETTINGS)->StopSyncing(syncer::APP_SETTINGS); |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
@@ -684,177 +720,182 @@ TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- // Make bad fail for incoming sync changes. |
- GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
- { |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "good", "foo", fooValue, model_type)); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "bad", "foo", fooValue, model_type)); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- } |
- GetExisting("bad")->set_status_code(ValueStore::OK); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ // Make bad fail for incoming sync changes. |
+ GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
+ { |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("good", "foo", fooValue, model_type)); |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("bad", "foo", fooValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ } |
+ GetExisting("bad")->set_status_code(ValueStore::OK); |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // Changes made to good should be sent to sync, changes from bad shouldn't. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", barValue); |
- bad->Set(DEFAULTS, "bar", barValue); |
+ // Changes made to good should be sent to sync, changes from bad shouldn't. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", barValue); |
+ bad->Set(DEFAULTS, "bar", barValue); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // Changes received from sync should go to good but not bad (even when it's |
- // not failing). |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateUpdate( |
+ // Changes received from sync should go to good but not bad (even when it's |
+ // not failing). |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back(settings_sync_util::CreateUpdate( |
"good", "foo", barValue, model_type)); |
- // (Sending UPDATE here even though it's adding, since that's what the state |
- // of sync is. In any case, it won't work.) |
- change_list.push_back(settings_sync_util::CreateUpdate( |
- "bad", "foo", barValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ // (Sending UPDATE here even though it's adding, since that's what the |
+ // state of sync is. In any case, it won't work.) |
+ change_list.push_back( |
+ settings_sync_util::CreateUpdate("bad", "foo", barValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // Changes made to bad still shouldn't go to sync, even though it didn't fail |
- // last time. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", fooValue); |
- bad->Set(DEFAULTS, "bar", fooValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
- |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ // Changes made to bad still shouldn't go to sync, even though it didn't |
+ // fail last time. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", fooValue); |
+ bad->Set(DEFAULTS, "bar", fooValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // Failing ProcessSyncChanges shouldn't go to the storage. |
- GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateUpdate( |
+ // Failing ProcessSyncChanges shouldn't go to the storage. |
+ GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back(settings_sync_util::CreateUpdate( |
"good", "foo", fooValue, model_type)); |
- // (Ditto.) |
- change_list.push_back(settings_sync_util::CreateUpdate( |
- "bad", "foo", fooValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
- GetExisting("bad")->set_status_code(ValueStore::OK); |
+ // (Ditto.) |
+ change_list.push_back( |
+ settings_sync_util::CreateUpdate("bad", "foo", fooValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
+ GetExisting("bad")->set_status_code(ValueStore::OK); |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // Restarting sync should make bad start syncing again. |
- sync_processor_->ClearChanges(); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
- sync_processor_wrapper_.reset( |
- new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- // 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(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
- EXPECT_EQ(3u, sync_processor_->changes().size()); |
- |
- // Live local changes now get pushed, too. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", barValue); |
- bad->Set(DEFAULTS, "bar", barValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
- |
- // And ProcessSyncChanges work, too. |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateUpdate( |
+ // Restarting sync should make bad start syncing again. |
+ sync_processor_->ClearChanges(); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ sync_processor_wrapper_.reset( |
+ new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ |
+ // 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(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
+ EXPECT_EQ(3u, sync_processor_->changes().size()); |
+ |
+ // Live local changes now get pushed, too. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", barValue); |
+ bad->Set(DEFAULTS, "bar", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ |
+ // And ProcessSyncChanges work, too. |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back(settings_sync_util::CreateUpdate( |
"good", "bar", fooValue, model_type)); |
- change_list.push_back(settings_sync_util::CreateUpdate( |
- "bad", "bar", fooValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ change_list.push_back( |
+ settings_sync_util::CreateUpdate("bad", "bar", fooValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("bar", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("bar", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { |
@@ -869,86 +910,90 @@ TEST_F(ExtensionSettingsSyncTest, FailingProcessChangesDisablesSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- // Unlike before, initially succeeding MergeDataAndStartSyncing. |
- { |
- syncer::SyncDataList sync_data; |
- sync_data.push_back(settings_sync_util::CreateData( |
- "good", "foo", fooValue, model_type)); |
- sync_data.push_back(settings_sync_util::CreateData( |
- "bad", "foo", fooValue, model_type)); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- } |
- |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
- |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ // Unlike before, initially succeeding MergeDataAndStartSyncing. |
+ { |
+ syncer::SyncDataList sync_data; |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("good", "foo", fooValue, model_type)); |
+ sync_data.push_back( |
+ settings_sync_util::CreateData("bad", "foo", fooValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ } |
- // Now fail ProcessSyncChanges for bad. |
- GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "good", "bar", barValue, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "bad", "bar", barValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
- GetExisting("bad")->set_status_code(ValueStore::OK); |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // No more changes sent to sync for bad. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "foo", barValue); |
- bad->Set(DEFAULTS, "foo", barValue); |
+ // Now fail ProcessSyncChanges for bad. |
+ GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("good", "bar", barValue, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("bad", "bar", barValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
+ GetExisting("bad")->set_status_code(ValueStore::OK); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- // No more changes received from sync should go to bad. |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "good", "foo", fooValue, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "bad", "foo", fooValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ // No more changes sent to sync for bad. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "foo", barValue); |
+ bad->Set(DEFAULTS, "foo", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ |
+ // No more changes received from sync should go to bad. |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("good", "foo", fooValue, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("bad", "foo", fooValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { |
@@ -961,42 +1006,44 @@ TEST_F(ExtensionSettingsSyncTest, FailingGetAllSyncDataDoesntStopSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- good->Set(DEFAULTS, "foo", fooValue); |
- bad->Set(DEFAULTS, "foo", fooValue); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ good->Set(DEFAULTS, "foo", fooValue); |
+ bad->Set(DEFAULTS, "foo", fooValue); |
+ |
+ // Even though bad will fail to get all sync data, sync data should still |
+ // include that from good. |
+ GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
+ { |
+ syncer::SyncDataList all_sync_data = |
+ GetSyncableService(model_type)->GetAllSyncData(model_type); |
+ EXPECT_EQ(1u, all_sync_data.size()); |
+ EXPECT_EQ("good/foo", syncer::SyncDataLocal(all_sync_data[0]).GetTag()); |
+ } |
+ GetExisting("bad")->set_status_code(ValueStore::OK); |
- // Even though bad will fail to get all sync data, sync data should still |
- // include that from good. |
- GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
- { |
- syncer::SyncDataList all_sync_data = |
- GetSyncableService(model_type)->GetAllSyncData(model_type); |
- EXPECT_EQ(1u, all_sync_data.size()); |
- EXPECT_EQ("good/foo", syncer::SyncDataLocal(all_sync_data[0]).GetTag()); |
- } |
- GetExisting("bad")->set_status_code(ValueStore::OK); |
- |
- // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
- |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", barValue); |
- bad->Set(DEFAULTS, "bar", barValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ // Sync shouldn't be disabled for good (nor bad -- but this is unimportant). |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", barValue); |
+ bad->Set(DEFAULTS, "bar", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
@@ -1009,87 +1056,90 @@ TEST_F(ExtensionSettingsSyncTest, FailureToReadChangesToPushDisablesSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- good->Set(DEFAULTS, "foo", fooValue); |
- bad->Set(DEFAULTS, "foo", fooValue); |
- |
- // good will successfully push foo:fooValue to sync, but bad will fail to |
- // get them so won't. |
- GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- GetExisting("bad")->set_status_code(ValueStore::OK); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
- |
- // bad should now be disabled for sync. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", barValue); |
- bad->Set(DEFAULTS, "bar", barValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
- |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateUpdate( |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ good->Set(DEFAULTS, "foo", fooValue); |
+ bad->Set(DEFAULTS, "foo", fooValue); |
+ |
+ // good will successfully push foo:fooValue to sync, but bad will fail to |
+ // get them so won't. |
+ GetExisting("bad")->set_status_code(ValueStore::CORRUPTION); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ GetExisting("bad")->set_status_code(ValueStore::OK); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ |
+ // bad should now be disabled for sync. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", barValue); |
+ bad->Set(DEFAULTS, "bar", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back(settings_sync_util::CreateUpdate( |
"good", "foo", barValue, model_type)); |
- // (Sending ADD here even though it's updating, since that's what the state |
- // of sync is. In any case, it won't work.) |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "bad", "foo", barValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ // (Sending ADD here even though it's updating, since that's what the |
+ // state of sync is. In any case, it won't work.) |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("bad", "foo", barValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", fooValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", fooValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
+ |
+ // 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_processor_->ClearChanges(); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ sync_processor_wrapper_.reset( |
+ new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- // 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_processor_->ClearChanges(); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
- sync_processor_wrapper_.reset( |
- new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
- EXPECT_EQ(4u, sync_processor_->changes().size()); |
- |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "bar", fooValue); |
- bad->Set(DEFAULTS, "bar", fooValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "bar")->change_type()); |
+ EXPECT_EQ(4u, sync_processor_->changes().size()); |
+ |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "bar", fooValue); |
+ bad->Set(DEFAULTS, "bar", fooValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
@@ -1102,76 +1152,79 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalStateDisablesSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- // Only set bad; setting good will cause it to fail below. |
- bad->Set(DEFAULTS, "foo", fooValue); |
- |
- sync_processor_->set_fail_all_requests(true); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- sync_processor_->set_fail_all_requests(false); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ // Only set bad; setting good will cause it to fail below. |
+ bad->Set(DEFAULTS, "foo", fooValue); |
- // Changes from good will be send to sync, changes from bad won't. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "foo", barValue); |
- bad->Set(DEFAULTS, "foo", barValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ sync_processor_->set_fail_all_requests(true); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ sync_processor_->set_fail_all_requests(false); |
+ |
+ // Changes from good will be send to sync, changes from bad won't. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "foo", barValue); |
+ bad->Set(DEFAULTS, "foo", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ 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. |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("good", "bar", barValue, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("bad", "bar", barValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
- // Changes from sync will be sent to good, not to bad. |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "good", "bar", barValue, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "bad", "bar", barValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ // Restarting sync makes everything work again. |
+ sync_processor_->ClearChanges(); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ sync_processor_wrapper_.reset( |
+ new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- // Restarting sync makes everything work again. |
- sync_processor_->ClearChanges(); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
- sync_processor_wrapper_.reset( |
- new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
- EXPECT_EQ(3u, sync_processor_->changes().size()); |
- |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "foo", fooValue); |
- bad->Set(DEFAULTS, "foo", fooValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
+ EXPECT_EQ(3u, sync_processor_->changes().size()); |
+ |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "foo", fooValue); |
+ bad->Set(DEFAULTS, "foo", fooValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
@@ -1184,81 +1237,84 @@ TEST_F(ExtensionSettingsSyncTest, FailureToPushLocalChangeDisablesSync) { |
ValueStore* good = AddExtensionAndGetStorage("good", type); |
ValueStore* bad = AddExtensionAndGetStorage("bad", type); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- // bad will fail to send changes. |
- good->Set(DEFAULTS, "foo", fooValue); |
- sync_processor_->set_fail_all_requests(true); |
- bad->Set(DEFAULTS, "foo", fooValue); |
- sync_processor_->set_fail_all_requests(false); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(1u, sync_processor_->changes().size()); |
- |
- // No further changes should be sent from bad. |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "foo", barValue); |
- bad->Set(DEFAULTS, "foo", barValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- 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. |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "good", "bar", barValue, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
- "bad", "bar", barValue, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- dict.Set("bar", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
- } |
- { |
- base::DictionaryValue dict; |
- dict.Set("foo", barValue.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
- } |
+ // bad will fail to send changes. |
+ good->Set(DEFAULTS, "foo", fooValue); |
+ sync_processor_->set_fail_all_requests(true); |
+ bad->Set(DEFAULTS, "foo", fooValue); |
+ sync_processor_->set_fail_all_requests(false); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(1u, sync_processor_->changes().size()); |
+ |
+ // No further changes should be sent from bad. |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "foo", barValue); |
+ bad->Set(DEFAULTS, "foo", barValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ 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. |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("good", "bar", barValue, model_type)); |
+ change_list.push_back( |
+ settings_sync_util::CreateAdd("bad", "bar", barValue, model_type)); |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
+ |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ dict.Set("bar", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, good->Get()); |
+ } |
+ { |
+ base::DictionaryValue dict; |
+ dict.Set("foo", barValue.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, dict, bad->Get()); |
+ } |
+ |
+ // Restarting sync makes everything work again. |
+ sync_processor_->ClearChanges(); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ sync_processor_wrapper_.reset( |
+ new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- // Restarting sync makes everything work again. |
- sync_processor_->ClearChanges(); |
- GetSyncableService(model_type)->StopSyncing(model_type); |
- sync_processor_wrapper_.reset( |
- new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
- sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
- EXPECT_EQ(3u, sync_processor_->changes().size()); |
- |
- sync_processor_->ClearChanges(); |
- good->Set(DEFAULTS, "foo", fooValue); |
- bad->Set(DEFAULTS, "foo", fooValue); |
- |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
- sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
- EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("good", "bar")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, |
+ sync_processor_->GetOnlyChange("bad", "foo")->change_type()); |
+ EXPECT_EQ(3u, sync_processor_->changes().size()); |
+ |
+ sync_processor_->ClearChanges(); |
+ good->Set(DEFAULTS, "foo", fooValue); |
+ bad->Set(DEFAULTS, "foo", fooValue); |
+ |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, |
+ sync_processor_->GetOnlyChange("good", "foo")->change_type()); |
+ EXPECT_EQ(2u, sync_processor_->changes().size()); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, |
@@ -1273,36 +1329,45 @@ TEST_F(ExtensionSettingsSyncTest, |
} |
base::Value large_value(string_10k); |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, syncer::SyncDataList(), |
- std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, syncer::SyncDataList(), |
+ std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ }); |
// Large local change rejected and doesn't get sent out. |
ValueStore* storage1 = AddExtensionAndGetStorage("s1", type); |
- EXPECT_FALSE( |
- storage1->Set(DEFAULTS, "large_value", large_value)->status().ok()); |
- EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ EXPECT_FALSE( |
+ storage1->Set(DEFAULTS, "large_value", large_value)->status().ok()); |
+ EXPECT_EQ(0u, sync_processor_->changes().size()); |
+ }); |
// Large incoming change should still get accepted. |
ValueStore* storage2 = AddExtensionAndGetStorage("s2", type); |
- { |
- syncer::SyncChangeList change_list; |
- change_list.push_back(settings_sync_util::CreateAdd( |
+ |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ { |
+ syncer::SyncChangeList change_list; |
+ change_list.push_back(settings_sync_util::CreateAdd( |
"s1", "large_value", large_value, model_type)); |
- change_list.push_back(settings_sync_util::CreateAdd( |
+ change_list.push_back(settings_sync_util::CreateAdd( |
"s2", "large_value", large_value, model_type)); |
- GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); |
- } |
- { |
- base::DictionaryValue expected; |
- expected.Set("large_value", large_value.CreateDeepCopy()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
- EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
- } |
+ GetSyncableService(model_type) |
+ ->ProcessSyncChanges(FROM_HERE, change_list); |
+ } |
+ { |
+ base::DictionaryValue expected; |
+ expected.Set("large_value", large_value.CreateDeepCopy()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); |
+ EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); |
+ } |
- GetSyncableService(model_type)->StopSyncing(model_type); |
+ GetSyncableService(model_type)->StopSyncing(model_type); |
+ }); |
} |
TEST_F(ExtensionSettingsSyncTest, Dots) { |
@@ -1311,41 +1376,43 @@ TEST_F(ExtensionSettingsSyncTest, Dots) { |
ValueStore* storage = AddExtensionAndGetStorage("ext", type); |
- { |
- syncer::SyncDataList sync_data_list; |
- std::unique_ptr<base::Value> string_value(new base::Value("value")); |
- sync_data_list.push_back(settings_sync_util::CreateData( |
- "ext", "key.with.dot", *string_value, model_type)); |
- |
- GetSyncableService(model_type) |
- ->MergeDataAndStartSyncing( |
- model_type, sync_data_list, std::move(sync_processor_wrapper_), |
- base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
- } |
+ PostOnBackendSequenceAndWait(FROM_HERE, [&, this]() { |
+ { |
+ syncer::SyncDataList sync_data_list; |
+ std::unique_ptr<base::Value> string_value(new base::Value("value")); |
+ sync_data_list.push_back(settings_sync_util::CreateData( |
+ "ext", "key.with.dot", *string_value, model_type)); |
+ |
+ GetSyncableService(model_type) |
+ ->MergeDataAndStartSyncing( |
+ model_type, sync_data_list, std::move(sync_processor_wrapper_), |
+ base::MakeUnique<syncer::SyncErrorFactoryMock>()); |
+ } |
- // Test dots in keys that come from sync. |
- { |
- ValueStore::ReadResult data = storage->Get(); |
- ASSERT_TRUE(data->status().ok()); |
+ // Test dots in keys that come from sync. |
+ { |
+ ValueStore::ReadResult data = storage->Get(); |
+ ASSERT_TRUE(data->status().ok()); |
- base::DictionaryValue expected_data; |
- expected_data.SetWithoutPathExpansion( |
- "key.with.dot", base::MakeUnique<base::Value>("value")); |
- EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); |
- } |
+ base::DictionaryValue expected_data; |
+ expected_data.SetWithoutPathExpansion( |
+ "key.with.dot", base::MakeUnique<base::Value>("value")); |
+ EXPECT_TRUE(base::Value::Equals(&expected_data, &data->settings())); |
+ } |
- // Test dots in keys going to sync. |
- { |
- std::unique_ptr<base::Value> string_value(new base::Value("spot")); |
- storage->Set(DEFAULTS, "key.with.spot", *string_value); |
- |
- ASSERT_EQ(1u, sync_processor_->changes().size()); |
- SettingSyncData* sync_data = sync_processor_->changes()[0].get(); |
- EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); |
- EXPECT_EQ("ext", sync_data->extension_id()); |
- EXPECT_EQ("key.with.spot", sync_data->key()); |
- EXPECT_TRUE(sync_data->value().Equals(string_value.get())); |
- } |
+ // Test dots in keys going to sync. |
+ { |
+ std::unique_ptr<base::Value> string_value(new base::Value("spot")); |
+ storage->Set(DEFAULTS, "key.with.spot", *string_value); |
+ |
+ ASSERT_EQ(1u, sync_processor_->changes().size()); |
+ SettingSyncData* sync_data = sync_processor_->changes()[0].get(); |
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type()); |
+ EXPECT_EQ("ext", sync_data->extension_id()); |
+ EXPECT_EQ("key.with.spot", sync_data->key()); |
+ EXPECT_TRUE(sync_data->value().Equals(string_value.get())); |
+ } |
+ }); |
} |
// In other (frontend) tests, we assume that the result of GetStorage |
@@ -1404,7 +1471,7 @@ TEST_F(ExtensionSettingsSyncTest, MAYBE_UnlimitedStorageForLocalButNotSync) { |
settings_namespace::LOCAL, |
base::Bind(&UnlimitedLocalStorageTestCallback)); |
- base::RunLoop().RunUntilIdle(); |
+ content::RunAllBlockingPoolTasksUntilIdle(); |
} |
} // namespace extensions |