Index: chrome/browser/sync/profile_sync_service_autofill_unittest.cc |
diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc |
index 107a54b9687d972505f0021d30fa4d5e46fdcb0c..fbe5bd94699f3d4166ef7c29afc37b463e171cae 100644 |
--- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc |
+++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc |
@@ -20,9 +20,11 @@ |
#include "chrome/browser/sync/profile_sync_service.h" |
#include "chrome/browser/sync/profile_sync_test_util.h" |
#include "chrome/browser/sync/protocol/autofill_specifics.pb.h" |
+#include "chrome/browser/sync/syncable/directory_manager.h" |
#include "chrome/browser/webdata/autofill_entry.h" |
#include "chrome/browser/webdata/web_database.h" |
#include "chrome/common/notification_service.h" |
+#include "chrome/test/sync/engine/test_id_factory.h" |
#include "chrome/test/testing_profile.h" |
#include "testing/gmock/include/gmock/gmock.h" |
@@ -32,11 +34,30 @@ using browser_sync::AutofillChangeProcessor; |
using browser_sync::AutofillDataTypeController; |
using browser_sync::AutofillModelAssociator; |
using browser_sync::SyncBackendHost; |
+using browser_sync::TestIdFactory; |
using browser_sync::UnrecoverableErrorHandler; |
using sync_api::SyncManager; |
+using sync_api::UserShare; |
+using syncable::BASE_VERSION; |
+using syncable::CREATE; |
+using syncable::DirectoryManager; |
+using syncable::ID; |
+using syncable::IS_DEL; |
+using syncable::IS_DIR; |
+using syncable::IS_UNAPPLIED_UPDATE; |
+using syncable::IS_UNSYNCED; |
+using syncable::MutableEntry; |
+using syncable::SERVER_IS_DIR; |
+using syncable::SERVER_VERSION; |
+using syncable::SPECIFICS; |
+using syncable::ScopedDirLookup; |
+using syncable::UNIQUE_SERVER_TAG; |
+using syncable::UNITTEST; |
+using syncable::WriteTransaction; |
using testing::_; |
using testing::DoAll; |
using testing::DoDefault; |
+using testing::Invoke; |
using testing::Return; |
using testing::SetArgumentPointee; |
@@ -69,17 +90,6 @@ class TestingProfileSyncService : public ProfileSyncService { |
} |
}; |
-class TestAutofillModelAssociator |
- : public TestModelAssociator<AutofillModelAssociator> { |
- public: |
- TestAutofillModelAssociator(ProfileSyncService* service, |
- WebDatabase* web_database, |
- UnrecoverableErrorHandler* error_handler) |
- : TestModelAssociator<AutofillModelAssociator>( |
- service, web_database, error_handler) { |
- } |
-}; |
- |
class WebDatabaseMock : public WebDatabase { |
public: |
MOCK_METHOD2(RemoveFormElement, |
@@ -160,7 +170,7 @@ ACTION(QuitUIMessageLoop) { |
ACTION_P3(MakeAutofillSyncComponents, service, wd, dtc) { |
DCHECK(ChromeThread::CurrentlyOn(ChromeThread::DB)); |
AutofillModelAssociator* model_associator = |
- new TestAutofillModelAssociator(service, wd, dtc); |
+ new AutofillModelAssociator(service, wd, dtc); |
AutofillChangeProcessor* change_processor = |
new AutofillChangeProcessor(model_associator, wd, service); |
return ProfileSyncFactory::SyncComponents(model_associator, change_processor); |
@@ -211,7 +221,8 @@ class ProfileSyncServiceAutofillTest : public testing::Test { |
// State changes once for the backend init and once for startup done. |
EXPECT_CALL(observer_, OnStateChanged()). |
- WillOnce(DoDefault()). |
+ WillOnce(Invoke(this, |
+ &ProfileSyncServiceAutofillTest::CreateAutofillRoot)). |
WillOnce(QuitUIMessageLoop()); |
service_->RegisterDataTypeController(data_type_controller); |
service_->Initialize(); |
@@ -219,15 +230,37 @@ class ProfileSyncServiceAutofillTest : public testing::Test { |
} |
} |
- void GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries) { |
- sync_api::ReadTransaction trans(service_->backend()->GetUserShareHandle()); |
- int64 autofill_root_id = |
- GetFakeServerTaggedNode(&trans, "google_chrome_autofill"); |
- if (autofill_root_id == sync_api::kInvalidId) |
+ void CreateAutofillRoot() { |
+ UserShare* user_share = service_->backend()->GetUserShareHandle(); |
+ DirectoryManager* dir_manager = user_share->dir_manager.get(); |
+ |
+ ScopedDirLookup dir(dir_manager, user_share->authenticated_name); |
+ if (!dir.good()) |
return; |
+ WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__); |
+ MutableEntry node(&wtrans, |
+ CREATE, |
+ wtrans.root_id(), |
+ browser_sync::kAutofillTag); |
+ node.Put(UNIQUE_SERVER_TAG, browser_sync::kAutofillTag); |
+ node.Put(IS_DIR, true); |
+ node.Put(SERVER_IS_DIR, false); |
+ node.Put(IS_UNSYNCED, false); |
+ node.Put(IS_UNAPPLIED_UPDATE, false); |
+ node.Put(SERVER_VERSION, 20); |
+ node.Put(BASE_VERSION, 20); |
+ node.Put(IS_DEL, false); |
+ node.Put(ID, ids_.MakeServer(browser_sync::kAutofillTag)); |
+ sync_pb::EntitySpecifics specifics; |
+ specifics.MutableExtension(sync_pb::autofill); |
+ node.Put(SPECIFICS, specifics); |
+ } |
+ |
+ void GetAutofillEntriesFromSyncDB(std::vector<AutofillEntry>* entries) { |
+ sync_api::ReadTransaction trans(service_->backend()->GetUserShareHandle()); |
sync_api::ReadNode autofill_root(&trans); |
- if (!autofill_root.InitByIdLookup(autofill_root_id)) |
+ if (!autofill_root.InitByTagLookup(browser_sync::kAutofillTag)) |
return; |
int64 child_id = autofill_root.GetFirstChildId(); |
@@ -251,29 +284,6 @@ class ProfileSyncServiceAutofillTest : public testing::Test { |
} |
} |
- int64 GetFakeServerTaggedNode(sync_api::ReadTransaction* trans, |
- const std::string& tag) { |
- std::wstring tag_wide; |
- if (!UTF8ToWide(tag.c_str(), tag.length(), &tag_wide)) |
- return sync_api::kInvalidId; |
- |
- sync_api::ReadNode root(trans); |
- root.InitByRootLookup(); |
- |
- int64 last_child_id = sync_api::kInvalidId; |
- for (int64 id = root.GetFirstChildId(); id != sync_api::kInvalidId; /***/) { |
- sync_api::ReadNode child(trans); |
- child.InitByIdLookup(id); |
- last_child_id = id; |
- if (tag_wide == child.GetTitle()) { |
- return id; |
- } |
- id = child.GetSuccessorId(); |
- } |
- |
- return sync_api::kInvalidId; |
- } |
- |
void SetIdleChangeProcessorExpectations() { |
EXPECT_CALL(web_database_, RemoveFormElement(_, _)).Times(0); |
EXPECT_CALL(web_database_, GetAutofillTimestamps(_, _, _)).Times(0); |
@@ -289,7 +299,6 @@ class ProfileSyncServiceAutofillTest : public testing::Test { |
AutofillKey(ASCIIToUTF16(name), ASCIIToUTF16(value)), timestamps); |
} |
- |
MessageLoopForUI message_loop_; |
ChromeThread ui_thread_; |
ChromeThread db_thread_; |
@@ -302,6 +311,8 @@ class ProfileSyncServiceAutofillTest : public testing::Test { |
ProfileSyncServiceObserverMock observer_; |
WebDatabaseMock web_database_; |
scoped_refptr<WebDataService> web_data_service_; |
+ |
+ TestIdFactory ids_; |
}; |
// TODO(sync): Test unrecoverable error during MA. |