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 |