| Index: chrome/browser/supervised_user/supervised_user_settings_service_unittest.cc | 
| diff --git a/chrome/browser/supervised_user/supervised_user_settings_service_unittest.cc b/chrome/browser/supervised_user/supervised_user_settings_service_unittest.cc | 
| index eb794051c9152e913c4b8265ed6f42103ca1414e..4d2ce978bf9be0a57b2d2249a70a4da5ac3b84b4 100644 | 
| --- a/chrome/browser/supervised_user/supervised_user_settings_service_unittest.cc | 
| +++ b/chrome/browser/supervised_user/supervised_user_settings_service_unittest.cc | 
| @@ -70,20 +70,21 @@ class SupervisedUserSettingsServiceTest : public ::testing::Test { | 
| new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 
| } | 
|  | 
| -  void StartSyncing(const syncer::SyncDataList& initial_sync_data) { | 
| +  syncer::SyncMergeResult StartSyncing( | 
| +      const syncer::SyncDataList& initial_sync_data) { | 
| scoped_ptr<syncer::SyncErrorFactory> error_handler( | 
| new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); | 
| syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( | 
| syncer::SUPERVISED_USER_SETTINGS, initial_sync_data, | 
| CreateSyncProcessor(), std::move(error_handler)); | 
| EXPECT_FALSE(result.error().IsSet()); | 
| +    return result; | 
| } | 
|  | 
| void UploadSplitItem(const std::string& key, const std::string& value) { | 
| split_items_.SetStringWithoutPathExpansion(key, value); | 
| settings_service_.UploadItem( | 
| -        SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 
| -                                                           key), | 
| +        SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, key), | 
| scoped_ptr<base::Value>(new base::StringValue(value))); | 
| } | 
|  | 
| @@ -97,7 +98,7 @@ class SupervisedUserSettingsServiceTest : public ::testing::Test { | 
| void VerifySyncDataItem(syncer::SyncData sync_data) { | 
| const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = | 
| sync_data.GetSpecifics().managed_user_setting(); | 
| -    base::Value* expected_value = NULL; | 
| +    base::Value* expected_value = nullptr; | 
| if (supervised_user_setting.name() == kAtomicItemName) { | 
| expected_value = atomic_setting_value_.get(); | 
| } else { | 
| @@ -150,7 +151,7 @@ class SupervisedUserSettingsServiceTest : public ::testing::Test { | 
| TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { | 
| StartSyncing(syncer::SyncDataList()); | 
| ASSERT_TRUE(settings_); | 
| -  const base::Value* value = NULL; | 
| +  const base::Value* value = nullptr; | 
| EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 
|  | 
| settings_.reset(); | 
| @@ -173,7 +174,7 @@ TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { | 
| TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { | 
| StartSyncing(syncer::SyncDataList()); | 
| ASSERT_TRUE(settings_); | 
| -  const base::Value* value = NULL; | 
| +  const base::Value* value = nullptr; | 
| EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 
|  | 
| base::DictionaryValue dict; | 
| @@ -197,13 +198,83 @@ TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { | 
| EXPECT_FALSE(error.IsSet()) << error.ToString(); | 
| ASSERT_TRUE(settings_); | 
| ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 
| -  const base::DictionaryValue* dict_value = NULL; | 
| +  const base::DictionaryValue* dict_value = nullptr; | 
| ASSERT_TRUE(value->GetAsDictionary(&dict_value)); | 
| EXPECT_TRUE(dict_value->Equals(&dict)); | 
| } | 
|  | 
| +TEST_F(SupervisedUserSettingsServiceTest, Merge) { | 
| +  syncer::SyncMergeResult result = StartSyncing(syncer::SyncDataList()); | 
| +  EXPECT_EQ(0, result.num_items_before_association()); | 
| +  EXPECT_EQ(0, result.num_items_added()); | 
| +  EXPECT_EQ(0, result.num_items_modified()); | 
| +  EXPECT_EQ(0, result.num_items_deleted()); | 
| +  EXPECT_EQ(0, result.num_items_after_association()); | 
| + | 
| +  ASSERT_TRUE(settings_); | 
| +  const base::Value* value = nullptr; | 
| +  EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 
| + | 
| +  settings_.reset(); | 
| + | 
| +  { | 
| +    syncer::SyncDataList sync_data; | 
| +    // Adding 1 Atomic entry. | 
| +    sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( | 
| +        kSettingsName, base::StringValue(kSettingsValue))); | 
| +    // Adding 2 SplitSettings from dictionary. | 
| +    base::DictionaryValue dict; | 
| +    dict.SetString("foo", "bar"); | 
| +    dict.SetInteger("eaudecologne", 4711); | 
| +    for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); | 
| +         it.Advance()) { | 
| +      sync_data.push_back( | 
| +          SupervisedUserSettingsService::CreateSyncDataForSetting( | 
| +              SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 
| +                                                                 it.key()), | 
| +              it.value())); | 
| +    } | 
| +    result = StartSyncing(sync_data); | 
| +    EXPECT_EQ(0, result.num_items_before_association()); | 
| +    EXPECT_EQ(3, result.num_items_added()); | 
| +    EXPECT_EQ(0, result.num_items_modified()); | 
| +    EXPECT_EQ(0, result.num_items_deleted()); | 
| +    EXPECT_EQ(3, result.num_items_after_association()); | 
| +    settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); | 
| +  } | 
| + | 
| +  { | 
| +    // Here we are carry over the preference state that was set earlier. | 
| +    syncer::SyncDataList sync_data; | 
| +    // Adding 1 atomic Item in the queue. | 
| +    UploadAtomicItem("hurdle"); | 
| +    // Adding 2 split Item in the queue. | 
| +    UploadSplitItem("burp", "baz"); | 
| +    UploadSplitItem("item", "second"); | 
| + | 
| +    base::DictionaryValue dict; | 
| +    dict.SetString("foo", "burp"); | 
| +    dict.SetString("item", "first"); | 
| +    // Adding 2 SplitSettings from dictionary. | 
| +    for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); | 
| +         it.Advance()) { | 
| +      sync_data.push_back( | 
| +          SupervisedUserSettingsService::CreateSyncDataForSetting( | 
| +              SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 
| +                                                                 it.key()), | 
| +              it.value())); | 
| +    } | 
| +    result = StartSyncing(sync_data); | 
| +    EXPECT_EQ(6, result.num_items_before_association()); | 
| +    EXPECT_EQ(0, result.num_items_added()); | 
| +    EXPECT_EQ(1, result.num_items_modified()); | 
| +    EXPECT_EQ(2, result.num_items_deleted()); | 
| +    EXPECT_EQ(4, result.num_items_after_association()); | 
| +  } | 
| +} | 
| + | 
| TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { | 
| -  const base::Value* value = NULL; | 
| +  const base::Value* value = nullptr; | 
| EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 
|  | 
| settings_.reset(); | 
| @@ -284,7 +355,7 @@ TEST_F(SupervisedUserSettingsServiceTest, UploadItem) { | 
| VerifySyncDataItem(sync_data_item); | 
|  | 
| // The uploaded items should not show up as settings. | 
| -  const base::Value* value = NULL; | 
| +  const base::Value* value = nullptr; | 
| EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); | 
| EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); | 
|  | 
|  |