| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/callback.h" | 6 #include "base/callback.h" |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/prefs/testing_pref_store.h" | 8 #include "base/prefs/testing_pref_store.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "chrome/browser/managed_mode/managed_user_settings_service.h" | 10 #include "chrome/browser/supervised_user/supervised_user_settings_service.h" |
| 11 #include "sync/api/fake_sync_change_processor.h" | 11 #include "sync/api/fake_sync_change_processor.h" |
| 12 #include "sync/api/sync_change.h" | 12 #include "sync/api/sync_change.h" |
| 13 #include "sync/api/sync_change_processor_wrapper_for_test.h" | 13 #include "sync/api/sync_change_processor_wrapper_for_test.h" |
| 14 #include "sync/api/sync_error_factory_mock.h" | 14 #include "sync/api/sync_error_factory_mock.h" |
| 15 #include "sync/protocol/sync.pb.h" | 15 #include "sync/protocol/sync.pb.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 namespace { | 18 namespace { |
| 19 | 19 |
| 20 class MockSyncErrorFactory : public syncer::SyncErrorFactory { | 20 class MockSyncErrorFactory : public syncer::SyncErrorFactory { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 47 type_); | 47 type_); |
| 48 } | 48 } |
| 49 | 49 |
| 50 } // namespace | 50 } // namespace |
| 51 | 51 |
| 52 const char kAtomicItemName[] = "X-Wombat"; | 52 const char kAtomicItemName[] = "X-Wombat"; |
| 53 const char kSettingsName[] = "TestingSetting"; | 53 const char kSettingsName[] = "TestingSetting"; |
| 54 const char kSettingsValue[] = "SettingsValue"; | 54 const char kSettingsValue[] = "SettingsValue"; |
| 55 const char kSplitItemName[] = "X-SuperMoosePowers"; | 55 const char kSplitItemName[] = "X-SuperMoosePowers"; |
| 56 | 56 |
| 57 class ManagedUserSettingsServiceTest : public ::testing::Test { | 57 class SupervisedUserSettingsServiceTest : public ::testing::Test { |
| 58 protected: | 58 protected: |
| 59 ManagedUserSettingsServiceTest() {} | 59 SupervisedUserSettingsServiceTest() {} |
| 60 virtual ~ManagedUserSettingsServiceTest() {} | 60 virtual ~SupervisedUserSettingsServiceTest() {} |
| 61 | 61 |
| 62 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { | 62 scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() { |
| 63 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); | 63 sync_processor_.reset(new syncer::FakeSyncChangeProcessor); |
| 64 return scoped_ptr<syncer::SyncChangeProcessor>( | 64 return scoped_ptr<syncer::SyncChangeProcessor>( |
| 65 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); | 65 new syncer::SyncChangeProcessorWrapperForTest(sync_processor_.get())); |
| 66 } | 66 } |
| 67 | 67 |
| 68 void StartSyncing(const syncer::SyncDataList& initial_sync_data) { | 68 void StartSyncing(const syncer::SyncDataList& initial_sync_data) { |
| 69 scoped_ptr<syncer::SyncErrorFactory> error_handler( | 69 scoped_ptr<syncer::SyncErrorFactory> error_handler( |
| 70 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); | 70 new MockSyncErrorFactory(syncer::SUPERVISED_USER_SETTINGS)); |
| 71 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( | 71 syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing( |
| 72 syncer::SUPERVISED_USER_SETTINGS, | 72 syncer::SUPERVISED_USER_SETTINGS, |
| 73 initial_sync_data, | 73 initial_sync_data, |
| 74 CreateSyncProcessor(), | 74 CreateSyncProcessor(), |
| 75 error_handler.Pass()); | 75 error_handler.Pass()); |
| 76 EXPECT_FALSE(result.error().IsSet()); | 76 EXPECT_FALSE(result.error().IsSet()); |
| 77 } | 77 } |
| 78 | 78 |
| 79 void UploadSplitItem(const std::string& key, const std::string& value) { | 79 void UploadSplitItem(const std::string& key, const std::string& value) { |
| 80 split_items_.SetStringWithoutPathExpansion(key, value); | 80 split_items_.SetStringWithoutPathExpansion(key, value); |
| 81 settings_service_.UploadItem( | 81 settings_service_.UploadItem( |
| 82 ManagedUserSettingsService::MakeSplitSettingKey(kSplitItemName, | 82 SupervisedUserSettingsService::MakeSplitSettingKey(kSplitItemName, |
| 83 key), | 83 key), |
| 84 scoped_ptr<base::Value>(new base::StringValue(value))); | 84 scoped_ptr<base::Value>(new base::StringValue(value))); |
| 85 } | 85 } |
| 86 | 86 |
| 87 void UploadAtomicItem(const std::string& value) { | 87 void UploadAtomicItem(const std::string& value) { |
| 88 atomic_setting_value_.reset(new base::StringValue(value)); | 88 atomic_setting_value_.reset(new base::StringValue(value)); |
| 89 settings_service_.UploadItem( | 89 settings_service_.UploadItem( |
| 90 kAtomicItemName, | 90 kAtomicItemName, |
| 91 scoped_ptr<base::Value>(new base::StringValue(value))); | 91 scoped_ptr<base::Value>(new base::StringValue(value))); |
| 92 } | 92 } |
| 93 | 93 |
| 94 void VerifySyncDataItem(syncer::SyncData sync_data) { | 94 void VerifySyncDataItem(syncer::SyncData sync_data) { |
| 95 const sync_pb::ManagedUserSettingSpecifics& managed_user_setting = | 95 const sync_pb::ManagedUserSettingSpecifics& supervised_user_setting = |
| 96 sync_data.GetSpecifics().managed_user_setting(); | 96 sync_data.GetSpecifics().managed_user_setting(); |
| 97 base::Value* expected_value = NULL; | 97 base::Value* expected_value = NULL; |
| 98 if (managed_user_setting.name() == kAtomicItemName) { | 98 if (supervised_user_setting.name() == kAtomicItemName) { |
| 99 expected_value = atomic_setting_value_.get(); | 99 expected_value = atomic_setting_value_.get(); |
| 100 } else { | 100 } else { |
| 101 EXPECT_TRUE(StartsWithASCII(managed_user_setting.name(), | 101 EXPECT_TRUE(StartsWithASCII(supervised_user_setting.name(), |
| 102 std::string(kSplitItemName) + ':', | 102 std::string(kSplitItemName) + ':', |
| 103 true)); | 103 true)); |
| 104 std::string key = | 104 std::string key = |
| 105 managed_user_setting.name().substr(strlen(kSplitItemName) + 1); | 105 supervised_user_setting.name().substr(strlen(kSplitItemName) + 1); |
| 106 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); | 106 EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value)); |
| 107 } | 107 } |
| 108 | 108 |
| 109 scoped_ptr<base::Value> value( | 109 scoped_ptr<base::Value> value( |
| 110 base::JSONReader::Read(managed_user_setting.value())); | 110 base::JSONReader::Read(supervised_user_setting.value())); |
| 111 EXPECT_TRUE(expected_value->Equals(value.get())); | 111 EXPECT_TRUE(expected_value->Equals(value.get())); |
| 112 } | 112 } |
| 113 | 113 |
| 114 void OnNewSettingsAvailable(const base::DictionaryValue* settings) { | 114 void OnNewSettingsAvailable(const base::DictionaryValue* settings) { |
| 115 if (!settings) | 115 if (!settings) |
| 116 settings_.reset(); | 116 settings_.reset(); |
| 117 else | 117 else |
| 118 settings_.reset(settings->DeepCopy()); | 118 settings_.reset(settings->DeepCopy()); |
| 119 } | 119 } |
| 120 | 120 |
| 121 // testing::Test overrides: | 121 // testing::Test overrides: |
| 122 virtual void SetUp() OVERRIDE { | 122 virtual void SetUp() OVERRIDE { |
| 123 TestingPrefStore* pref_store = new TestingPrefStore; | 123 TestingPrefStore* pref_store = new TestingPrefStore; |
| 124 settings_service_.Init(pref_store); | 124 settings_service_.Init(pref_store); |
| 125 settings_service_.Subscribe( | 125 settings_service_.Subscribe( |
| 126 base::Bind(&ManagedUserSettingsServiceTest::OnNewSettingsAvailable, | 126 base::Bind(&SupervisedUserSettingsServiceTest::OnNewSettingsAvailable, |
| 127 base::Unretained(this))); | 127 base::Unretained(this))); |
| 128 pref_store->SetInitializationCompleted(); | 128 pref_store->SetInitializationCompleted(); |
| 129 ASSERT_FALSE(settings_); | 129 ASSERT_FALSE(settings_); |
| 130 settings_service_.SetActive(true); | 130 settings_service_.SetActive(true); |
| 131 ASSERT_TRUE(settings_); | 131 ASSERT_TRUE(settings_); |
| 132 } | 132 } |
| 133 | 133 |
| 134 virtual void TearDown() OVERRIDE { | 134 virtual void TearDown() OVERRIDE { |
| 135 settings_service_.Shutdown(); | 135 settings_service_.Shutdown(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 base::DictionaryValue split_items_; | 138 base::DictionaryValue split_items_; |
| 139 scoped_ptr<base::Value> atomic_setting_value_; | 139 scoped_ptr<base::Value> atomic_setting_value_; |
| 140 ManagedUserSettingsService settings_service_; | 140 SupervisedUserSettingsService settings_service_; |
| 141 scoped_ptr<base::DictionaryValue> settings_; | 141 scoped_ptr<base::DictionaryValue> settings_; |
| 142 | 142 |
| 143 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; | 143 scoped_ptr<syncer::FakeSyncChangeProcessor> sync_processor_; |
| 144 }; | 144 }; |
| 145 | 145 |
| 146 TEST_F(ManagedUserSettingsServiceTest, ProcessAtomicSetting) { | 146 TEST_F(SupervisedUserSettingsServiceTest, ProcessAtomicSetting) { |
| 147 StartSyncing(syncer::SyncDataList()); | 147 StartSyncing(syncer::SyncDataList()); |
| 148 ASSERT_TRUE(settings_); | 148 ASSERT_TRUE(settings_); |
| 149 const base::Value* value = NULL; | 149 const base::Value* value = NULL; |
| 150 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 150 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 151 | 151 |
| 152 settings_.reset(); | 152 settings_.reset(); |
| 153 syncer::SyncData data = | 153 syncer::SyncData data = |
| 154 ManagedUserSettingsService::CreateSyncDataForSetting( | 154 SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 155 kSettingsName, base::StringValue(kSettingsValue)); | 155 kSettingsName, base::StringValue(kSettingsValue)); |
| 156 syncer::SyncChangeList change_list; | 156 syncer::SyncChangeList change_list; |
| 157 change_list.push_back( | 157 change_list.push_back( |
| 158 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 158 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
| 159 syncer::SyncError error = | 159 syncer::SyncError error = |
| 160 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 160 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
| 161 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 161 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
| 162 ASSERT_TRUE(settings_); | 162 ASSERT_TRUE(settings_); |
| 163 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 163 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 164 std::string string_value; | 164 std::string string_value; |
| 165 EXPECT_TRUE(value->GetAsString(&string_value)); | 165 EXPECT_TRUE(value->GetAsString(&string_value)); |
| 166 EXPECT_EQ(kSettingsValue, string_value); | 166 EXPECT_EQ(kSettingsValue, string_value); |
| 167 } | 167 } |
| 168 | 168 |
| 169 TEST_F(ManagedUserSettingsServiceTest, ProcessSplitSetting) { | 169 TEST_F(SupervisedUserSettingsServiceTest, ProcessSplitSetting) { |
| 170 StartSyncing(syncer::SyncDataList()); | 170 StartSyncing(syncer::SyncDataList()); |
| 171 ASSERT_TRUE(settings_); | 171 ASSERT_TRUE(settings_); |
| 172 const base::Value* value = NULL; | 172 const base::Value* value = NULL; |
| 173 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 173 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 174 | 174 |
| 175 base::DictionaryValue dict; | 175 base::DictionaryValue dict; |
| 176 dict.SetString("foo", "bar"); | 176 dict.SetString("foo", "bar"); |
| 177 dict.SetBoolean("awesomesauce", true); | 177 dict.SetBoolean("awesomesauce", true); |
| 178 dict.SetInteger("eaudecologne", 4711); | 178 dict.SetInteger("eaudecologne", 4711); |
| 179 | 179 |
| 180 settings_.reset(); | 180 settings_.reset(); |
| 181 syncer::SyncChangeList change_list; | 181 syncer::SyncChangeList change_list; |
| 182 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { | 182 for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) { |
| 183 syncer::SyncData data = | 183 syncer::SyncData data = |
| 184 ManagedUserSettingsService::CreateSyncDataForSetting( | 184 SupervisedUserSettingsService::CreateSyncDataForSetting( |
| 185 ManagedUserSettingsService::MakeSplitSettingKey(kSettingsName, | 185 SupervisedUserSettingsService::MakeSplitSettingKey(kSettingsName, |
| 186 it.key()), | 186 it.key()), |
| 187 it.value()); | 187 it.value()); |
| 188 change_list.push_back( | 188 change_list.push_back( |
| 189 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); | 189 syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data)); |
| 190 } | 190 } |
| 191 syncer::SyncError error = | 191 syncer::SyncError error = |
| 192 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); | 192 settings_service_.ProcessSyncChanges(FROM_HERE, change_list); |
| 193 EXPECT_FALSE(error.IsSet()) << error.ToString(); | 193 EXPECT_FALSE(error.IsSet()) << error.ToString(); |
| 194 ASSERT_TRUE(settings_); | 194 ASSERT_TRUE(settings_); |
| 195 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 195 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 196 const base::DictionaryValue* dict_value = NULL; | 196 const base::DictionaryValue* dict_value = NULL; |
| 197 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); | 197 ASSERT_TRUE(value->GetAsDictionary(&dict_value)); |
| 198 EXPECT_TRUE(dict_value->Equals(&dict)); | 198 EXPECT_TRUE(dict_value->Equals(&dict)); |
| 199 } | 199 } |
| 200 | 200 |
| 201 TEST_F(ManagedUserSettingsServiceTest, SetLocalSetting) { | 201 TEST_F(SupervisedUserSettingsServiceTest, SetLocalSetting) { |
| 202 const base::Value* value = NULL; | 202 const base::Value* value = NULL; |
| 203 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 203 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 204 | 204 |
| 205 settings_.reset(); | 205 settings_.reset(); |
| 206 settings_service_.SetLocalSettingForTesting( | 206 settings_service_.SetLocalSettingForTesting( |
| 207 kSettingsName, | 207 kSettingsName, |
| 208 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); | 208 scoped_ptr<base::Value>(new base::StringValue(kSettingsValue))); |
| 209 ASSERT_TRUE(settings_); | 209 ASSERT_TRUE(settings_); |
| 210 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); | 210 ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value)); |
| 211 std::string string_value; | 211 std::string string_value; |
| 212 EXPECT_TRUE(value->GetAsString(&string_value)); | 212 EXPECT_TRUE(value->GetAsString(&string_value)); |
| 213 EXPECT_EQ(kSettingsValue, string_value); | 213 EXPECT_EQ(kSettingsValue, string_value); |
| 214 } | 214 } |
| 215 | 215 |
| 216 TEST_F(ManagedUserSettingsServiceTest, UploadItem) { | 216 TEST_F(SupervisedUserSettingsServiceTest, UploadItem) { |
| 217 UploadSplitItem("foo", "bar"); | 217 UploadSplitItem("foo", "bar"); |
| 218 UploadSplitItem("blurp", "baz"); | 218 UploadSplitItem("blurp", "baz"); |
| 219 UploadAtomicItem("hurdle"); | 219 UploadAtomicItem("hurdle"); |
| 220 | 220 |
| 221 // Uploading should produce changes when we start syncing. | 221 // Uploading should produce changes when we start syncing. |
| 222 StartSyncing(syncer::SyncDataList()); | 222 StartSyncing(syncer::SyncDataList()); |
| 223 ASSERT_EQ(3u, sync_processor_->changes().size()); | 223 ASSERT_EQ(3u, sync_processor_->changes().size()); |
| 224 for (syncer::SyncChangeList::const_iterator it = | 224 for (syncer::SyncChangeList::const_iterator it = |
| 225 sync_processor_->changes().begin(); | 225 sync_processor_->changes().begin(); |
| 226 it != sync_processor_->changes().end(); | 226 it != sync_processor_->changes().end(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 // The uploaded items should not show up as settings. | 293 // The uploaded items should not show up as settings. |
| 294 const base::Value* value = NULL; | 294 const base::Value* value = NULL; |
| 295 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); | 295 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value)); |
| 296 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); | 296 EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value)); |
| 297 | 297 |
| 298 // Restarting sync should not create any new changes. | 298 // Restarting sync should not create any new changes. |
| 299 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); | 299 settings_service_.StopSyncing(syncer::SUPERVISED_USER_SETTINGS); |
| 300 StartSyncing(sync_data); | 300 StartSyncing(sync_data); |
| 301 ASSERT_EQ(0u, sync_processor_->changes().size()); | 301 ASSERT_EQ(0u, sync_processor_->changes().size()); |
| 302 } | 302 } |
| OLD | NEW |