| 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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 53 ACTION_P(CreateAndSaveChangeProcessor, change_processor) { | 53 ACTION_P(CreateAndSaveChangeProcessor, change_processor) { |
| 54 syncer::UserShare* user_share = arg0->GetUserShare(); | 54 syncer::UserShare* user_share = arg0->GetUserShare(); |
| 55 *change_processor = new GenericChangeProcessor(arg1, arg2, user_share); | 55 *change_processor = new GenericChangeProcessor(arg1, arg2, user_share); |
| 56 return *change_processor; | 56 return *change_processor; |
| 57 } | 57 } |
| 58 | 58 |
| 59 // TODO(zea): Refactor to remove the ProfileSyncService usage. | 59 // TODO(zea): Refactor to remove the ProfileSyncService usage. |
| 60 class ProfileSyncServicePreferenceTest | 60 class ProfileSyncServicePreferenceTest |
| 61 : public AbstractProfileSyncServiceTest { | 61 : public AbstractProfileSyncServiceTest { |
| 62 public: | 62 public: |
| 63 int64 SetSyncedValue(const std::string& name, const Value& value) { | 63 int64 SetSyncedValue(const std::string& name, const Value& value, |
| 64 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 64 syncer::UserShare* user_share) { |
| 65 syncer::WriteTransaction trans(FROM_HERE, user_share); |
| 65 syncer::ReadNode root(&trans); | 66 syncer::ReadNode root(&trans); |
| 66 if (root.InitByTagLookup(syncer::ModelTypeToRootTag( | 67 if (root.InitByTagLookup(syncer::ModelTypeToRootTag( |
| 67 syncer::PREFERENCES)) != syncer::BaseNode::INIT_OK) { | 68 syncer::PREFERENCES)) != syncer::BaseNode::INIT_OK) { |
| 68 return syncer::kInvalidId; | 69 return syncer::kInvalidId; |
| 69 } | 70 } |
| 70 | 71 |
| 71 syncer::WriteNode tag_node(&trans); | 72 syncer::WriteNode tag_node(&trans); |
| 72 syncer::WriteNode node(&trans); | 73 syncer::WriteNode node(&trans); |
| 73 | 74 |
| 74 if (tag_node.InitByClientTagLookup(syncer::PREFERENCES, name) == | 75 if (tag_node.InitByClientTagLookup(syncer::PREFERENCES, name) == |
| (...skipping 28 matching lines...) Expand all Loading... |
| 103 not_synced_preference_default_value_, | 104 not_synced_preference_default_value_, |
| 104 PrefService::UNSYNCABLE_PREF); | 105 PrefService::UNSYNCABLE_PREF); |
| 105 } | 106 } |
| 106 | 107 |
| 107 virtual void TearDown() { | 108 virtual void TearDown() { |
| 108 service_.reset(); | 109 service_.reset(); |
| 109 profile_.reset(); | 110 profile_.reset(); |
| 110 AbstractProfileSyncServiceTest::TearDown(); | 111 AbstractProfileSyncServiceTest::TearDown(); |
| 111 } | 112 } |
| 112 | 113 |
| 113 bool StartSyncService(const base::Closure& callback, | 114 bool StartSyncService( |
| 114 bool will_fail_association) { | 115 const base::Callback<void(syncer::UserShare*)>& callback, |
| 116 bool will_fail_association) { |
| 115 if (service_.get()) | 117 if (service_.get()) |
| 116 return false; | 118 return false; |
| 117 | 119 |
| 118 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get()); | 120 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get()); |
| 119 signin->SetAuthenticatedUsername("test"); | 121 signin->SetAuthenticatedUsername("test"); |
| 120 ProfileSyncComponentsFactoryMock* factory = | 122 ProfileSyncComponentsFactoryMock* factory = |
| 121 new ProfileSyncComponentsFactoryMock(); | 123 new ProfileSyncComponentsFactoryMock(); |
| 122 service_.reset(new TestProfileSyncService( | 124 service_.reset(new TestProfileSyncService( |
| 123 factory, | 125 factory, |
| 124 profile_.get(), | 126 profile_.get(), |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 public: | 219 public: |
| 218 AddPreferenceEntriesHelper(ProfileSyncServicePreferenceTest* test, | 220 AddPreferenceEntriesHelper(ProfileSyncServicePreferenceTest* test, |
| 219 const PreferenceValues& entries) | 221 const PreferenceValues& entries) |
| 220 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_( | 222 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_( |
| 221 base::Bind( | 223 base::Bind( |
| 222 &AddPreferenceEntriesHelper::AddPreferenceEntriesCallback, | 224 &AddPreferenceEntriesHelper::AddPreferenceEntriesCallback, |
| 223 base::Unretained(this), test, entries))), | 225 base::Unretained(this), test, entries))), |
| 224 success_(false) { | 226 success_(false) { |
| 225 } | 227 } |
| 226 | 228 |
| 227 const base::Closure& callback() const { return callback_; } | 229 const base::Callback<void(syncer::UserShare*)>& callback() const { |
| 228 bool success() { return success_; } | 230 return callback_; |
| 231 } |
| 232 |
| 233 bool success() { |
| 234 return success_; |
| 235 } |
| 229 | 236 |
| 230 private: | 237 private: |
| 231 void AddPreferenceEntriesCallback(ProfileSyncServicePreferenceTest* test, | 238 void AddPreferenceEntriesCallback(ProfileSyncServicePreferenceTest* test, |
| 232 const PreferenceValues& entries) { | 239 const PreferenceValues& entries, |
| 233 if (!test->CreateRoot(syncer::PREFERENCES)) | 240 syncer::UserShare* user_share) { |
| 241 if (!test->CreateRoot(syncer::PREFERENCES, user_share)) |
| 234 return; | 242 return; |
| 235 | 243 |
| 236 for (PreferenceValues::const_iterator i = entries.begin(); | 244 for (PreferenceValues::const_iterator i = entries.begin(); |
| 237 i != entries.end(); ++i) { | 245 i != entries.end(); ++i) { |
| 238 if (test->SetSyncedValue(i->first, *i->second) == syncer::kInvalidId) | 246 if (test->SetSyncedValue(i->first, *i->second, user_share) |
| 247 == syncer::kInvalidId) { |
| 239 return; | 248 return; |
| 249 } |
| 240 } | 250 } |
| 241 success_ = true; | 251 success_ = true; |
| 242 } | 252 } |
| 243 | 253 |
| 244 base::Closure callback_; | 254 base::Callback<void(syncer::UserShare*)> callback_; |
| 245 bool success_; | 255 bool success_; |
| 246 }; | 256 }; |
| 247 | 257 |
| 248 TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) { | 258 TEST_F(ProfileSyncServicePreferenceTest, CreatePrefSyncData) { |
| 249 prefs_->SetString(prefs::kHomePage, example_url0_); | 259 prefs_->SetString(prefs::kHomePage, example_url0_); |
| 250 CreateRootHelper create_root(this, syncer::PREFERENCES); | 260 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 251 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 261 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| 252 ASSERT_TRUE(create_root.success()); | 262 ASSERT_TRUE(create_root.success()); |
| 253 | 263 |
| 254 const PrefService::Preference* pref = | 264 const PrefService::Preference* pref = |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 ASSERT_TRUE(value.get()); | 353 ASSERT_TRUE(value.get()); |
| 344 EXPECT_TRUE(static_cast<const StringValue*>(value.get())-> | 354 EXPECT_TRUE(static_cast<const StringValue*>(value.get())-> |
| 345 GetAsString(&string_value)); | 355 GetAsString(&string_value)); |
| 346 EXPECT_EQ(non_default_charset_value_, string_value); | 356 EXPECT_EQ(non_default_charset_value_, string_value); |
| 347 EXPECT_EQ(non_default_charset_value_, | 357 EXPECT_EQ(non_default_charset_value_, |
| 348 prefs_->GetString(prefs::kDefaultCharset)); | 358 prefs_->GetString(prefs::kDefaultCharset)); |
| 349 STLDeleteValues(&cloud_data); | 359 STLDeleteValues(&cloud_data); |
| 350 } | 360 } |
| 351 | 361 |
| 352 TEST_F(ProfileSyncServicePreferenceTest, FailModelAssociation) { | 362 TEST_F(ProfileSyncServicePreferenceTest, FailModelAssociation) { |
| 353 ASSERT_TRUE(StartSyncService(base::Closure(), true)); | 363 ASSERT_TRUE(StartSyncService(TestProfileSyncService::NullCallback(), true)); |
| 354 EXPECT_TRUE(service_->HasUnrecoverableError()); | 364 EXPECT_TRUE(service_->HasUnrecoverableError()); |
| 355 } | 365 } |
| 356 | 366 |
| 357 TEST_F(ProfileSyncServicePreferenceTest, UpdatedPreferenceWithDefaultValue) { | 367 TEST_F(ProfileSyncServicePreferenceTest, UpdatedPreferenceWithDefaultValue) { |
| 358 const PrefService::Preference* pref = | 368 const PrefService::Preference* pref = |
| 359 prefs_->FindPreference(prefs::kHomePage); | 369 prefs_->FindPreference(prefs::kHomePage); |
| 360 EXPECT_TRUE(pref->IsDefaultValue()); | 370 EXPECT_TRUE(pref->IsDefaultValue()); |
| 361 | 371 |
| 362 CreateRootHelper create_root(this, syncer::PREFERENCES); | 372 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 363 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 373 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 385 EXPECT_TRUE(expected->Equals(actual.get())); | 395 EXPECT_TRUE(expected->Equals(actual.get())); |
| 386 } | 396 } |
| 387 | 397 |
| 388 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionUpdate) { | 398 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionUpdate) { |
| 389 profile_->GetPrefs()->SetString(prefs::kHomePage, example_url0_); | 399 profile_->GetPrefs()->SetString(prefs::kHomePage, example_url0_); |
| 390 CreateRootHelper create_root(this, syncer::PREFERENCES); | 400 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 391 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 401 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| 392 ASSERT_TRUE(create_root.success()); | 402 ASSERT_TRUE(create_root.success()); |
| 393 | 403 |
| 394 scoped_ptr<Value> expected(Value::CreateStringValue(example_url1_)); | 404 scoped_ptr<Value> expected(Value::CreateStringValue(example_url1_)); |
| 395 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected); | 405 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected, |
| 406 service_->GetUserShare()); |
| 396 ASSERT_NE(node_id, syncer::kInvalidId); | 407 ASSERT_NE(node_id, syncer::kInvalidId); |
| 397 { | 408 { |
| 398 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 409 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
| 399 change_processor_->ApplyChangesFromSyncModel( | 410 change_processor_->ApplyChangesFromSyncModel( |
| 400 &trans, | 411 &trans, |
| 401 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( | 412 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( |
| 402 node_id, ChangeRecord::ACTION_UPDATE)); | 413 node_id, ChangeRecord::ACTION_UPDATE)); |
| 403 } | 414 } |
| 404 change_processor_->CommitChangesFromSyncModel(); | 415 change_processor_->CommitChangesFromSyncModel(); |
| 405 | 416 |
| 406 const Value& actual = GetPreferenceValue(prefs::kHomePage); | 417 const Value& actual = GetPreferenceValue(prefs::kHomePage); |
| 407 EXPECT_TRUE(expected->Equals(&actual)); | 418 EXPECT_TRUE(expected->Equals(&actual)); |
| 408 } | 419 } |
| 409 | 420 |
| 410 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) { | 421 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeActionAdd) { |
| 411 CreateRootHelper create_root(this, syncer::PREFERENCES); | 422 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 412 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 423 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| 413 ASSERT_TRUE(create_root.success()); | 424 ASSERT_TRUE(create_root.success()); |
| 414 | 425 |
| 415 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); | 426 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); |
| 416 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected); | 427 int64 node_id = SetSyncedValue(prefs::kHomePage, *expected, |
| 428 service_->GetUserShare()); |
| 417 ASSERT_NE(node_id, syncer::kInvalidId); | 429 ASSERT_NE(node_id, syncer::kInvalidId); |
| 418 { | 430 { |
| 419 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 431 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
| 420 change_processor_->ApplyChangesFromSyncModel( | 432 change_processor_->ApplyChangesFromSyncModel( |
| 421 &trans, | 433 &trans, |
| 422 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( | 434 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( |
| 423 node_id, ChangeRecord::ACTION_ADD)); | 435 node_id, ChangeRecord::ACTION_ADD)); |
| 424 } | 436 } |
| 425 change_processor_->CommitChangesFromSyncModel(); | 437 change_processor_->CommitChangesFromSyncModel(); |
| 426 | 438 |
| 427 const Value& actual = GetPreferenceValue(prefs::kHomePage); | 439 const Value& actual = GetPreferenceValue(prefs::kHomePage); |
| 428 EXPECT_TRUE(expected->Equals(&actual)); | 440 EXPECT_TRUE(expected->Equals(&actual)); |
| 429 EXPECT_EQ(1U, | 441 EXPECT_EQ(1U, |
| 430 pref_sync_service_->registered_preferences().count(prefs::kHomePage)); | 442 pref_sync_service_->registered_preferences().count(prefs::kHomePage)); |
| 431 } | 443 } |
| 432 | 444 |
| 433 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) { | 445 TEST_F(ProfileSyncServicePreferenceTest, UpdatedSyncNodeUnknownPreference) { |
| 434 CreateRootHelper create_root(this, syncer::PREFERENCES); | 446 CreateRootHelper create_root(this, syncer::PREFERENCES); |
| 435 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); | 447 ASSERT_TRUE(StartSyncService(create_root.callback(), false)); |
| 436 ASSERT_TRUE(create_root.success()); | 448 ASSERT_TRUE(create_root.success()); |
| 437 | 449 |
| 438 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); | 450 scoped_ptr<Value> expected(Value::CreateStringValue(example_url0_)); |
| 439 int64 node_id = SetSyncedValue("unknown preference", *expected); | 451 int64 node_id = SetSyncedValue("unknown preference", *expected, |
| 452 service_->GetUserShare()); |
| 440 ASSERT_NE(node_id, syncer::kInvalidId); | 453 ASSERT_NE(node_id, syncer::kInvalidId); |
| 441 { | 454 { |
| 442 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 455 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
| 443 change_processor_->ApplyChangesFromSyncModel( | 456 change_processor_->ApplyChangesFromSyncModel( |
| 444 &trans, | 457 &trans, |
| 445 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( | 458 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( |
| 446 node_id, ChangeRecord::ACTION_UPDATE)); | 459 node_id, ChangeRecord::ACTION_UPDATE)); |
| 447 } | 460 } |
| 448 change_processor_->CommitChangesFromSyncModel(); | 461 change_processor_->CommitChangesFromSyncModel(); |
| 449 | 462 |
| (...skipping 14 matching lines...) Expand all Loading... |
| 464 // Changing the homepage preference should not sync anything. | 477 // Changing the homepage preference should not sync anything. |
| 465 scoped_ptr<Value> user_value( | 478 scoped_ptr<Value> user_value( |
| 466 Value::CreateStringValue("http://chromium..com")); | 479 Value::CreateStringValue("http://chromium..com")); |
| 467 prefs_->SetUserPref(prefs::kHomePage, user_value->DeepCopy()); | 480 prefs_->SetUserPref(prefs::kHomePage, user_value->DeepCopy()); |
| 468 EXPECT_EQ(NULL, GetSyncedValue(prefs::kHomePage)); | 481 EXPECT_EQ(NULL, GetSyncedValue(prefs::kHomePage)); |
| 469 | 482 |
| 470 // An incoming sync transaction should change the user value, not the managed | 483 // An incoming sync transaction should change the user value, not the managed |
| 471 // value. | 484 // value. |
| 472 scoped_ptr<Value> sync_value( | 485 scoped_ptr<Value> sync_value( |
| 473 Value::CreateStringValue("http://crbug.com")); | 486 Value::CreateStringValue("http://crbug.com")); |
| 474 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); | 487 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value, |
| 488 service_->GetUserShare()); |
| 475 ASSERT_NE(node_id, syncer::kInvalidId); | 489 ASSERT_NE(node_id, syncer::kInvalidId); |
| 476 { | 490 { |
| 477 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 491 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
| 478 change_processor_->ApplyChangesFromSyncModel( | 492 change_processor_->ApplyChangesFromSyncModel( |
| 479 &trans, | 493 &trans, |
| 480 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( | 494 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( |
| 481 node_id, ChangeRecord::ACTION_UPDATE)); | 495 node_id, ChangeRecord::ACTION_UPDATE)); |
| 482 } | 496 } |
| 483 change_processor_->CommitChangesFromSyncModel(); | 497 change_processor_->CommitChangesFromSyncModel(); |
| 484 | 498 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 | 541 |
| 528 // Switch kHomePage to managed and set a different value. | 542 // Switch kHomePage to managed and set a different value. |
| 529 scoped_ptr<Value> managed_value( | 543 scoped_ptr<Value> managed_value( |
| 530 Value::CreateStringValue("http://example.com/managed")); | 544 Value::CreateStringValue("http://example.com/managed")); |
| 531 profile_->GetTestingPrefService()->SetManagedPref( | 545 profile_->GetTestingPrefService()->SetManagedPref( |
| 532 prefs::kHomePage, managed_value->DeepCopy()); | 546 prefs::kHomePage, managed_value->DeepCopy()); |
| 533 | 547 |
| 534 // Change the sync value. | 548 // Change the sync value. |
| 535 scoped_ptr<Value> sync_value( | 549 scoped_ptr<Value> sync_value( |
| 536 Value::CreateStringValue("http://example.com/sync")); | 550 Value::CreateStringValue("http://example.com/sync")); |
| 537 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value); | 551 int64 node_id = SetSyncedValue(prefs::kHomePage, *sync_value, |
| 552 service_->GetUserShare()); |
| 538 ASSERT_NE(node_id, syncer::kInvalidId); | 553 ASSERT_NE(node_id, syncer::kInvalidId); |
| 539 { | 554 { |
| 540 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); | 555 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); |
| 541 change_processor_->ApplyChangesFromSyncModel( | 556 change_processor_->ApplyChangesFromSyncModel( |
| 542 &trans, | 557 &trans, |
| 543 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( | 558 ProfileSyncServiceTestHelper::MakeSingletonChangeRecordList( |
| 544 node_id, ChangeRecord::ACTION_ADD)); | 559 node_id, ChangeRecord::ACTION_ADD)); |
| 545 } | 560 } |
| 546 change_processor_->CommitChangesFromSyncModel(); | 561 change_processor_->CommitChangesFromSyncModel(); |
| 547 | 562 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 575 EXPECT_FALSE(pref->IsDefaultValue()); | 590 EXPECT_FALSE(pref->IsDefaultValue()); |
| 576 // There should be no synced value. | 591 // There should be no synced value. |
| 577 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); | 592 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); |
| 578 // Switch kHomePage back to unmanaged. | 593 // Switch kHomePage back to unmanaged. |
| 579 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); | 594 profile_->GetTestingPrefService()->RemoveManagedPref(prefs::kHomePage); |
| 580 // The original value should be picked up. | 595 // The original value should be picked up. |
| 581 EXPECT_TRUE(pref->IsDefaultValue()); | 596 EXPECT_TRUE(pref->IsDefaultValue()); |
| 582 // There should still be no synced value. | 597 // There should still be no synced value. |
| 583 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); | 598 EXPECT_TRUE(GetSyncedValue(prefs::kHomePage) == NULL); |
| 584 } | 599 } |
| OLD | NEW |