| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" | 5 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 protected: | 63 protected: |
| 64 SupervisedUserSettingsServiceTest() : settings_service_(nullptr) {} | 64 SupervisedUserSettingsServiceTest() : settings_service_(nullptr) {} |
| 65 ~SupervisedUserSettingsServiceTest() override {} | 65 ~SupervisedUserSettingsServiceTest() override {} |
| 66 | 66 |
| 67 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { | 67 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { |
| 68 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); | 68 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); |
| 69 return scoped_ptr<syncer::SyncChangeProcessor>( | 69 return scoped_ptr<syncer::SyncChangeProcessor>( |
| 70 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 70 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 71 } | 71 } |
| 72 | 72 |
| 73 void StartSyncing(const syncer::SyncDataList& initial_sync_data) { | 73 syncer::SyncMergeResult StartSyncing( |
| 74 const syncer::SyncDataList& initial_sync_data) { |
| 74 scoped_ptr<syncer::SyncErrorFactory> error_handler( | 75 scoped_ptr<syncer::SyncErrorFactory> error_handler( |
| 75 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); | 76 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); |
| 76 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( | 77 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( |
| 77 syncer::SUPERVISED_USER_SETTINGS, initial_sync_data, | 78 syncer::SUPERVISED_USER_SETTINGS, initial_sync_data, |
| 78 CreateSyncProcessor(), std::move(error_handler)); | 79 CreateSyncProcessor(), std::move(error_handler)); |
| 79 EXPECT_FALSE(result.error().IsSet()); | 80 EXPECT_FALSE(result.error().IsSet()); |
| 81 return result; |
| 80 } | 82 } |
| 81 | 83 |
| 82 void UploadSplitItem(const std::string& key, const std::string& value) { | 84 void UploadSplitItem(const std::string& key, const std::string& value) { |
| 83 split_items_.SetStringWithoutPathExpansion(key, value); | 85 split_items_.SetStringWithoutPathExpansion(key, value); |
| 84 settings_service_.UploadItem( | 86 settings_service_.UploadItem( |
| 85 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 87 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, |
| 86 key), | 88 key), |
| 87 scoped_ptr<base::Value>(new base::StringValue(value))); | 89 scoped_ptr<base::Value>(new base::StringValue(value))); |
| 88 } | 90 } |
| 89 | 91 |
| 90 void UploadAtomicItem(const std::string& value) { | 92 void UploadAtomicItem(const std::string& value) { |
| 91 atomic_setting_value_.reset(new base::StringValue(value)); | 93 atomic_setting_value_.reset(new base::StringValue(value)); |
| 92 settings_service_.UploadItem( | 94 settings_service_.UploadItem( |
| 93 kAtomicItemName, | 95 kAtomicItemName, |
| 94 scoped_ptr<base::Value>(new base::StringValue(value))); | 96 scoped_ptr<base::Value>(new base::StringValue(value))); |
| 95 } | 97 } |
| 96 | 98 |
| 97 void VerifySyncDataItem(syncer::SyncData sync_data) { | 99 void VerifySyncDataItem(syncer::SyncData sync_data) { |
| 98 const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = | 100 const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = |
| 99 sync_data.GetSpecifics().managed_user_setting(); | 101 sync_data.GetSpecifics().managed_user_setting(); |
| 100 base::Value* expected_value = NULL; | 102 base::Value* expected_value = nullptr; |
| 101 if (supervised_user_setting.name() == kAtomicItemName) { | 103 if (supervised_user_setting.name() == kAtomicItemName) { |
| 102 expected_value = atomic_setting_value_.get(); | 104 expected_value = atomic_setting_value_.get(); |
| 103 } else { | 105 } else { |
| 104 EXPECT_TRUE(base::StartsWith(supervised_user_setting.name(), | 106 EXPECT_TRUE(base::StartsWith(supervised_user_setting.name(), |
| 105 std::string(kSplitItemName) + ':', | 107 std::string(kSplitItemName) + ':', |
| 106 base::CompareCase::SENSITIVE)); | 108 base::CompareCase::SENSITIVE)); |
| 107 std::string key = | 109 std::string key = |
| 108 supervised_user_setting.name().substr(strlen(kSplitItemName) + 1); | 110 supervised_user_setting.name().substr(strlen(kSplitItemName) + 1); |
| 109 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); | 111 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); |
| 110 } | 112 } |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 scoped_ptr<base::DictionaryValue> settings_; | 145 scoped_ptr<base::DictionaryValue> settings_; |
| 144 scoped_ptr<base::CallbackList<void( | 146 scoped_ptr<base::CallbackList<void( |
| 145 const base::DictionaryValue*)>::Subscription> user_settings_subscription_; | 147 const base::DictionaryValue*)>::Subscription> user_settings_subscription_; |
| 146 | 148 |
| 147 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; | 149 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; |
| 148 }; | 150 }; |
| 149 | 151 |
| 150 TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { | 152 TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { |
| 151 StartSyncing(syncer::SyncDataList()); | 153 StartSyncing(syncer::SyncDataList()); |
| 152 ASSERT_TRUE(settings_); | 154 ASSERT_TRUE(settings_); |
| 153 const base::Value* value = NULL; | 155 const base::Value* value = nullptr; |
| 154 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 156 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 155 | 157 |
| 156 settings_.reset(); | 158 settings_.reset(); |
| 157 syncer::SyncData data = | 159 syncer::SyncData data = |
| 158 SupervisedUserSettingsService::CreateSyncDataForSetting( | 160 SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 159 kSettingsName, base::StringValue(kSettingsValue)); | 161 kSettingsName, base::StringValue(kSettingsValue)); |
| 160 syncer::SyncChangeList change_list; | 162 syncer::SyncChangeList change_list; |
| 161 change_list.push_back( | 163 change_list.push_back( |
| 162 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 164 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
| 163 syncer::SyncError error = | 165 syncer::SyncError error = |
| 164 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 166 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
| 165 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 167 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
| 166 ASSERT_TRUE(settings_); | 168 ASSERT_TRUE(settings_); |
| 167 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 169 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 168 std::string string_value; | 170 std::string string_value; |
| 169 EXPECT_TRUE(value->GetAsString(&string_value)); | 171 EXPECT_TRUE(value->GetAsString(&string_value)); |
| 170 EXPECT_EQ(kSettingsValue, string_value); | 172 EXPECT_EQ(kSettingsValue, string_value); |
| 171 } | 173 } |
| 172 | 174 |
| 173 TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { | 175 TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { |
| 174 StartSyncing(syncer::SyncDataList()); | 176 StartSyncing(syncer::SyncDataList()); |
| 175 ASSERT_TRUE(settings_); | 177 ASSERT_TRUE(settings_); |
| 176 const base::Value* value = NULL; | 178 const base::Value* value = nullptr; |
| 177 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 179 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 178 | 180 |
| 179 base::DictionaryValue dict; | 181 base::DictionaryValue dict; |
| 180 dict.SetString("foo", "bar"); | 182 dict.SetString("foo", "bar"); |
| 181 dict.SetBoolean("awesomesauce", true); | 183 dict.SetBoolean("awesomesauce", true); |
| 182 dict.SetInteger("eaudecologne", 4711); | 184 dict.SetInteger("eaudecologne", 4711); |
| 183 | 185 |
| 184 settings_.reset(); | 186 settings_.reset(); |
| 185 syncer::SyncChangeList change_list; | 187 syncer::SyncChangeList change_list; |
| 186 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | 188 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
| 187 syncer::SyncData data = | 189 syncer::SyncData data = |
| 188 SupervisedUserSettingsService::CreateSyncDataForSetting( | 190 SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 189 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, | 191 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, |
| 190 it.key()), | 192 it.key()), |
| 191 it.value()); | 193 it.value()); |
| 192 change_list.push_back( | 194 change_list.push_back( |
| 193 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 195 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
| 194 } | 196 } |
| 195 syncer::SyncError error = | 197 syncer::SyncError error = |
| 196 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 198 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
| 197 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 199 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
| 198 ASSERT_TRUE(settings_); | 200 ASSERT_TRUE(settings_); |
| 199 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 201 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 200 const base::DictionaryValue* dict_value = NULL; | 202 const base::DictionaryValue* dict_value = nullptr; |
| 201 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); | 203 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); |
| 202 EXPECT_TRUE(dict_value->Equals(&dict)); | 204 EXPECT_TRUE(dict_value->Equals(&dict)); |
| 203 } | 205 } |
| 204 | 206 |
| 207 TEST_F(SupervisedUserSettingsServiceTest, Merge) { |
| 208 syncer::SyncMergeResult result = StartSyncing(syncer::SyncDataList()); |
| 209 EXPECT_EQ(0, result.num_items_added()); |
| 210 EXPECT_EQ(0, result.num_items_deleted()); |
| 211 EXPECT_EQ(0, result.num_items_modified()); |
| 212 EXPECT_EQ(0, result.num_items_before_association()); |
| 213 EXPECT_EQ(0, result.num_items_after_association()); |
| 214 |
| 215 ASSERT_TRUE(settings_); |
| 216 const base::Value* value = nullptr; |
| 217 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 218 |
| 219 base::DictionaryValue dict; |
| 220 dict.SetString("foo", "bar"); |
| 221 dict.SetBoolean("awesomesauce", true); |
| 222 dict.SetInteger("eaudecologne", 4711); |
| 223 |
| 224 settings_.reset(); |
| 225 syncer::SyncDataList sync_data; |
| 226 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 227 kSettingsName, base::StringValue(kSettingsValue))); |
| 228 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
| 229 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 230 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, |
| 231 it.key()), |
| 232 it.value())); |
| 233 } |
| 234 |
| 235 result = StartSyncing(sync_data); |
| 236 EXPECT_EQ(4, result.num_items_added()); |
| 237 EXPECT_EQ(0, result.num_items_deleted()); |
| 238 EXPECT_EQ(0, result.num_items_modified()); |
| 239 EXPECT_EQ(0, result.num_items_before_association()); |
| 240 EXPECT_EQ(4, result.num_items_after_association()); |
| 241 |
| 242 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); |
| 243 sync_data.clear(); |
| 244 // Adding split Item in the queue. |
| 245 UploadSplitItem("blurp", "baz"); |
| 246 // Adding atomic Item in the queue. |
| 247 UploadAtomicItem("hurdle"); |
| 248 |
| 249 dict.Clear(); |
| 250 dict.SetString("foo", "burp"); |
| 251 dict.SetString("item", "first"); |
| 252 |
| 253 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
| 254 sync_data.push_back(SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 255 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, |
| 256 it.key()), |
| 257 it.value())); |
| 258 } |
| 259 |
| 260 result = StartSyncing(sync_data); |
| 261 EXPECT_EQ(3, result.num_items_added()); |
| 262 EXPECT_EQ(3, result.num_items_deleted()); |
| 263 EXPECT_EQ(1, result.num_items_modified()); |
| 264 EXPECT_EQ(4, result.num_items_before_association()); |
| 265 EXPECT_EQ(4, result.num_items_after_association()); |
| 266 } |
| 267 |
| 205 TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { | 268 TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { |
| 206 const base::Value* value = NULL; | 269 const base::Value* value = nullptr; |
| 207 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 270 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 208 | 271 |
| 209 settings_.reset(); | 272 settings_.reset(); |
| 210 settings_service_.SetLocalSetting( | 273 settings_service_.SetLocalSetting( |
| 211 kSettingsName, | 274 kSettingsName, |
| 212 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); | 275 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); |
| 213 ASSERT_TRUE(settings_); | 276 ASSERT_TRUE(settings_); |
| 214 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 277 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 215 std::string string_value; | 278 std::string string_value; |
| 216 EXPECT_TRUE(value->GetAsString(&string_value)); | 279 EXPECT_TRUE(value->GetAsString(&string_value)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); | 340 EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type()); |
| 278 VerifySyncDataItem(change.sync_data()); | 341 VerifySyncDataItem(change.sync_data()); |
| 279 | 342 |
| 280 sync_data = settings_service_.GetAllSyncData( | 343 sync_data = settings_service_.GetAllSyncData( |
| 281 syncer::SUPERVISED_USER_SETTINGS); | 344 syncer::SUPERVISED_USER_SETTINGS); |
| 282 EXPECT_EQ(4u, sync_data.size()); | 345 EXPECT_EQ(4u, sync_data.size()); |
| 283 for (const syncer::SyncData& sync_data_item : sync_data) | 346 for (const syncer::SyncData& sync_data_item : sync_data) |
| 284 VerifySyncDataItem(sync_data_item); | 347 VerifySyncDataItem(sync_data_item); |
| 285 | 348 |
| 286 // The uploaded items should not show up as settings. | 349 // The uploaded items should not show up as settings. |
| 287 const base::Value* value = NULL; | 350 const base::Value* value = nullptr; |
| 288 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); | 351 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); |
| 289 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); | 352 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); |
| 290 | 353 |
| 291 // Restarting sync should not create any new changes. | 354 // Restarting sync should not create any new changes. |
| 292 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); | 355 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); |
| 293 StartSyncing(sync_data); | 356 StartSyncing(sync_data); |
| 294 ASSERT_EQ(0u, sync_processor_->changes().size()); | 357 ASSERT_EQ(0u, sync_processor_->changes().size()); |
| 295 } | 358 } |
| OLD | NEW |