| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <map> | 5 #include <map> |
| 6 #include <string> | 6 #include <string> |
| 7 | 7 |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 42 #include "testing/gtest/include/gtest/gtest.h" | 42 #include "testing/gtest/include/gtest/gtest.h" |
| 43 | 43 |
| 44 using base::JSONReader; | 44 using base::JSONReader; |
| 45 using browser_sync::GenericChangeProcessor; | 45 using browser_sync::GenericChangeProcessor; |
| 46 using browser_sync::SharedChangeProcessor; | 46 using browser_sync::SharedChangeProcessor; |
| 47 using browser_sync::UIDataTypeController; | 47 using browser_sync::UIDataTypeController; |
| 48 using syncer::ChangeRecord; | 48 using syncer::ChangeRecord; |
| 49 using testing::_; | 49 using testing::_; |
| 50 using testing::Invoke; | 50 using testing::Invoke; |
| 51 using testing::Return; | 51 using testing::Return; |
| 52 using testing::Values; |
| 52 | 53 |
| 53 typedef std::map<const std::string, const Value*> PreferenceValues; | 54 typedef std::map<const std::string, const Value*> PreferenceValues; |
| 54 | 55 |
| 55 ACTION_P(CreateAndSaveChangeProcessor, change_processor) { | 56 ACTION_P(CreateAndSaveChangeProcessor, change_processor) { |
| 56 syncer::UserShare* user_share = arg0->GetUserShare(); | 57 syncer::UserShare* user_share = arg0->GetUserShare(); |
| 57 *change_processor = new GenericChangeProcessor(arg1, | 58 *change_processor = new GenericChangeProcessor(arg1, |
| 58 arg2, | 59 arg2, |
| 59 arg3, | 60 arg3, |
| 60 user_share); | 61 user_share); |
| 61 return *change_processor; | 62 return *change_processor; |
| 62 } | 63 } |
| 63 | 64 |
| 64 ACTION_P(ReturnNewDataTypeManagerWithDebugListener, debug_listener) { | 65 ACTION_P(ReturnNewDataTypeManagerWithDebugListener, debug_listener) { |
| 65 return new browser_sync::DataTypeManagerImpl( | 66 return new browser_sync::DataTypeManagerImpl( |
| 66 debug_listener, | 67 debug_listener, |
| 67 arg1, | 68 arg1, |
| 68 arg2, | 69 arg2, |
| 69 arg3, | 70 arg3, |
| 70 arg4); | 71 arg4); |
| 71 } | 72 } |
| 72 | 73 |
| 73 // TODO(zea): Refactor to remove the ProfileSyncService usage. | 74 // TODO(zea): Refactor to remove the ProfileSyncService usage. |
| 74 class ProfileSyncServicePreferenceTest | 75 class ProfileSyncServicePreferenceTest |
| 75 : public AbstractProfileSyncServiceTest, | 76 : public BaseProfileSyncServiceTest, |
| 76 public syncer::DataTypeDebugInfoListener { | 77 public syncer::DataTypeDebugInfoListener, |
| 78 public ::testing::TestWithParam<syncer::ModelType> { |
| 77 public: | 79 public: |
| 80 |
| 78 int64 SetSyncedValue(const std::string& name, const Value& value) { | 81 int64 SetSyncedValue(const std::string& name, const Value& value) { |
| 79 syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare()); | 82 syncer::WriteTransaction trans(FROM_HERE, sync_service_->GetUserShare()); |
| 80 syncer::ReadNode root(&trans); | 83 syncer::ReadNode root(&trans); |
| 81 if (root.InitByTagLookup(syncer::ModelTypeToRootTag( | 84 if (root.InitByTagLookup(syncer::ModelTypeToRootTag( |
| 82 syncer::PREFERENCES)) != syncer::BaseNode::INIT_OK) { | 85 syncer::PREFERENCES)) != syncer::BaseNode::INIT_OK) { |
| 83 return syncer::kInvalidId; | 86 return syncer::kInvalidId; |
| 84 } | 87 } |
| 85 | 88 |
| 86 syncer::WriteNode tag_node(&trans); | 89 syncer::WriteNode tag_node(&trans); |
| 87 syncer::WriteNode node(&trans); | 90 syncer::WriteNode node(&trans); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 103 virtual void OnDataTypeAssociationComplete( | 106 virtual void OnDataTypeAssociationComplete( |
| 104 const syncer::DataTypeAssociationStats& association_stats) OVERRIDE { | 107 const syncer::DataTypeAssociationStats& association_stats) OVERRIDE { |
| 105 association_stats_ = association_stats; | 108 association_stats_ = association_stats; |
| 106 } | 109 } |
| 107 virtual void OnConfigureComplete() OVERRIDE { | 110 virtual void OnConfigureComplete() OVERRIDE { |
| 108 // Do nothing. | 111 // Do nothing. |
| 109 } | 112 } |
| 110 | 113 |
| 111 protected: | 114 protected: |
| 112 ProfileSyncServicePreferenceTest() | 115 ProfileSyncServicePreferenceTest() |
| 113 : debug_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), | 116 : BaseProfileSyncServiceTest(), |
| 117 debug_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| 114 example_url0_("http://example.com/0"), | 118 example_url0_("http://example.com/0"), |
| 115 example_url1_("http://example.com/1"), | 119 example_url1_("http://example.com/1"), |
| 116 example_url2_("http://example.com/2"), | 120 example_url2_("http://example.com/2"), |
| 117 not_synced_preference_name_("nonsense_pref_name"), | 121 not_synced_preference_name_("nonsense_pref_name"), |
| 118 not_synced_preference_default_value_("default"), | 122 not_synced_preference_default_value_("default"), |
| 119 non_default_charset_value_("foo") {} | 123 non_default_charset_value_("foo") {} |
| 120 | 124 |
| 121 virtual void SetUp() { | 125 virtual void SetUp() { |
| 122 AbstractProfileSyncServiceTest::SetUp(); | 126 type_ = GetParam(); |
| 127 BaseProfileSyncServiceTest::SetUp(); |
| 123 profile_.reset(new TestingProfile()); | 128 profile_.reset(new TestingProfile()); |
| 124 profile_->CreateRequestContext(); | 129 profile_->CreateRequestContext(); |
| 125 prefs_ = profile_->GetTestingPrefService(); | 130 prefs_ = profile_->GetTestingPrefService(); |
| 126 | 131 |
| 127 prefs_->registry()->RegisterStringPref( | 132 prefs_->registry()->RegisterStringPref( |
| 128 not_synced_preference_name_.c_str(), | 133 not_synced_preference_name_.c_str(), |
| 129 not_synced_preference_default_value_, | 134 not_synced_preference_default_value_, |
| 130 PrefRegistrySyncable::UNSYNCABLE_PREF); | 135 PrefRegistrySyncable::UNSYNCABLE_PREF); |
| 131 } | 136 } |
| 132 | 137 |
| 133 virtual void TearDown() { | 138 virtual void TearDown() { |
| 134 profile_.reset(); | 139 profile_.reset(); |
| 135 AbstractProfileSyncServiceTest::TearDown(); | 140 BaseProfileSyncServiceTest::TearDown(); |
| 136 } | 141 } |
| 137 | 142 |
| 138 int GetSyncPreferenceCount() { | 143 int GetSyncPreferenceCount() { |
| 139 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare()); | 144 syncer::ReadTransaction trans(FROM_HERE, sync_service_->GetUserShare()); |
| 140 syncer::ReadNode node(&trans); | 145 syncer::ReadNode node(&trans); |
| 141 if (node.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::PREFERENCES)) != | 146 if (node.InitByTagLookup(syncer::ModelTypeToRootTag(syncer::PREFERENCES)) != |
| 142 syncer::BaseNode::INIT_OK) | 147 syncer::BaseNode::INIT_OK) |
| 143 return 0; | 148 return 0; |
| 144 return node.GetTotalNodeCount() - 1; | 149 return node.GetTotalNodeCount() - 1; |
| 145 } | 150 } |
| 146 | 151 |
| 147 bool StartSyncService(const base::Closure& callback, | 152 bool StartSyncService(const base::Closure& callback, |
| 148 bool will_fail_association) { | 153 bool will_fail_association) { |
| 149 if (sync_service_) | 154 if (sync_service_) |
| 150 return false; | 155 return false; |
| 151 | 156 |
| 152 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get()); | 157 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get()); |
| 153 signin->SetAuthenticatedUsername("test"); | 158 signin->SetAuthenticatedUsername("test"); |
| 154 sync_service_ = static_cast<TestProfileSyncService*>( | 159 sync_service_ = static_cast<TestProfileSyncService*>( |
| 155 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( | 160 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
| 156 profile_.get(), &TestProfileSyncService::BuildAutoStartAsyncInit)); | 161 profile_.get(), &TestProfileSyncService::BuildAutoStartAsyncInit)); |
| 157 sync_service_->set_backend_init_callback(callback); | 162 sync_service_->set_backend_init_callback(callback); |
| 158 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( | 163 pref_sync_service_ = reinterpret_cast<PrefModelAssociator*>( |
| 159 prefs_->GetSyncableService()); | 164 prefs_->GetSyncableService(type_)); |
| 160 if (!pref_sync_service_) | 165 if (!pref_sync_service_) |
| 161 return false; | 166 return false; |
| 162 ProfileSyncComponentsFactoryMock* components = | 167 ProfileSyncComponentsFactoryMock* components = |
| 163 sync_service_->components_factory_mock(); | 168 sync_service_->components_factory_mock(); |
| 164 EXPECT_CALL(*components, GetSyncableServiceForType(syncer::PREFERENCES)). | 169 EXPECT_CALL(*components, GetSyncableServiceForType(syncer::PREFERENCES)). |
| 165 WillOnce(Return(pref_sync_service_->AsWeakPtr())); | 170 WillOnce(Return(pref_sync_service_->AsWeakPtr())); |
| 166 | 171 |
| 167 EXPECT_CALL(*components, CreateDataTypeManager(_, _, _, _, _)). | 172 EXPECT_CALL(*components, CreateDataTypeManager(_, _, _, _, _)). |
| 168 WillOnce(ReturnNewDataTypeManagerWithDebugListener( | 173 WillOnce(ReturnNewDataTypeManagerWithDebugListener( |
| 169 syncer::MakeWeakHandle(debug_ptr_factory_.GetWeakPtr()))); | 174 syncer::MakeWeakHandle(debug_ptr_factory_.GetWeakPtr()))); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 216 const sync_pb::PreferenceSpecifics& specifics( | 221 const sync_pb::PreferenceSpecifics& specifics( |
| 217 node.GetEntitySpecifics().preference()); | 222 node.GetEntitySpecifics().preference()); |
| 218 | 223 |
| 219 return base::JSONReader::Read(specifics.value()); | 224 return base::JSONReader::Read(specifics.value()); |
| 220 } | 225 } |
| 221 | 226 |
| 222 int64 WriteSyncedValue(const std::string& name, | 227 int64 WriteSyncedValue(const std::string& name, |
| 223 const Value& value, | 228 const Value& value, |
| 224 syncer::WriteNode* node) { | 229 syncer::WriteNode* node) { |
| 225 syncer::SyncData sync_data; | 230 syncer::SyncData sync_data; |
| 226 if (!PrefModelAssociator::CreatePrefSyncData(name, | 231 if (!pref_sync_service_->CreatePrefSyncData(name, |
| 227 value, | 232 value, |
| 228 &sync_data)) { | 233 &sync_data)) { |
| 229 return syncer::kInvalidId; | 234 return syncer::kInvalidId; |
| 230 } | 235 } |
| 231 node->SetEntitySpecifics(sync_data.GetSpecifics()); | 236 node->SetEntitySpecifics(sync_data.GetSpecifics()); |
| 232 return node->GetId(); | 237 return node->GetId(); |
| 233 } | 238 } |
| 234 | 239 |
| 235 bool IsSynced(const std::string& pref_name) { | 240 bool IsSynced(const std::string& pref_name) { |
| 236 return pref_sync_service_->registered_preferences().count(pref_name) > 0; | 241 return pref_sync_service_->registered_preferences().count(pref_name) > 0; |
| 237 } | 242 } |
| 238 | 243 |
| 239 std::string ValueString(const Value& value) { | 244 std::string ValueString(const Value& value) { |
| 240 std::string serialized; | 245 std::string serialized; |
| 241 JSONStringValueSerializer json(&serialized); | 246 JSONStringValueSerializer json(&serialized); |
| 242 json.Serialize(value); | 247 json.Serialize(value); |
| 243 return serialized; | 248 return serialized; |
| 244 } | 249 } |
| 245 | 250 |
| 251 syncer::ModelType type_; |
| 246 scoped_ptr<TestingProfile> profile_; | 252 scoped_ptr<TestingProfile> profile_; |
| 247 TestingPrefServiceSyncable* prefs_; | 253 TestingPrefServiceSyncable* prefs_; |
| 248 | 254 |
| 249 UIDataTypeController* dtc_; | 255 UIDataTypeController* dtc_; |
| 250 PrefModelAssociator* pref_sync_service_; | 256 PrefModelAssociator* pref_sync_service_; |
| 251 GenericChangeProcessor* change_processor_; | 257 GenericChangeProcessor* change_processor_; |
| 252 syncer::DataTypeAssociationStats association_stats_; | 258 syncer::DataTypeAssociationStats association_stats_; |
| 253 base::WeakPtrFactory<DataTypeDebugInfoListener> debug_ptr_factory_; | 259 base::WeakPtrFactory<DataTypeDebugInfoListener> debug_ptr_factory_; |
| 254 | 260 |
| 255 std::string example_url0_; | 261 std::string example_url0_; |
| 256 std::string example_url1_; | 262 std::string example_url1_; |
| 257 std::string example_url2_; | 263 std::string example_url2_; |
| 258 std::string not_synced_preference_name_; | 264 std::string not_synced_preference_name_; |
| 259 std::string not_synced_preference_default_value_; | 265 std::string not_synced_preference_default_value_; |
| 260 std::string non_default_charset_value_; | 266 std::string non_default_charset_value_; |
| 261 }; | 267 }; |
| 262 | 268 |
| 269 INSTANTIATE_TEST_CASE_P(MeaningfulTestParameters, |
| 270 ProfileSyncServicePreferenceTest, |
| 271 Values(syncer::PREFERENCES, |
| 272 syncer::PRIORITY_PREFERENCES)); |
| 273 |
| 263 class AddPreferenceEntriesHelper { | 274 class AddPreferenceEntriesHelper { |
| 264 public: | 275 public: |
| 265 AddPreferenceEntriesHelper(ProfileSyncServicePreferenceTest* test, | 276 AddPreferenceEntriesHelper(ProfileSyncServicePreferenceTest* test, |
| 266 const PreferenceValues& entries) | 277 const PreferenceValues& entries) |
| 267 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_( | 278 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_( |
| 268 base::Bind( | 279 base::Bind( |
| 269 &AddPreferenceEntriesHelper::AddPreferenceEntriesCallback, | 280 &AddPreferenceEntriesHelper::AddPreferenceEntriesCallback, |
| 270 base::Unretained(this), test, entries))), | 281 base::Unretained(this), test, entries))), |
| 271 success_(false) { | 282 success_(false) { |
| 272 } | 283 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 294 | 305 |
| 295 TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) { | 306 TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) { |
| 296 prefs_->SetString(prefs::kHomePage, example_url0_); | 307 prefs_->SetString(prefs::kHomePage, example_url0_); |
| 297 CreateRootHelper create_root(this, syncer::PREFERENCES); | 308 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 298 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 309 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| 299 ASSERT_TRUE(create_root.success()); | 310 ASSERT_TRUE(create_root.success()); |
| 300 | 311 |
| 301 const PrefService::Preference* pref = | 312 const PrefService::Preference* pref = |
| 302 prefs_->FindPreference(prefs::kHomePage); | 313 prefs_->FindPreference(prefs::kHomePage); |
| 303 syncer::SyncData sync_data; | 314 syncer::SyncData sync_data; |
| 304 EXPECT_TRUE(PrefModelAssociator::CreatePrefSyncData(pref->name(), | 315 EXPECT_TRUE(pref_sync_service_->CreatePrefSyncData(pref->name(), |
| 305 *pref->GetValue(), &sync_data)); | 316 *pref->GetValue(), &sync_data)); |
| 306 EXPECT_EQ(std::string(prefs::kHomePage), sync_data.GetTag()); | 317 EXPECT_EQ(std::string(prefs::kHomePage), sync_data.GetTag()); |
| 307 const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics(). | 318 const sync_pb::PreferenceSpecifics& specifics(sync_data.GetSpecifics(). |
| 308 preference()); | 319 preference()); |
| 309 EXPECT_EQ(std::string(prefs::kHomePage), specifics.name()); | 320 EXPECT_EQ(std::string(prefs::kHomePage), specifics.name()); |
| 310 | 321 |
| 311 scoped_ptr<Value> value(base::JSONReader::Read(specifics.value())); | 322 scoped_ptr<Value> value(base::JSONReader::Read(specifics.value())); |
| 312 EXPECT_TRUE(pref->GetValue()->Equals(value.get())); | 323 EXPECT_TRUE(pref->GetValue()->Equals(value.get())); |
| 313 } | 324 } |
| 314 | 325 |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 EXPECT_FALSE(pref->IsDefaultValue()); | 686 EXPECT_FALSE(pref->IsDefaultValue()); |
| 676 // There should be no synced value. | 687 // There should be no synced value. |
| 677 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); | 688 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); |
| 678 // Switch kHomePage back to unmanaged. | 689 // Switch kHomePage back to unmanaged. |
| 679 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 690 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); |
| 680 // The original value should be picked up. | 691 // The original value should be picked up. |
| 681 EXPECT_TRUE(pref->IsDefaultValue()); | 692 EXPECT_TRUE(pref->IsDefaultValue()); |
| 682 // There should still be no synced value. | 693 // There should still be no synced value. |
| 683 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); | 694 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); |
| 684 } | 695 } |
| OLD | NEW |