Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: chrome/browser/sync/profile_sync_service_autofill_unittest.cc

Issue 10804039: Make SyncBackendRegistrar aware of loaded data (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <set> 5 #include <set>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 // Note: The tear down order is important. 391 // Note: The tear down order is important.
392 service_.reset(); 392 service_.reset();
393 web_data_service_->ShutdownSyncableService(); 393 web_data_service_->ShutdownSyncableService();
394 profile_->ResetRequestContext(); 394 profile_->ResetRequestContext();
395 // To prevent a leak, fully release TestURLRequestContext to ensure its 395 // To prevent a leak, fully release TestURLRequestContext to ensure its
396 // destruction on the IO message loop. 396 // destruction on the IO message loop.
397 profile_.reset(); 397 profile_.reset();
398 AbstractProfileSyncServiceTest::TearDown(); 398 AbstractProfileSyncServiceTest::TearDown();
399 } 399 }
400 400
401 void StartSyncService(const base::Closure& callback, 401 void StartSyncService(
402 bool will_fail_association, 402 const base::Callback<void(syncer::UserShare*)>& callback,
403 syncer::ModelType type) { 403 bool will_fail_association,
404 syncer::ModelType type) {
404 AbstractAutofillFactory* factory = GetFactory(type); 405 AbstractAutofillFactory* factory = GetFactory(type);
405 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get()); 406 SigninManager* signin = SigninManagerFactory::GetForProfile(profile_.get());
406 signin->SetAuthenticatedUsername("test_user"); 407 signin->SetAuthenticatedUsername("test_user");
407 ProfileSyncComponentsFactoryMock* components_factory = 408 ProfileSyncComponentsFactoryMock* components_factory =
408 new ProfileSyncComponentsFactoryMock(); 409 new ProfileSyncComponentsFactoryMock();
409 service_.reset( 410 service_.reset(
410 new TestProfileSyncService(components_factory, 411 new TestProfileSyncService(components_factory,
411 profile_.get(), 412 profile_.get(),
412 signin, 413 signin,
413 ProfileSyncService::AUTO_START, 414 ProfileSyncService::AUTO_START,
(...skipping 16 matching lines...) Expand all
430 WillRepeatedly(Return(true)); 431 WillRepeatedly(Return(true));
431 432
432 // We need tokens to get the tests going 433 // We need tokens to get the tests going
433 token_service_->IssueAuthTokenForTest(GaiaConstants::kSyncService, "token"); 434 token_service_->IssueAuthTokenForTest(GaiaConstants::kSyncService, "token");
434 435
435 service_->RegisterDataTypeController(data_type_controller); 436 service_->RegisterDataTypeController(data_type_controller);
436 service_->Initialize(); 437 service_->Initialize();
437 MessageLoop::current()->Run(); 438 MessageLoop::current()->Run();
438 } 439 }
439 440
440 bool AddAutofillSyncNode(const AutofillEntry& entry) { 441 bool AddAutofillSyncNode(
441 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); 442 const AutofillEntry& entry,
443 syncer::UserShare* user_share) {
444 syncer::WriteTransaction trans(FROM_HERE, user_share);
442 syncer::ReadNode autofill_root(&trans); 445 syncer::ReadNode autofill_root(&trans);
443 if (autofill_root.InitByTagLookup( 446 if (autofill_root.InitByTagLookup(
444 syncer::ModelTypeToRootTag(syncer::AUTOFILL)) != 447 syncer::ModelTypeToRootTag(syncer::AUTOFILL)) !=
445 BaseNode::INIT_OK) { 448 BaseNode::INIT_OK) {
446 return false; 449 return false;
447 } 450 }
448 451
449 syncer::WriteNode node(&trans); 452 syncer::WriteNode node(&trans);
450 std::string tag = AutocompleteSyncableService::KeyToTag( 453 std::string tag = AutocompleteSyncableService::KeyToTag(
451 UTF16ToUTF8(entry.key().name()), UTF16ToUTF8(entry.key().value())); 454 UTF16ToUTF8(entry.key().name()), UTF16ToUTF8(entry.key().value()));
452 syncer::WriteNode::InitUniqueByCreationResult result = 455 syncer::WriteNode::InitUniqueByCreationResult result =
453 node.InitUniqueByCreation(syncer::AUTOFILL, autofill_root, tag); 456 node.InitUniqueByCreation(syncer::AUTOFILL, autofill_root, tag);
454 if (result != syncer::WriteNode::INIT_SUCCESS) 457 if (result != syncer::WriteNode::INIT_SUCCESS)
455 return false; 458 return false;
456 459
457 sync_pb::EntitySpecifics specifics; 460 sync_pb::EntitySpecifics specifics;
458 AutocompleteSyncableService::WriteAutofillEntry(entry, &specifics); 461 AutocompleteSyncableService::WriteAutofillEntry(entry, &specifics);
459 sync_pb::AutofillSpecifics* autofill_specifics = 462 sync_pb::AutofillSpecifics* autofill_specifics =
460 specifics.mutable_autofill(); 463 specifics.mutable_autofill();
461 node.SetAutofillSpecifics(*autofill_specifics); 464 node.SetAutofillSpecifics(*autofill_specifics);
462 return true; 465 return true;
463 } 466 }
464 467
465 bool AddAutofillSyncNode(const AutofillProfile& profile) { 468 bool AddAutofillSyncNode(const AutofillProfile& profile,
466 syncer::WriteTransaction trans(FROM_HERE, service_->GetUserShare()); 469 syncer::UserShare* user_share) {
470 syncer::WriteTransaction trans(FROM_HERE, user_share);
467 syncer::ReadNode autofill_root(&trans); 471 syncer::ReadNode autofill_root(&trans);
468 if (autofill_root.InitByTagLookup(kAutofillProfileTag) != 472 if (autofill_root.InitByTagLookup(kAutofillProfileTag) !=
469 BaseNode::INIT_OK) { 473 BaseNode::INIT_OK) {
470 return false; 474 return false;
471 } 475 }
472 syncer::WriteNode node(&trans); 476 syncer::WriteNode node(&trans);
473 std::string tag = profile.guid(); 477 std::string tag = profile.guid();
474 syncer::WriteNode::InitUniqueByCreationResult result = 478 syncer::WriteNode::InitUniqueByCreationResult result =
475 node.InitUniqueByCreation(syncer::AUTOFILL_PROFILE, 479 node.InitUniqueByCreation(syncer::AUTOFILL_PROFILE,
476 autofill_root, tag); 480 autofill_root, tag);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
596 class AddAutofillHelper { 600 class AddAutofillHelper {
597 public: 601 public:
598 AddAutofillHelper(ProfileSyncServiceAutofillTest* test, 602 AddAutofillHelper(ProfileSyncServiceAutofillTest* test,
599 const std::vector<T>& entries) 603 const std::vector<T>& entries)
600 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_( 604 : ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
601 base::Bind(&AddAutofillHelper::AddAutofillCallback, 605 base::Bind(&AddAutofillHelper::AddAutofillCallback,
602 base::Unretained(this), test, entries))), 606 base::Unretained(this), test, entries))),
603 success_(false) { 607 success_(false) {
604 } 608 }
605 609
606 const base::Closure& callback() const { return callback_; } 610 const base::Callback<void(syncer::UserShare* user_share)>& callback() const {
607 bool success() { return success_; } 611 return callback_;
612 }
613
614 bool success() {
615 return success_;
616 }
608 617
609 private: 618 private:
610 void AddAutofillCallback(ProfileSyncServiceAutofillTest* test, 619 void AddAutofillCallback(ProfileSyncServiceAutofillTest* test,
611 const std::vector<T>& entries) { 620 const std::vector<T>& entries,
612 if (!test->CreateRoot(GetModelType<T>())) 621 syncer::UserShare* user_share) {
622 if (!test->CreateRoot(GetModelType<T>(), user_share))
613 return; 623 return;
614 624
615 for (size_t i = 0; i < entries.size(); ++i) { 625 for (size_t i = 0; i < entries.size(); ++i) {
616 if (!test->AddAutofillSyncNode(entries[i])) 626 if (!test->AddAutofillSyncNode(entries[i], user_share))
617 return; 627 return;
618 } 628 }
619 success_ = true; 629 success_ = true;
620 } 630 }
621 631
622 base::Closure callback_; 632 base::Callback<void(syncer::UserShare* user_share)> callback_;
623 bool success_; 633 bool success_;
624 }; 634 };
625 635
626 // Overload write transaction to use custom NotifyTransactionComplete 636 // Overload write transaction to use custom NotifyTransactionComplete
627 class WriteTransactionTest: public WriteTransaction { 637 class WriteTransactionTest: public WriteTransaction {
628 public: 638 public:
629 WriteTransactionTest(const tracked_objects::Location& from_here, 639 WriteTransactionTest(const tracked_objects::Location& from_here,
630 WriterTag writer, 640 WriterTag writer,
631 syncer::syncable::Directory* directory, 641 syncer::syncable::Directory* directory,
632 scoped_ptr<WaitableEvent>* wait_for_syncapi) 642 scoped_ptr<WaitableEvent>* wait_for_syncapi)
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 } 775 }
766 776
767 }; 777 };
768 778
769 // TODO(skrul): Test abort startup. 779 // TODO(skrul): Test abort startup.
770 // TODO(skrul): Test processing of cloud changes. 780 // TODO(skrul): Test processing of cloud changes.
771 // TODO(tim): Add autofill data type controller test, and a case to cover 781 // TODO(tim): Add autofill data type controller test, and a case to cover
772 // waiting for the PersonalDataManager. 782 // waiting for the PersonalDataManager.
773 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) { 783 TEST_F(ProfileSyncServiceAutofillTest, FailModelAssociation) {
774 // Don't create the root autofill node so startup fails. 784 // Don't create the root autofill node so startup fails.
775 StartSyncService(base::Closure(), true, syncer::AUTOFILL); 785 StartSyncService(TestProfileSyncService::NullCallback(), true,
786 syncer::AUTOFILL);
776 EXPECT_TRUE(service_->HasUnrecoverableError()); 787 EXPECT_TRUE(service_->HasUnrecoverableError());
777 } 788 }
778 789
779 TEST_F(ProfileSyncServiceAutofillTest, EmptyNativeEmptySync) { 790 TEST_F(ProfileSyncServiceAutofillTest, EmptyNativeEmptySync) {
780 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true)); 791 EXPECT_CALL(autofill_table_, GetAllAutofillEntries(_)).WillOnce(Return(true));
781 SetIdleChangeProcessorExpectations(); 792 SetIdleChangeProcessorExpectations();
782 CreateRootHelper create_root(this, syncer::AUTOFILL); 793 CreateRootHelper create_root(this, syncer::AUTOFILL);
783 EXPECT_CALL(*personal_data_manager_, Refresh()); 794 EXPECT_CALL(*personal_data_manager_, Refresh());
784 StartSyncService(create_root.callback(), false, syncer::AUTOFILL); 795 StartSyncService(create_root.callback(), false, syncer::AUTOFILL);
785 EXPECT_TRUE(create_root.success()); 796 EXPECT_TRUE(create_root.success());
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after
1227 scoped_ptr<WaitableEvent> wait_for_start(new WaitableEvent(true, false)); 1238 scoped_ptr<WaitableEvent> wait_for_start(new WaitableEvent(true, false));
1228 scoped_ptr<WaitableEvent> wait_for_syncapi(new WaitableEvent(true, false)); 1239 scoped_ptr<WaitableEvent> wait_for_syncapi(new WaitableEvent(true, false));
1229 scoped_refptr<FakeServerUpdater> updater(new FakeServerUpdater( 1240 scoped_refptr<FakeServerUpdater> updater(new FakeServerUpdater(
1230 service_.get(), &wait_for_start, &wait_for_syncapi)); 1241 service_.get(), &wait_for_start, &wait_for_syncapi));
1231 1242
1232 // This server side update will stall waiting for CommitWaiter. 1243 // This server side update will stall waiting for CommitWaiter.
1233 updater->CreateNewEntry(MakeAutofillEntry("server", "entry", 1)); 1244 updater->CreateNewEntry(MakeAutofillEntry("server", "entry", 1));
1234 wait_for_start->Wait(); 1245 wait_for_start->Wait();
1235 1246
1236 AutofillEntry syncapi_entry(MakeAutofillEntry("syncapi", "entry", 2)); 1247 AutofillEntry syncapi_entry(MakeAutofillEntry("syncapi", "entry", 2));
1237 ASSERT_TRUE(AddAutofillSyncNode(syncapi_entry)); 1248 ASSERT_TRUE(AddAutofillSyncNode(syncapi_entry, service_->GetUserShare()));
1238 DVLOG(1) << "Syncapi update finished."; 1249 DVLOG(1) << "Syncapi update finished.";
1239 1250
1240 // If we reach here, it means syncapi succeeded and we didn't deadlock. Yay! 1251 // If we reach here, it means syncapi succeeded and we didn't deadlock. Yay!
1241 // Signal FakeServerUpdater that it can complete. 1252 // Signal FakeServerUpdater that it can complete.
1242 wait_for_syncapi->Signal(); 1253 wait_for_syncapi->Signal();
1243 1254
1244 // Make another entry to ensure nothing broke afterwards and wait for finish 1255 // Make another entry to ensure nothing broke afterwards and wait for finish
1245 // to clean up. 1256 // to clean up.
1246 updater->CreateNewEntryAndWait(MakeAutofillEntry("server2", "entry2", 3)); 1257 updater->CreateNewEntryAndWait(MakeAutofillEntry("server2", "entry2", 3));
1247 1258
1248 std::vector<AutofillEntry> sync_entries; 1259 std::vector<AutofillEntry> sync_entries;
1249 std::vector<AutofillProfile> sync_profiles; 1260 std::vector<AutofillProfile> sync_profiles;
1250 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); 1261 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles));
1251 EXPECT_EQ(3U, sync_entries.size()); 1262 EXPECT_EQ(3U, sync_entries.size());
1252 EXPECT_EQ(0U, sync_profiles.size()); 1263 EXPECT_EQ(0U, sync_profiles.size());
1253 for (size_t i = 0; i < sync_entries.size(); i++) { 1264 for (size_t i = 0; i < sync_entries.size(); i++) {
1254 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() 1265 DVLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name()
1255 << ", " << sync_entries[i].key().value(); 1266 << ", " << sync_entries[i].key().value();
1256 } 1267 }
1257 } 1268 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698