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

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

Issue 6375007: [Sync] Refactored ProfileSyncService and remove its backend() function (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Windows compile failure Created 9 years, 11 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 17 matching lines...) Expand all
28 #include "chrome/browser/sync/glue/autofill_model_associator.h" 28 #include "chrome/browser/sync/glue/autofill_model_associator.h"
29 #include "chrome/browser/sync/glue/autofill_profile_change_processor.h" 29 #include "chrome/browser/sync/glue/autofill_profile_change_processor.h"
30 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h" 30 #include "chrome/browser/sync/glue/autofill_profile_data_type_controller.h"
31 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h" 31 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h"
32 #include "chrome/browser/sync/glue/data_type_controller.h" 32 #include "chrome/browser/sync/glue/data_type_controller.h"
33 #include "chrome/browser/sync/profile_sync_factory.h" 33 #include "chrome/browser/sync/profile_sync_factory.h"
34 #include "chrome/browser/sync/profile_sync_service.h" 34 #include "chrome/browser/sync/profile_sync_service.h"
35 #include "chrome/browser/sync/profile_sync_test_util.h" 35 #include "chrome/browser/sync/profile_sync_test_util.h"
36 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h" 36 #include "chrome/browser/sync/protocol/autofill_specifics.pb.h"
37 #include "chrome/browser/sync/syncable/autofill_migration.h" 37 #include "chrome/browser/sync/syncable/autofill_migration.h"
38 #include "chrome/browser/sync/syncable/directory_manager.h"
38 #include "chrome/browser/sync/syncable/syncable.h" 39 #include "chrome/browser/sync/syncable/syncable.h"
39 #include "chrome/browser/sync/syncable/model_type.h" 40 #include "chrome/browser/sync/syncable/model_type.h"
40 #include "chrome/browser/sync/test_profile_sync_service.h" 41 #include "chrome/browser/sync/test_profile_sync_service.h"
41 #include "chrome/browser/webdata/autofill_change.h" 42 #include "chrome/browser/webdata/autofill_change.h"
42 #include "chrome/browser/webdata/autofill_entry.h" 43 #include "chrome/browser/webdata/autofill_entry.h"
43 #include "chrome/browser/webdata/web_database.h" 44 #include "chrome/browser/webdata/web_database.h"
44 #include "chrome/common/net/gaia/gaia_constants.h" 45 #include "chrome/common/net/gaia/gaia_constants.h"
45 #include "chrome/common/notification_source.h" 46 #include "chrome/common/notification_source.h"
46 #include "chrome/common/notification_type.h" 47 #include "chrome/common/notification_type.h"
47 #include "chrome/test/profile_mock.h" 48 #include "chrome/test/profile_mock.h"
48 #include "chrome/test/sync/engine/test_id_factory.h" 49 #include "chrome/test/sync/engine/test_id_factory.h"
49 #include "testing/gmock/include/gmock/gmock.h" 50 #include "testing/gmock/include/gmock/gmock.h"
50 51
51 using base::Time; 52 using base::Time;
52 using base::WaitableEvent; 53 using base::WaitableEvent;
53 using browser_sync::AutofillChangeProcessor; 54 using browser_sync::AutofillChangeProcessor;
54 using browser_sync::AutofillDataTypeController; 55 using browser_sync::AutofillDataTypeController;
55 using browser_sync::AutofillModelAssociator; 56 using browser_sync::AutofillModelAssociator;
56 using browser_sync::AutofillProfileChangeProcessor; 57 using browser_sync::AutofillProfileChangeProcessor;
57 using browser_sync::AutofillProfileDataTypeController; 58 using browser_sync::AutofillProfileDataTypeController;
58 using browser_sync::AutofillProfileModelAssociator; 59 using browser_sync::AutofillProfileModelAssociator;
59 using browser_sync::DataTypeController; 60 using browser_sync::DataTypeController;
60 using browser_sync::GROUP_DB; 61 using browser_sync::GROUP_DB;
61 using browser_sync::kAutofillTag; 62 using browser_sync::kAutofillTag;
62 using browser_sync::SyncBackendHostForProfileSyncTest; 63 using browser_sync::SyncBackendHostForProfileSyncTest;
63 using browser_sync::SyncerUtil; 64 using browser_sync::SyncerUtil;
64 using browser_sync::UnrecoverableErrorHandler; 65 using browser_sync::UnrecoverableErrorHandler;
65 using syncable::CREATE_NEW_UPDATE_ITEM; 66 using syncable::CREATE_NEW_UPDATE_ITEM;
66 using syncable::AUTOFILL; 67 using syncable::AUTOFILL;
68 using syncable::BASE_VERSION;
69 using syncable::CREATE;
67 using syncable::DirectoryChangeEvent; 70 using syncable::DirectoryChangeEvent;
68 using syncable::GET_BY_SERVER_TAG; 71 using syncable::GET_BY_SERVER_TAG;
69 using syncable::INVALID; 72 using syncable::INVALID;
73 using syncable::MutableEntry;
74 using syncable::OriginalEntries;
70 using syncable::SERVER_PARENT_ID; 75 using syncable::SERVER_PARENT_ID;
71 using syncable::SERVER_SPECIFICS; 76 using syncable::SERVER_SPECIFICS;
72 using syncable::OriginalEntries; 77 using syncable::SPECIFICS;
78 using syncable::UNITTEST;
73 using syncable::WriterTag; 79 using syncable::WriterTag;
74 using syncable::WriteTransaction; 80 using syncable::WriteTransaction;
75 using testing::_; 81 using testing::_;
76 using testing::DoAll; 82 using testing::DoAll;
77 using testing::DoDefault; 83 using testing::DoDefault;
78 using testing::ElementsAre; 84 using testing::ElementsAre;
79 using testing::Eq; 85 using testing::Eq;
80 using testing::Invoke; 86 using testing::Invoke;
81 using testing::Mock; 87 using testing::Mock;
82 using testing::Return; 88 using testing::Return;
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 EXPECT_CALL(profile_, GetTokenService()). 313 EXPECT_CALL(profile_, GetTokenService()).
308 WillRepeatedly(Return(&token_service_)); 314 WillRepeatedly(Return(&token_service_));
309 315
310 service_->set_num_expected_resumes(will_fail_association ? 0 : 1); 316 service_->set_num_expected_resumes(will_fail_association ? 0 : 1);
311 service_->RegisterDataTypeController(data_type_controller); 317 service_->RegisterDataTypeController(data_type_controller);
312 service_->Initialize(); 318 service_->Initialize();
313 MessageLoop::current()->Run(); 319 MessageLoop::current()->Run();
314 } 320 }
315 321
316 bool AddAutofillSyncNode(const AutofillEntry& entry) { 322 bool AddAutofillSyncNode(const AutofillEntry& entry) {
317 sync_api::WriteTransaction trans( 323 sync_api::WriteTransaction trans(service_->GetUserShareHandle());
318 service_->backend()->GetUserShareHandle());
319 sync_api::ReadNode autofill_root(&trans); 324 sync_api::ReadNode autofill_root(&trans);
320 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) 325 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag))
321 return false; 326 return false;
322 327
323 sync_api::WriteNode node(&trans); 328 sync_api::WriteNode node(&trans);
324 std::string tag = AutofillModelAssociator::KeyToTag(entry.key().name(), 329 std::string tag = AutofillModelAssociator::KeyToTag(entry.key().name(),
325 entry.key().value()); 330 entry.key().value());
326 if (!node.InitUniqueByCreation(syncable::AUTOFILL, autofill_root, tag)) 331 if (!node.InitUniqueByCreation(syncable::AUTOFILL, autofill_root, tag))
327 return false; 332 return false;
328 333
329 AutofillChangeProcessor::WriteAutofillEntry(entry, &node); 334 AutofillChangeProcessor::WriteAutofillEntry(entry, &node);
330 return true; 335 return true;
331 } 336 }
332 337
333 bool AddAutofillSyncNode(const AutoFillProfile& profile) { 338 bool AddAutofillSyncNode(const AutoFillProfile& profile) {
334 sync_api::WriteTransaction trans( 339 sync_api::WriteTransaction trans(service_->GetUserShareHandle());
335 service_->backend()->GetUserShareHandle());
336 sync_api::ReadNode autofill_root(&trans); 340 sync_api::ReadNode autofill_root(&trans);
337 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) 341 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag))
338 return false; 342 return false;
339 sync_api::WriteNode node(&trans); 343 sync_api::WriteNode node(&trans);
340 std::string tag = profile.guid(); 344 std::string tag = profile.guid();
341 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE, 345 if (!node.InitUniqueByCreation(syncable::AUTOFILL_PROFILE,
342 autofill_root, tag)) 346 autofill_root, tag))
343 return false; 347 return false;
344 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node); 348 AutofillProfileChangeProcessor::WriteAutofillProfile(profile, &node);
345 return true; 349 return true;
346 } 350 }
347 351
348 bool GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries, 352 bool GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries,
349 std::vector<AutoFillProfile>* profiles) { 353 std::vector<AutoFillProfile>* profiles) {
350 sync_api::ReadTransaction trans(service_->backend()->GetUserShareHandle()); 354 sync_api::ReadTransaction trans(service_->GetUserShareHandle());
351 sync_api::ReadNode autofill_root(&trans); 355 sync_api::ReadNode autofill_root(&trans);
352 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) 356 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag))
353 return false; 357 return false;
354 358
355 int64 child_id = autofill_root.GetFirstChildId(); 359 int64 child_id = autofill_root.GetFirstChildId();
356 while (child_id != sync_api::kInvalidId) { 360 while (child_id != sync_api::kInvalidId) {
357 sync_api::ReadNode child_node(&trans); 361 sync_api::ReadNode child_node(&trans);
358 if (!child_node.InitByIdLookup(child_id)) 362 if (!child_node.InitByIdLookup(child_id))
359 return false; 363 return false;
360 364
(...skipping 16 matching lines...) Expand all
377 autofill.profile()); 381 autofill.profile());
378 profiles->push_back(p); 382 profiles->push_back(p);
379 } 383 }
380 child_id = child_node.GetSuccessorId(); 384 child_id = child_node.GetSuccessorId();
381 } 385 }
382 return true; 386 return true;
383 } 387 }
384 388
385 bool GetAutofillProfilesFromSyncDBUnderProfileNode( 389 bool GetAutofillProfilesFromSyncDBUnderProfileNode(
386 std::vector<AutoFillProfile>* profiles) { 390 std::vector<AutoFillProfile>* profiles) {
387 sync_api::ReadTransaction trans(service_->backend()->GetUserShareHandle()); 391 sync_api::ReadTransaction trans(service_->GetUserShareHandle());
388 sync_api::ReadNode autofill_root(&trans); 392 sync_api::ReadNode autofill_root(&trans);
389 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag)) 393 if (!autofill_root.InitByTagLookup(browser_sync::kAutofillProfileTag))
390 return false; 394 return false;
391 395
392 int64 child_id = autofill_root.GetFirstChildId(); 396 int64 child_id = autofill_root.GetFirstChildId();
393 while (child_id != sync_api::kInvalidId) { 397 while (child_id != sync_api::kInvalidId) {
394 sync_api::ReadNode child_node(&trans); 398 sync_api::ReadNode child_node(&trans);
395 if (!child_node.InitByIdLookup(child_id)) 399 if (!child_node.InitByIdLookup(child_id))
396 return false; 400 return false;
397 401
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 private: 471 private:
468 ProfileSyncServiceAutofillTest* test_; 472 ProfileSyncServiceAutofillTest* test_;
469 const std::vector<T>& entries_; 473 const std::vector<T>& entries_;
470 bool success_; 474 bool success_;
471 }; 475 };
472 476
473 // Overload write transaction to use custom NotifyTransactionComplete 477 // Overload write transaction to use custom NotifyTransactionComplete
474 static const bool kLoggingInfo = true; 478 static const bool kLoggingInfo = true;
475 class WriteTransactionTest: public WriteTransaction { 479 class WriteTransactionTest: public WriteTransaction {
476 public: 480 public:
477 WriteTransactionTest(const ScopedDirLookup& directory, 481 WriteTransactionTest(const syncable::ScopedDirLookup& directory,
478 WriterTag writer, const char* source_file, 482 WriterTag writer, const char* source_file,
479 int line, 483 int line,
480 scoped_ptr<WaitableEvent> *wait_for_syncapi) 484 scoped_ptr<WaitableEvent> *wait_for_syncapi)
481 : WriteTransaction(directory, writer, source_file, line), 485 : WriteTransaction(directory, writer, source_file, line),
482 wait_for_syncapi_(wait_for_syncapi) { } 486 wait_for_syncapi_(wait_for_syncapi) { }
483 487
484 virtual void NotifyTransactionComplete() { 488 virtual void NotifyTransactionComplete() {
485 // This is where we differ. Force a thread change here, giving another 489 // This is where we differ. Force a thread change here, giving another
486 // thread a chance to create a WriteTransaction 490 // thread a chance to create a WriteTransaction
487 (*wait_for_syncapi_)->Wait(); 491 (*wait_for_syncapi_)->Wait();
(...skipping 15 matching lines...) Expand all
503 : entry_(ProfileSyncServiceAutofillTest::MakeAutofillEntry("0", "0", 0)), 507 : entry_(ProfileSyncServiceAutofillTest::MakeAutofillEntry("0", "0", 0)),
504 service_(service), 508 service_(service),
505 wait_for_start_(wait_for_start), 509 wait_for_start_(wait_for_start),
506 wait_for_syncapi_(wait_for_syncapi), 510 wait_for_syncapi_(wait_for_syncapi),
507 is_finished_(false, false) { } 511 is_finished_(false, false) { }
508 512
509 void Update() { 513 void Update() {
510 // This gets called in a modelsafeworker thread. 514 // This gets called in a modelsafeworker thread.
511 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 515 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::DB));
512 516
513 UserShare* user_share = service_->backend()->GetUserShareHandle(); 517 browser_sync::SyncBackendHost::UserShareHandle user_share =
tim (not reviewing) 2011/01/21 18:17:00 something about getting a pointer from the service
514 DirectoryManager* dir_manager = user_share->dir_manager.get(); 518 service_->GetUserShareHandle();
515 ScopedDirLookup dir(dir_manager, user_share->name); 519 syncable::DirectoryManager* dir_manager = user_share->dir_manager.get();
520 syncable::ScopedDirLookup dir(dir_manager, user_share->name);
516 ASSERT_TRUE(dir.good()); 521 ASSERT_TRUE(dir.good());
517 522
518 // Create autofill protobuf 523 // Create autofill protobuf
519 std::string tag = AutofillModelAssociator::KeyToTag(entry_.key().name(), 524 std::string tag = AutofillModelAssociator::KeyToTag(entry_.key().name(),
520 entry_.key().value()); 525 entry_.key().value());
521 sync_pb::AutofillSpecifics new_autofill; 526 sync_pb::AutofillSpecifics new_autofill;
522 new_autofill.set_name(UTF16ToUTF8(entry_.key().name())); 527 new_autofill.set_name(UTF16ToUTF8(entry_.key().name()));
523 new_autofill.set_value(UTF16ToUTF8(entry_.key().value())); 528 new_autofill.set_value(UTF16ToUTF8(entry_.key().value()));
524 const std::vector<base::Time>& ts(entry_.timestamps()); 529 const std::vector<base::Time>& ts(entry_.timestamps());
525 for (std::vector<base::Time>::const_iterator timestamp = ts.begin(); 530 for (std::vector<base::Time>::const_iterator timestamp = ts.begin();
(...skipping 30 matching lines...) Expand all
556 } 561 }
557 VLOG(1) << "FakeServerUpdater finishing."; 562 VLOG(1) << "FakeServerUpdater finishing.";
558 is_finished_.Signal(); 563 is_finished_.Signal();
559 } 564 }
560 565
561 void CreateNewEntry(const AutofillEntry& entry) { 566 void CreateNewEntry(const AutofillEntry& entry) {
562 entry_ = entry; 567 entry_ = entry;
563 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this, 568 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this,
564 &FakeServerUpdater::Update)); 569 &FakeServerUpdater::Update));
565 std::vector<browser_sync::ModelSafeWorker*> workers; 570 std::vector<browser_sync::ModelSafeWorker*> workers;
566 service_->backend()->GetWorkers(&workers); 571 service_->GetTestBackend()->GetWorkers(&workers);
tim (not reviewing) 2011/01/21 18:17:00 why GetTestBackend()? I would have just expected G
akalin 2011/01/21 21:21:09 The alternative was to override GetBackendForTest(
567 572
568 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 573 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB));
569 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 574 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
570 NewRunnableMethod(this, &FakeServerUpdater::Update))) { 575 NewRunnableMethod(this, &FakeServerUpdater::Update))) {
571 NOTREACHED() << "Failed to post task to the db thread."; 576 NOTREACHED() << "Failed to post task to the db thread.";
572 return; 577 return;
573 } 578 }
574 } 579 }
575 580
576 void CreateNewEntryAndWait(const AutofillEntry& entry) { 581 void CreateNewEntryAndWait(const AutofillEntry& entry) {
577 entry_ = entry; 582 entry_ = entry;
578 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this, 583 scoped_ptr<Callback0::Type> c(NewCallback((FakeServerUpdater *)this,
579 &FakeServerUpdater::Update)); 584 &FakeServerUpdater::Update));
580 std::vector<browser_sync::ModelSafeWorker*> workers; 585 std::vector<browser_sync::ModelSafeWorker*> workers;
581 service_->backend()->GetWorkers(&workers); 586 service_->GetTestBackend()->GetWorkers(&workers);
582 587
583 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB)); 588 ASSERT_FALSE(BrowserThread::CurrentlyOn(BrowserThread::DB));
584 is_finished_.Reset(); 589 is_finished_.Reset();
585 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE, 590 if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
586 NewRunnableMethod(this, &FakeServerUpdater::Update))) { 591 NewRunnableMethod(this, &FakeServerUpdater::Update))) {
587 NOTREACHED() << "Failed to post task to the db thread."; 592 NOTREACHED() << "Failed to post task to the db thread.";
588 return; 593 return;
589 } 594 }
590 is_finished_.Wait(); 595 is_finished_.Wait();
591 } 596 }
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 std::vector<AutofillEntry> sync_entries; 1072 std::vector<AutofillEntry> sync_entries;
1068 std::vector<AutoFillProfile> sync_profiles; 1073 std::vector<AutoFillProfile> sync_profiles;
1069 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles)); 1074 ASSERT_TRUE(GetAutofillEntriesFromSyncDB(&sync_entries, &sync_profiles));
1070 EXPECT_EQ(3U, sync_entries.size()); 1075 EXPECT_EQ(3U, sync_entries.size());
1071 EXPECT_EQ(0U, sync_profiles.size()); 1076 EXPECT_EQ(0U, sync_profiles.size());
1072 for (size_t i = 0; i < sync_entries.size(); i++) { 1077 for (size_t i = 0; i < sync_entries.size(); i++) {
1073 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name() 1078 VLOG(1) << "Entry " << i << ": " << sync_entries[i].key().name()
1074 << ", " << sync_entries[i].key().value(); 1079 << ", " << sync_entries[i].key().value();
1075 } 1080 }
1076 } 1081 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698