diff options
-rw-r--r-- | chrome/browser/sync/glue/bookmark_change_processor.cc | 4 | ||||
-rw-r--r-- | chrome/browser/sync/profile_sync_service_autofill_unittest.cc | 3 | ||||
-rw-r--r-- | chrome/browser/sync/profile_sync_service_bookmark_unittest.cc | 7 | ||||
-rw-r--r-- | sync/engine/apply_updates_and_resolve_conflicts_command_unittest.cc | 29 | ||||
-rw-r--r-- | sync/engine/process_commit_response_command_unittest.cc | 183 | ||||
-rw-r--r-- | sync/engine/syncer_unittest.cc | 173 | ||||
-rw-r--r-- | sync/internal_api/public/test/test_entry_factory.h | 27 | ||||
-rw-r--r-- | sync/internal_api/public/write_node.h | 14 | ||||
-rw-r--r-- | sync/internal_api/sync_encryption_handler_impl_unittest.cc | 1 | ||||
-rw-r--r-- | sync/internal_api/sync_manager_impl_unittest.cc | 93 | ||||
-rw-r--r-- | sync/internal_api/test/test_entry_factory.cc | 66 | ||||
-rw-r--r-- | sync/internal_api/write_node.cc | 34 | ||||
-rw-r--r-- | sync/syncable/mutable_entry.cc | 35 | ||||
-rw-r--r-- | sync/syncable/mutable_entry.h | 9 | ||||
-rw-r--r-- | sync/syncable/syncable_unittest.cc | 129 | ||||
-rw-r--r-- | sync/test/engine/test_syncable_utils.cc | 1 |
16 files changed, 400 insertions, 408 deletions
diff --git a/chrome/browser/sync/glue/bookmark_change_processor.cc b/chrome/browser/sync/glue/bookmark_change_processor.cc index b55d279..344f5a9 100644 --- a/chrome/browser/sync/glue/bookmark_change_processor.cc +++ b/chrome/browser/sync/glue/bookmark_change_processor.cc @@ -404,7 +404,7 @@ bool BookmarkChangeProcessor::PlaceSyncNode(MoveOrCreate operation, if (index == 0) { // Insert into first position. success = (operation == CREATE) ? - dst->InitByCreation(syncer::BOOKMARKS, sync_parent, NULL) : + dst->InitBookmarkByCreation(sync_parent, NULL) : dst->SetPosition(sync_parent, NULL); if (success) { DCHECK_EQ(dst->GetParentId(), sync_parent.GetId()); @@ -420,7 +420,7 @@ bool BookmarkChangeProcessor::PlaceSyncNode(MoveOrCreate operation, return false; } success = (operation == CREATE) ? - dst->InitByCreation(syncer::BOOKMARKS, sync_parent, &sync_prev) : + dst->InitBookmarkByCreation(sync_parent, &sync_prev) : dst->SetPosition(sync_parent, &sync_prev); if (success) { DCHECK_EQ(dst->GetParentId(), sync_parent.GetId()); diff --git a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc index c952eab..2e8ac94 100644 --- a/chrome/browser/sync/profile_sync_service_autofill_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_autofill_unittest.cc @@ -741,7 +741,8 @@ class FakeServerUpdater : public base::RefCountedThreadSafe<FakeServerUpdater> { // Simulates effects of UpdateLocalDataFromServerData MutableEntry parent(&trans, GET_BY_SERVER_TAG, syncer::ModelTypeToRootTag(syncer::AUTOFILL)); - MutableEntry item(&trans, CREATE, parent.Get(syncer::syncable::ID), tag); + MutableEntry item(&trans, CREATE, syncer::AUTOFILL, + parent.Get(syncer::syncable::ID), tag); ASSERT_TRUE(item.good()); item.Put(SPECIFICS, entity_specifics); item.Put(SERVER_SPECIFICS, entity_specifics); diff --git a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc index 618b4ee..2b72b22 100644 --- a/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_bookmark_unittest.cc @@ -81,13 +81,12 @@ class FakeServerChange { EXPECT_EQ(BaseNode::INIT_OK, parent.InitByIdLookup(parent_id)); syncer::WriteNode node(trans_); if (predecessor_id == 0) { - EXPECT_TRUE(node.InitByCreation(syncer::BOOKMARKS, parent, NULL)); + EXPECT_TRUE(node.InitBookmarkByCreation(parent, NULL)); } else { syncer::ReadNode predecessor(trans_); EXPECT_EQ(BaseNode::INIT_OK, predecessor.InitByIdLookup(predecessor_id)); EXPECT_EQ(predecessor.GetParentId(), parent.GetId()); - EXPECT_TRUE(node.InitByCreation(syncer::BOOKMARKS, parent, - &predecessor)); + EXPECT_TRUE(node.InitBookmarkByCreation(parent, &predecessor)); } EXPECT_EQ(node.GetPredecessorId(), predecessor_id); EXPECT_EQ(node.GetParentId(), parent_id); @@ -361,7 +360,7 @@ class ProfileSyncServiceBookmarkTest : public testing::Test { predecessor = &predecessor_node; } syncer::WriteNode node(&trans); - if (!node.InitByCreation(type, root, predecessor)) + if (!node.InitBookmarkByCreation(root, predecessor)) return false; node.SetIsFolder(true); node.GetMutableEntryForTest()->Put( diff --git a/sync/engine/apply_updates_and_resolve_conflicts_command_unittest.cc b/sync/engine/apply_updates_and_resolve_conflicts_command_unittest.cc index 97d4c33..c341e8f 100644 --- a/sync/engine/apply_updates_and_resolve_conflicts_command_unittest.cc +++ b/sync/engine/apply_updates_and_resolve_conflicts_command_unittest.cc @@ -71,12 +71,10 @@ class ApplyUpdatesAndResolveConflictsCommandTest : public SyncerCommandTest { TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, Simple) { string root_server_id = syncable::GetNullId().GetServerId(); - entry_factory_->CreateUnappliedNewItemWithParent("parent", - DefaultBookmarkSpecifics(), - root_server_id); - entry_factory_->CreateUnappliedNewItemWithParent("child", - DefaultBookmarkSpecifics(), - "parent"); + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( + "parent", DefaultBookmarkSpecifics(), root_server_id); + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( + "child", DefaultBookmarkSpecifics(), "parent"); ExpectGroupToChange(apply_updates_command_, GROUP_UI); apply_updates_command_.ExecuteImpl(session()); @@ -95,15 +93,15 @@ TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, // Set a bunch of updates which are difficult to apply in the order // they're received due to dependencies on other unseen items. string root_server_id = syncable::GetNullId().GetServerId(); - entry_factory_->CreateUnappliedNewItemWithParent( + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( "a_child_created_first", DefaultBookmarkSpecifics(), "parent"); - entry_factory_->CreateUnappliedNewItemWithParent( + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( "x_child_created_first", DefaultBookmarkSpecifics(), "parent"); - entry_factory_->CreateUnappliedNewItemWithParent( + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( "parent", DefaultBookmarkSpecifics(), root_server_id); - entry_factory_->CreateUnappliedNewItemWithParent( + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( "a_child_created_second", DefaultBookmarkSpecifics(), "parent"); - entry_factory_->CreateUnappliedNewItemWithParent( + entry_factory_->CreateUnappliedNewBookmarkItemWithParent( "x_child_created_second", DefaultBookmarkSpecifics(), "parent"); ExpectGroupToChange(apply_updates_command_, GROUP_UI); @@ -119,7 +117,7 @@ TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, // expect the command to detect that this update can't be applied because it is // in a CONFLICT state. TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, SimpleConflict) { - entry_factory_->CreateUnappliedAndUnsyncedItem("item", BOOKMARKS); + entry_factory_->CreateUnappliedAndUnsyncedBookmarkItem("item"); ExpectGroupToChange(apply_updates_command_, GROUP_UI); apply_updates_command_.ExecuteImpl(session()); @@ -139,8 +137,8 @@ TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, SimpleConflict) { // CONFLICT_HIERARCHY state. TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, HierarchyAndSimpleConflict) { // Create a simply-conflicting item. It will start with valid parent ids. - int64 handle = entry_factory_->CreateUnappliedAndUnsyncedItem( - "orphaned_by_server", BOOKMARKS); + int64 handle = entry_factory_->CreateUnappliedAndUnsyncedBookmarkItem( + "orphaned_by_server"); { // Manually set the SERVER_PARENT_ID to bad value. // A bad parent indicates a hierarchy conflict. @@ -242,8 +240,7 @@ TEST_F(ApplyUpdatesAndResolveConflictsCommandTest, // Create a server-deleted directory. { // Create it as a child of root node. - int64 handle = - entry_factory_->CreateSyncedItem("parent", BOOKMARKS, true); + int64 handle = entry_factory_->CreateSyncedItem("parent", BOOKMARKS, true); WriteTransaction trans(FROM_HERE, UNITTEST, directory()); MutableEntry entry(&trans, syncable::GET_BY_HANDLE, handle); diff --git a/sync/engine/process_commit_response_command_unittest.cc b/sync/engine/process_commit_response_command_unittest.cc index f96ea5e..40bd61b 100644 --- a/sync/engine/process_commit_response_command_unittest.cc +++ b/sync/engine/process_commit_response_command_unittest.cc @@ -8,6 +8,7 @@ #include "base/location.h" #include "base/stringprintf.h" +#include "sync/internal_api/public/test/test_entry_factory.h" #include "sync/protocol/bookmark_specifics.pb.h" #include "sync/protocol/sync.pb.h" #include "sync/sessions/sync_session.h" @@ -55,13 +56,14 @@ class ProcessCommitResponseCommandTest : public SyncerCommandTest { (*mutable_routing_info())[AUTOFILL] = GROUP_DB; SyncerCommandTest::SetUp(); + + test_entry_factory_.reset(new TestEntryFactory(directory())); } protected: ProcessCommitResponseCommandTest() - : next_old_revision_(1), - next_new_revision_(4000), + : next_new_revision_(4000), next_server_position_(10000) { } @@ -75,59 +77,22 @@ class ProcessCommitResponseCommandTest : public SyncerCommandTest { << "Item should have a valid (positive) server base revision"; } - // Create an unsynced item in the database. If item_id is a local ID, it - // will be treated as a create-new. Otherwise, if it's a server ID, we'll - // fake the server data so that it looks like it exists on the server. - // Returns the methandle of the created item in |metahandle_out| if not NULL. - void CreateUnsyncedItem(const Id& item_id, - const Id& parent_id, - const string& name, - bool is_folder, - ModelType model_type, - int64* metahandle_out) { - WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - Id predecessor_id; - ASSERT_TRUE( - directory()->GetLastChildIdForTest(&trans, parent_id, &predecessor_id)); - MutableEntry entry(&trans, syncable::CREATE, parent_id, name); - ASSERT_TRUE(entry.good()); - entry.Put(syncable::ID, item_id); - entry.Put(syncable::BASE_VERSION, - item_id.ServerKnows() ? next_old_revision_++ : 0); - entry.Put(syncable::IS_UNSYNCED, true); - entry.Put(syncable::IS_DIR, is_folder); - entry.Put(syncable::IS_DEL, false); - entry.Put(syncable::PARENT_ID, parent_id); - entry.PutPredecessor(predecessor_id); - sync_pb::EntitySpecifics default_specifics; - AddDefaultFieldValue(model_type, &default_specifics); - entry.Put(syncable::SPECIFICS, default_specifics); - if (item_id.ServerKnows()) { - entry.Put(syncable::SERVER_SPECIFICS, default_specifics); - entry.Put(syncable::SERVER_IS_DIR, is_folder); - entry.Put(syncable::SERVER_PARENT_ID, parent_id); - entry.Put(syncable::SERVER_IS_DEL, false); - } - if (metahandle_out) - *metahandle_out = entry.Get(syncable::META_HANDLE); - } - - // Create a new unsynced item in the database, and synthesize a commit - // record and a commit response for it in the syncer session. If item_id - // is a local ID, the item will be a create operation. Otherwise, it - // will be an edit. - void CreateUnprocessedCommitResult( + // Create a new unsynced item in the database, and synthesize a commit record + // and a commit response for it in the syncer session. If item_id is a local + // ID, the item will be a create operation. Otherwise, it will be an edit. + // Returns the metahandle of the newly created item. + int CreateUnprocessedCommitResult( const Id& item_id, const Id& parent_id, const string& name, + bool is_folder, ModelType model_type, sessions::OrderedCommitSet *commit_set, sync_pb::ClientToServerMessage *commit, sync_pb::ClientToServerResponse *response) { - bool is_folder = true; int64 metahandle = 0; - CreateUnsyncedItem(item_id, parent_id, name, is_folder, model_type, - &metahandle); + test_entry_factory_->CreateUnsyncedItem(item_id, parent_id, name, + is_folder, model_type, &metahandle); // ProcessCommitResponseCommand consumes commit_ids from the session // state, so we need to update that. O(n^2) because it's a test. @@ -135,19 +100,26 @@ class ProcessCommitResponseCommandTest : public SyncerCommandTest { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); MutableEntry entry(&trans, syncable::GET_BY_ID, item_id); - ASSERT_TRUE(entry.good()); + EXPECT_TRUE(entry.good()); entry.Put(syncable::SYNCING, true); // Add to the commit message. + // TODO(sync): Use the real commit-building code to construct this. commit->set_message_contents(ClientToServerMessage::COMMIT); sync_pb::SyncEntity* entity = commit->mutable_commit()->add_entries(); - entity->set_non_unique_name(name); - entity->set_folder(is_folder); - entity->set_parent_id_string(SyncableIdToProto(parent_id)); + entity->set_non_unique_name(entry.Get(syncable::NON_UNIQUE_NAME)); + entity->set_folder(entry.Get(syncable::IS_DIR)); + entity->set_parent_id_string( + SyncableIdToProto(entry.Get(syncable::PARENT_ID))); entity->set_version(entry.Get(syncable::BASE_VERSION)); entity->mutable_specifics()->CopyFrom(entry.Get(syncable::SPECIFICS)); entity->set_id_string(SyncableIdToProto(item_id)); + if (!entry.Get(syncable::UNIQUE_CLIENT_TAG).empty()) { + entity->set_client_defined_unique_tag( + entry.Get(syncable::UNIQUE_CLIENT_TAG)); + } + // Add to the response message. response->set_error_code(sync_pb::SyncEnums::SUCCESS); sync_pb::CommitResponse_EntryResponse* entry_response = @@ -173,6 +145,8 @@ class ProcessCommitResponseCommandTest : public SyncerCommandTest { response->commit().entryresponse(i).id_string()); } } + + return metahandle; } void SetLastErrorCode(sync_pb::CommitResponse::ResponseType error_code, @@ -184,8 +158,8 @@ class ProcessCommitResponseCommandTest : public SyncerCommandTest { } TestIdFactory id_factory_; + scoped_ptr<TestEntryFactory> test_entry_factory_; private: - int64 next_old_revision_; int64 next_new_revision_; int64 next_server_position_; DISALLOW_COPY_AND_ASSIGN(ProcessCommitResponseCommandTest); @@ -197,69 +171,63 @@ TEST_F(ProcessCommitResponseCommandTest, MultipleCommitIdProjections) { sync_pb::ClientToServerResponse response; Id bookmark_folder_id = id_factory_.NewLocalId(); - Id bookmark_id1 = id_factory_.NewLocalId(); - Id bookmark_id2 = id_factory_.NewLocalId(); - Id pref_id1 = id_factory_.NewLocalId(), pref_id2 = id_factory_.NewLocalId(); - Id autofill_id1 = id_factory_.NewLocalId(); - Id autofill_id2 = id_factory_.NewLocalId(); - CreateUnprocessedCommitResult(bookmark_folder_id, id_factory_.root(), - "A bookmark folder", BOOKMARKS, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(bookmark_id1, bookmark_folder_id, - "bookmark 1", BOOKMARKS, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(bookmark_id2, bookmark_folder_id, - "bookmark 2", BOOKMARKS, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(pref_id1, id_factory_.root(), - "Pref 1", PREFERENCES, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(pref_id2, id_factory_.root(), - "Pref 2", PREFERENCES, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(autofill_id1, id_factory_.root(), - "Autofill 1", AUTOFILL, - &commit_set, &request, &response); - CreateUnprocessedCommitResult(autofill_id2, id_factory_.root(), - "Autofill 2", AUTOFILL, - &commit_set, &request, &response); + int bookmark_folder_handle = CreateUnprocessedCommitResult( + bookmark_folder_id, id_factory_.root(), "A bookmark folder", true, + BOOKMARKS, &commit_set, &request, &response); + int bookmark1_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), bookmark_folder_id, "bookmark 1", false, + BOOKMARKS, &commit_set, &request, &response); + int bookmark2_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), bookmark_folder_id, "bookmark 2", false, + BOOKMARKS, &commit_set, &request, &response); + int pref1_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), id_factory_.root(), "Pref 1", false, + PREFERENCES, &commit_set, &request, &response); + int pref2_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), id_factory_.root(), "Pref 2", false, + PREFERENCES, &commit_set, &request, &response); + int autofill1_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), id_factory_.root(), "Autofill 1", false, + AUTOFILL, &commit_set, &request, &response); + int autofill2_handle = CreateUnprocessedCommitResult( + id_factory_.NewLocalId(), id_factory_.root(), "Autofill 2", false, + AUTOFILL, &commit_set, &request, &response); ProcessCommitResponseCommand command(commit_set, request, response); ExpectGroupsToChange(command, GROUP_UI, GROUP_DB); command.ExecuteImpl(session()); syncable::ReadTransaction trans(FROM_HERE, directory()); - Id new_fid; - ASSERT_TRUE(directory()->GetFirstChildId( - &trans, id_factory_.root(), &new_fid)); + + Entry b_folder(&trans, syncable::GET_BY_HANDLE, bookmark_folder_handle); + ASSERT_TRUE(b_folder.good()); + + Id new_fid = b_folder.Get(syncable::ID); ASSERT_FALSE(new_fid.IsRoot()); EXPECT_TRUE(new_fid.ServerKnows()); EXPECT_FALSE(bookmark_folder_id.ServerKnows()); EXPECT_FALSE(new_fid == bookmark_folder_id); - Entry b_folder(&trans, syncable::GET_BY_ID, new_fid); - ASSERT_TRUE(b_folder.good()); + ASSERT_EQ("A bookmark folder", b_folder.Get(NON_UNIQUE_NAME)) << "Name of bookmark folder should not change."; ASSERT_LT(0, b_folder.Get(BASE_VERSION)) << "Bookmark folder should have a valid (positive) server base revision"; // Look at the two bookmarks in bookmark_folder. - Id cid; - ASSERT_TRUE(directory()->GetFirstChildId(&trans, new_fid, &cid)); - Entry b1(&trans, syncable::GET_BY_ID, cid); - Entry b2(&trans, syncable::GET_BY_ID, b1.GetSuccessorId()); + Entry b1(&trans, syncable::GET_BY_HANDLE, bookmark1_handle); + Entry b2(&trans, syncable::GET_BY_HANDLE, bookmark2_handle); CheckEntry(&b1, "bookmark 1", BOOKMARKS, new_fid); CheckEntry(&b2, "bookmark 2", BOOKMARKS, new_fid); ASSERT_TRUE(b2.GetSuccessorId().IsRoot()); // Look at the prefs and autofill items. - Entry p1(&trans, syncable::GET_BY_ID, b_folder.GetSuccessorId()); - Entry p2(&trans, syncable::GET_BY_ID, p1.GetSuccessorId()); + Entry p1(&trans, syncable::GET_BY_HANDLE, pref1_handle); + Entry p2(&trans, syncable::GET_BY_HANDLE, pref2_handle); CheckEntry(&p1, "Pref 1", PREFERENCES, id_factory_.root()); CheckEntry(&p2, "Pref 2", PREFERENCES, id_factory_.root()); - Entry a1(&trans, syncable::GET_BY_ID, p2.GetSuccessorId()); - Entry a2(&trans, syncable::GET_BY_ID, a1.GetSuccessorId()); + Entry a1(&trans, syncable::GET_BY_HANDLE, autofill1_handle); + Entry a2(&trans, syncable::GET_BY_HANDLE, autofill2_handle); CheckEntry(&a1, "Autofill 1", AUTOFILL, id_factory_.root()); CheckEntry(&a2, "Autofill 2", AUTOFILL, id_factory_.root()); ASSERT_TRUE(a2.GetSuccessorId().IsRoot()); @@ -282,16 +250,18 @@ TEST_F(ProcessCommitResponseCommandTest, NewFolderCommitKeepsChildOrder) { // Create the parent folder, a new item whose ID will change on commit. Id folder_id = id_factory_.NewLocalId(); - CreateUnprocessedCommitResult(folder_id, id_factory_.root(), "A", - BOOKMARKS, + CreateUnprocessedCommitResult(folder_id, id_factory_.root(), + "A", true, BOOKMARKS, &commit_set, &request, &response); // Verify that the item is reachable. { - syncable::ReadTransaction trans(FROM_HERE, directory()); Id child_id; + syncable::ReadTransaction trans(FROM_HERE, directory()); + syncable::Entry root(&trans, syncable::GET_BY_ID, id_factory_.root()); + ASSERT_TRUE(root.good()); ASSERT_TRUE(directory()->GetFirstChildId( - &trans, id_factory_.root(), &child_id)); + &trans, id_factory_.root(), &child_id)); ASSERT_EQ(folder_id, child_id); } @@ -303,8 +273,8 @@ TEST_F(ProcessCommitResponseCommandTest, NewFolderCommitKeepsChildOrder) { // Alternate between new and old child items, just for kicks. Id id = (i % 4 < 2) ? id_factory_.NewLocalId() : id_factory_.NewServerId(); CreateUnprocessedCommitResult( - id, folder_id, base::StringPrintf("Item %d", i), BOOKMARKS, - &commit_set, &request, &response); + id, folder_id, base::StringPrintf("Item %d", i), false, + BOOKMARKS, &commit_set, &request, &response); } // The second 25 children will be unsynced items but NOT part of the commit // batch. When the ID of the parent folder changes during the commit, @@ -313,8 +283,9 @@ TEST_F(ProcessCommitResponseCommandTest, NewFolderCommitKeepsChildOrder) { for (; i < 2*batch_size; ++i) { // Alternate between new and old child items, just for kicks. Id id = (i % 4 < 2) ? id_factory_.NewLocalId() : id_factory_.NewServerId(); - CreateUnsyncedItem(id, folder_id, base::StringPrintf("Item %d", i), - false, BOOKMARKS, NULL); + test_entry_factory_->CreateUnsyncedItem( + id, folder_id, base::StringPrintf("Item %d", i), + false, BOOKMARKS, NULL); } // Process the commit response for the parent folder and the first @@ -413,15 +384,17 @@ TEST_P(MixedResult, ExtensionActivity) { << "To not be lame, this test requires more than one active group."; // Bookmark item setup. - CreateUnprocessedCommitResult(id_factory_.NewServerId(), - id_factory_.root(), "Some bookmark", BOOKMARKS, - &commit_set, &request, &response); + CreateUnprocessedCommitResult( + id_factory_.NewServerId(), + id_factory_.root(), "Some bookmark", false, + BOOKMARKS, &commit_set, &request, &response); if (ShouldFailBookmarkCommit()) SetLastErrorCode(CommitResponse::TRANSIENT_ERROR, &response); // Autofill item setup. - CreateUnprocessedCommitResult(id_factory_.NewServerId(), - id_factory_.root(), "Some autofill", AUTOFILL, - &commit_set, &request, &response); + CreateUnprocessedCommitResult( + id_factory_.NewServerId(), + id_factory_.root(), "Some autofill", false, + AUTOFILL, &commit_set, &request, &response); if (ShouldFailAutofillCommit()) SetLastErrorCode(CommitResponse::TRANSIENT_ERROR, &response); diff --git a/sync/engine/syncer_unittest.cc b/sync/engine/syncer_unittest.cc index 7fef4f4..669bda2 100644 --- a/sync/engine/syncer_unittest.cc +++ b/sync/engine/syncer_unittest.cc @@ -355,7 +355,7 @@ class SyncerTest : public testing::Test, } string utf8_name = test->id.GetServerId(); string name(utf8_name.begin(), utf8_name.end()); - MutableEntry entry(&trans, CREATE, test->parent_id, name); + MutableEntry entry(&trans, CREATE, BOOKMARKS, test->parent_id, name); entry.Put(syncable::ID, test->id); if (test->id.ServerKnows()) { @@ -458,8 +458,8 @@ class SyncerTest : public testing::Test, int64 CreateUnsyncedDirectory(const string& entry_name, const syncable::Id& id) { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&wtrans, syncable::CREATE, wtrans.root_id(), - entry_name); + MutableEntry entry( + &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), entry_name); EXPECT_TRUE(entry.good()); entry.Put(syncable::IS_UNSYNCED, true); entry.Put(syncable::IS_DIR, true); @@ -987,15 +987,14 @@ TEST_F(SyncerTest, EncryptionAwareConflicts) { TEST_F(SyncerTest, TestGetUnsyncedAndSimpleCommit) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), - "Pete"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::BASE_VERSION, 1); parent.Put(syncable::ID, parent_id_); - MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete"); ASSERT_TRUE(child.good()); child.Put(syncable::ID, child_id_); child.Put(syncable::BASE_VERSION, 1); @@ -1020,20 +1019,20 @@ TEST_F(SyncerTest, TestPurgeWhileUnsynced) { syncable::Id pref_node_id = TestIdFactory::MakeServer("Tim"); { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "Pete"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::BASE_VERSION, 1); parent.Put(syncable::ID, parent_id_); - MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete"); ASSERT_TRUE(child.good()); child.Put(syncable::ID, child_id_); child.Put(syncable::BASE_VERSION, 1); WriteTestDataToEntry(&wtrans, &child); - MutableEntry parent2(&wtrans, syncable::CREATE, wtrans.root_id(), "Tim"); + MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Tim"); ASSERT_TRUE(parent2.good()); parent2.Put(syncable::IS_UNSYNCED, true); parent2.Put(syncable::IS_DIR, true); @@ -1067,7 +1066,7 @@ TEST_F(SyncerTest, TestPurgeWhileUnapplied) { // Similar to above, but for unapplied items. Bug 49278. { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "Pete"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNAPPLIED_UPDATE, true); parent.Put(syncable::IS_DIR, true); @@ -1222,24 +1221,23 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); { - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), - "Bob"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bob"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::ID, ids_.FromNumber(100)); parent.Put(syncable::BASE_VERSION, 1); - MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(100), - "Bob"); + MutableEntry child( + &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(100), "Bob"); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); child.Put(syncable::ID, ids_.FromNumber(101)); child.Put(syncable::BASE_VERSION, 1); - MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(101), - "Bob"); + MutableEntry grandchild( + &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(101), "Bob"); ASSERT_TRUE(grandchild.good()); grandchild.Put(syncable::ID, ids_.FromNumber(102)); grandchild.Put(syncable::IS_UNSYNCED, true); @@ -1249,8 +1247,7 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { { // Create three deleted items which deletions we expect to be sent to the // server. - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), - "Pete"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Pete"); ASSERT_TRUE(parent.good()); parent.Put(syncable::ID, ids_.FromNumber(103)); parent.Put(syncable::IS_UNSYNCED, true); @@ -1259,8 +1256,8 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { parent.Put(syncable::IS_DEL, true); parent.Put(syncable::BASE_VERSION, 1); parent.Put(syncable::MTIME, now_minus_2h); - MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(103), - "Pete"); + MutableEntry child( + &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(103), "Pete"); ASSERT_TRUE(child.good()); child.Put(syncable::ID, ids_.FromNumber(104)); child.Put(syncable::IS_UNSYNCED, true); @@ -1269,8 +1266,8 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { child.Put(syncable::IS_DEL, true); child.Put(syncable::BASE_VERSION, 1); child.Put(syncable::MTIME, now_minus_2h); - MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(104), - "Pete"); + MutableEntry grandchild( + &wtrans, CREATE, BOOKMARKS, ids_.FromNumber(104), "Pete"); ASSERT_TRUE(grandchild.good()); grandchild.Put(syncable::ID, ids_.FromNumber(105)); grandchild.Put(syncable::IS_UNSYNCED, true); @@ -1299,32 +1296,35 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNesting) { } TEST_F(SyncerTest, TestCommitListOrderingWithNewItems) { + syncable::Id parent1_id = ids_.MakeServer("p1"); + syncable::Id parent2_id = ids_.MakeServer("p2"); + { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "1"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "1"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); - parent.Put(syncable::ID, parent_id_); - MutableEntry child(&wtrans, syncable::CREATE, wtrans.root_id(), "2"); + parent.Put(syncable::ID, parent1_id); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "2"); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); - child.Put(syncable::ID, child_id_); + child.Put(syncable::ID, parent2_id); parent.Put(syncable::BASE_VERSION, 1); child.Put(syncable::BASE_VERSION, 1); } { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, parent_id_, "A"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, parent1_id, "A"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::ID, ids_.FromNumber(102)); - MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "B"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent1_id, "B"); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); @@ -1334,13 +1334,13 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNewItems) { } { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, child_id_, "A"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, parent2_id, "A"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::ID, ids_.FromNumber(-104)); - MutableEntry child(&wtrans, syncable::CREATE, child_id_, "B"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent2_id, "B"); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); @@ -1352,8 +1352,8 @@ TEST_F(SyncerTest, TestCommitListOrderingWithNewItems) { SyncShareNudge(); ASSERT_EQ(6u, mock_server_->committed_ids().size()); // If this test starts failing, be aware other sort orders could be valid. - EXPECT_TRUE(parent_id_ == mock_server_->committed_ids()[0]); - EXPECT_TRUE(child_id_ == mock_server_->committed_ids()[1]); + EXPECT_TRUE(parent1_id == mock_server_->committed_ids()[0]); + EXPECT_TRUE(parent2_id == mock_server_->committed_ids()[1]); EXPECT_TRUE(ids_.FromNumber(102) == mock_server_->committed_ids()[2]); EXPECT_TRUE(ids_.FromNumber(-103) == mock_server_->committed_ids()[3]); EXPECT_TRUE(ids_.FromNumber(-104) == mock_server_->committed_ids()[4]); @@ -1365,18 +1365,18 @@ TEST_F(SyncerTest, TestCommitListOrderingCounterexample) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), "P"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "P"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(syncable::ID, parent_id_); - MutableEntry child1(&wtrans, syncable::CREATE, parent_id_, "1"); + MutableEntry child1(&wtrans, CREATE, BOOKMARKS, parent_id_, "1"); ASSERT_TRUE(child1.good()); child1.Put(syncable::IS_UNSYNCED, true); child1.Put(syncable::ID, child_id_); child1.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); - MutableEntry child2(&wtrans, syncable::CREATE, parent_id_, "2"); + MutableEntry child2(&wtrans, CREATE, BOOKMARKS, parent_id_, "2"); ASSERT_TRUE(child2.good()); child2.Put(syncable::IS_UNSYNCED, true); child2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); @@ -1402,7 +1402,7 @@ TEST_F(SyncerTest, TestCommitListOrderingAndNewParent) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), parent1_name); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); @@ -1416,14 +1416,16 @@ TEST_F(SyncerTest, TestCommitListOrderingAndNewParent) { syncable::Id child_id = ids_.NewServerId(); { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent2(&wtrans, syncable::CREATE, parent_id_, parent2_name); + MutableEntry parent2( + &wtrans, CREATE, BOOKMARKS, parent_id_, parent2_name); ASSERT_TRUE(parent2.good()); parent2.Put(syncable::IS_UNSYNCED, true); parent2.Put(syncable::IS_DIR, true); parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent2.Put(syncable::ID, parent2_id); - MutableEntry child(&wtrans, syncable::CREATE, parent2_id, child_name); + MutableEntry child( + &wtrans, CREATE, BOOKMARKS, parent2_id, child_name); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); @@ -1470,7 +1472,7 @@ TEST_F(SyncerTest, TestCommitListOrderingAndNewParentAndChild) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); MutableEntry parent(&wtrans, - syncable::CREATE, + CREATE, BOOKMARKS, wtrans.root_id(), parent_name); ASSERT_TRUE(parent.good()); @@ -1486,14 +1488,15 @@ TEST_F(SyncerTest, TestCommitListOrderingAndNewParentAndChild) { const Id child_local_id = ids_.NewLocalId(); { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent2(&wtrans, syncable::CREATE, parent_id_, parent2_name); + MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, parent_id_, parent2_name); ASSERT_TRUE(parent2.good()); parent2.Put(syncable::IS_UNSYNCED, true); parent2.Put(syncable::IS_DIR, true); parent2.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent2.Put(syncable::ID, parent2_local_id); - MutableEntry child(&wtrans, syncable::CREATE, parent2_local_id, child_name); + MutableEntry child( + &wtrans, CREATE, BOOKMARKS, parent2_local_id, child_name); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); @@ -1711,14 +1714,14 @@ TEST_F(SyncerTest, CommitTimeRename) { // Create a folder and an entry. { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&trans, CREATE, root_id_, "Folder"); + MutableEntry parent(&trans, CREATE, BOOKMARKS, root_id_, "Folder"); ASSERT_TRUE(parent.good()); parent.Put(IS_DIR, true); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); parent.Put(IS_UNSYNCED, true); metahandle_folder = parent.Get(META_HANDLE); - MutableEntry entry(&trans, CREATE, parent.Get(ID), "new_entry"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, parent.Get(ID), "new_entry"); ASSERT_TRUE(entry.good()); metahandle_new_entry = entry.Get(META_HANDLE); WriteTestDataToEntry(&trans, &entry); @@ -1759,7 +1762,7 @@ TEST_F(SyncerTest, CommitTimeRenameI18N) { // Create a folder, expect a commit time rename. { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&trans, CREATE, root_id_, "Folder"); + MutableEntry parent(&trans, CREATE, BOOKMARKS, root_id_, "Folder"); ASSERT_TRUE(parent.good()); parent.Put(IS_DIR, true); parent.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -1790,7 +1793,8 @@ TEST_F(SyncerTest, CommitReuniteUpdateAdjustsChildren) { int64 metahandle_folder; { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "new_folder"); + MutableEntry entry( + &trans, CREATE, BOOKMARKS, trans.root_id(), "new_folder"); ASSERT_TRUE(entry.good()); entry.Put(IS_DIR, true); entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -1812,7 +1816,7 @@ TEST_F(SyncerTest, CommitReuniteUpdateAdjustsChildren) { // Create an entry in the newly created folder. { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, folder_id, "new_entry"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, folder_id, "new_entry"); ASSERT_TRUE(entry.good()); metahandle_entry = entry.Get(META_HANDLE); WriteTestDataToEntry(&trans, &entry); @@ -1881,7 +1885,7 @@ TEST_F(SyncerTest, CommitReuniteUpdate) { int64 entry_metahandle; { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "new_entry"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "new_entry"); ASSERT_TRUE(entry.good()); entry_metahandle = entry.Get(META_HANDLE); WriteTestDataToEntry(&trans, &entry); @@ -1935,7 +1939,7 @@ TEST_F(SyncerTest, CommitReuniteUpdateDoesNotChokeOnDeletedLocalEntry) { int64 entry_metahandle; { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "new_entry"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "new_entry"); ASSERT_TRUE(entry.good()); entry_metahandle = entry.Get(META_HANDLE); WriteTestDataToEntry(&trans, &entry); @@ -2099,8 +2103,8 @@ class EntryCreatedInNewFolderTest : public SyncerTest { "bob")); CHECK(bob.good()); - MutableEntry entry2(&trans, syncable::CREATE, bob.Get(syncable::ID), - "bob"); + MutableEntry entry2( + &trans, CREATE, BOOKMARKS, bob.Get(syncable::ID), "bob"); CHECK(entry2.good()); entry2.Put(syncable::IS_DIR, true); entry2.Put(syncable::IS_UNSYNCED, true); @@ -2111,8 +2115,7 @@ class EntryCreatedInNewFolderTest : public SyncerTest { TEST_F(EntryCreatedInNewFolderTest, EntryCreatedInNewFolderMidSync) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, syncable::CREATE, trans.root_id(), - "bob"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); ASSERT_TRUE(entry.good()); entry.Put(syncable::IS_DIR, true); entry.Put(syncable::IS_UNSYNCED, true); @@ -2150,7 +2153,7 @@ TEST_F(SyncerTest, UnappliedUpdateOnCreatedItemItemDoesNotCrash) { { // Create an item. WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry fred_match(&trans, CREATE, trans.root_id(), + MutableEntry fred_match(&trans, CREATE, BOOKMARKS, trans.root_id(), "fred_match"); ASSERT_TRUE(fred_match.good()); metahandle_fred = fred_match.Get(META_HANDLE); @@ -2186,13 +2189,13 @@ TEST_F(SyncerTest, UnappliedUpdateOnCreatedItemItemDoesNotCrash) { TEST_F(SyncerTest, DoublyChangedWithResolver) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, root_id_, "Folder"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "Folder"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_DIR, true); parent.Put(syncable::ID, parent_id_); parent.Put(syncable::BASE_VERSION, 5); parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); - MutableEntry child(&wtrans, syncable::CREATE, parent_id_, "Pete.htm"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent_id_, "Pete.htm"); ASSERT_TRUE(child.good()); child.Put(syncable::ID, child_id_); child.Put(syncable::BASE_VERSION, 10); @@ -2227,7 +2230,7 @@ TEST_F(SyncerTest, CommitsUpdateDoesntAlterEntry) { int64 entry_metahandle; { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&wtrans, syncable::CREATE, root_id_, "Pete"); + MutableEntry entry(&wtrans, CREATE, BOOKMARKS, root_id_, "Pete"); ASSERT_TRUE(entry.good()); EXPECT_FALSE(entry.Get(ID).ServerKnows()); entry.Put(syncable::IS_DIR, true); @@ -2273,7 +2276,7 @@ TEST_F(SyncerTest, ParentAndChildBothMatch) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, CREATE, root_id_, "Folder"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "Folder"); ASSERT_TRUE(parent.good()); parent.Put(IS_DIR, true); parent.Put(IS_UNSYNCED, true); @@ -2281,7 +2284,7 @@ TEST_F(SyncerTest, ParentAndChildBothMatch) { parent.Put(BASE_VERSION, 1); parent.Put(SPECIFICS, DefaultBookmarkSpecifics()); - MutableEntry child(&wtrans, CREATE, parent.Get(ID), "test.htm"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "test.htm"); ASSERT_TRUE(child.good()); child.Put(ID, child_id); child.Put(BASE_VERSION, 1); @@ -2314,7 +2317,7 @@ TEST_F(SyncerTest, ParentAndChildBothMatch) { TEST_F(SyncerTest, CommittingNewDeleted) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "bob"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); entry.Put(IS_UNSYNCED, true); entry.Put(IS_DEL, true); } @@ -2335,7 +2338,7 @@ TEST_F(SyncerTest, UnappliedUpdateDuringCommit) { // This test is a little fake. { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "bob"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); entry.Put(ID, ids_.FromNumber(20)); entry.Put(BASE_VERSION, 1); entry.Put(SERVER_VERSION, 1); @@ -2367,7 +2370,7 @@ TEST_F(SyncerTest, DeletingEntryInFolder) { int64 existing_metahandle; { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "existing"); + MutableEntry entry(&trans, CREATE, BOOKMARKS, trans.root_id(), "existing"); ASSERT_TRUE(entry.good()); entry.Put(IS_DIR, true); entry.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -2377,7 +2380,7 @@ TEST_F(SyncerTest, DeletingEntryInFolder) { syncer_->SyncShare(session_.get(), SYNCER_BEGIN, SYNCER_END); { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry newfolder(&trans, CREATE, trans.root_id(), "new"); + MutableEntry newfolder(&trans, CREATE, BOOKMARKS, trans.root_id(), "new"); ASSERT_TRUE(newfolder.good()); newfolder.Put(IS_DIR, true); newfolder.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -2403,7 +2406,8 @@ TEST_F(SyncerTest, DeletingEntryWithLocalEdits) { SyncShareNudge(); { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry newfolder(&trans, CREATE, ids_.FromNumber(1), "local"); + MutableEntry newfolder( + &trans, CREATE, BOOKMARKS, ids_.FromNumber(1), "local"); ASSERT_TRUE(newfolder.good()); newfolder.Put(IS_UNSYNCED, true); newfolder.Put(IS_DIR, true); @@ -2494,7 +2498,7 @@ TEST_F(SyncerTest, CommitManyItemsInOneGo_Success) { for (uint32 i = 0; i < items_to_commit; i++) { string nameutf8 = base::StringPrintf("%d", i); string name(nameutf8.begin(), nameutf8.end()); - MutableEntry e(&trans, CREATE, trans.root_id(), name); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); e.Put(IS_UNSYNCED, true); e.Put(IS_DIR, true); e.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -2517,7 +2521,7 @@ TEST_F(SyncerTest, CommitManyItemsInOneGo_PostBufferFail) { for (uint32 i = 0; i < items_to_commit; i++) { string nameutf8 = base::StringPrintf("%d", i); string name(nameutf8.begin(), nameutf8.end()); - MutableEntry e(&trans, CREATE, trans.root_id(), name); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); e.Put(IS_UNSYNCED, true); e.Put(IS_DIR, true); e.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -2547,7 +2551,7 @@ TEST_F(SyncerTest, CommitManyItemsInOneGo_CommitConflict) { for (uint32 i = 0; i < items_to_commit; i++) { string nameutf8 = base::StringPrintf("%d", i); string name(nameutf8.begin(), nameutf8.end()); - MutableEntry e(&trans, CREATE, trans.root_id(), name); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), name); e.Put(IS_UNSYNCED, true); e.Put(IS_DIR, true); e.Put(SPECIFICS, DefaultBookmarkSpecifics()); @@ -2645,7 +2649,8 @@ TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath) { syncable::Id local_folder_id; { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry new_entry(&wtrans, CREATE, wtrans.root_id(), "Bar.htm"); + MutableEntry new_entry( + &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bar.htm"); ASSERT_TRUE(new_entry.good()); local_folder_id = new_entry.Get(ID); local_folder_handle = new_entry.Get(META_HANDLE); @@ -2711,7 +2716,8 @@ TEST_F(SyncerTest, NewEntryAndAlteredServerEntrySharePath_OldBookmarksProto) { syncable::Id local_folder_id; { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry new_entry(&wtrans, CREATE, wtrans.root_id(), "Bar.htm"); + MutableEntry new_entry( + &wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "Bar.htm"); ASSERT_TRUE(new_entry.good()); local_folder_id = new_entry.Get(ID); local_folder_handle = new_entry.Get(META_HANDLE); @@ -2883,12 +2889,12 @@ TEST_F(SyncerTest, ResolveWeWroteTheyDeleted) { TEST_F(SyncerTest, DuplicateIDReturn) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry folder(&trans, CREATE, trans.root_id(), "bob"); + MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "bob"); ASSERT_TRUE(folder.good()); folder.Put(IS_UNSYNCED, true); folder.Put(IS_DIR, true); folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); - MutableEntry folder2(&trans, CREATE, trans.root_id(), "fred"); + MutableEntry folder2(&trans, CREATE, BOOKMARKS, trans.root_id(), "fred"); ASSERT_TRUE(folder2.good()); folder2.Put(IS_UNSYNCED, false); folder2.Put(IS_DIR, true); @@ -2927,7 +2933,8 @@ TEST_F(SyncerTest, ConflictResolverMergesLocalDeleteAndServerUpdate) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry local_deleted(&trans, CREATE, trans.root_id(), "name"); + MutableEntry local_deleted( + &trans, CREATE, BOOKMARKS, trans.root_id(), "name"); local_deleted.Put(ID, ids_.FromNumber(1)); local_deleted.Put(BASE_VERSION, 1); local_deleted.Put(IS_DEL, true); @@ -2960,7 +2967,8 @@ TEST_F(SyncerTest, UpdateFlipsTheFolderBit) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry local_deleted(&trans, CREATE, trans.root_id(), "name"); + MutableEntry local_deleted( + &trans, CREATE, BOOKMARKS, trans.root_id(), "name"); local_deleted.Put(ID, ids_.FromNumber(1)); local_deleted.Put(BASE_VERSION, 1); local_deleted.Put(IS_DEL, true); @@ -2998,7 +3006,8 @@ TEST_F(SyncerTest, MergingExistingItems) { SyncShareNudge(); { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&trans, CREATE, trans.root_id(), "Copy of base"); + MutableEntry entry( + &trans, CREATE, BOOKMARKS, trans.root_id(), "Copy of base"); WriteTestDataToEntry(&trans, &entry); } mock_server_->AddUpdateBookmark(1, 0, "Copy of base", 50, 50); @@ -3188,7 +3197,7 @@ TEST_F(SyncerTest, DirectoryCommitTest) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry parent(&wtrans, syncable::CREATE, root_id_, "foo"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "foo"); ASSERT_TRUE(parent.good()); parent.Put(syncable::IS_UNSYNCED, true); parent.Put(syncable::IS_DIR, true); @@ -3196,7 +3205,7 @@ TEST_F(SyncerTest, DirectoryCommitTest) { in_root_id = parent.Get(syncable::ID); foo_metahandle = parent.Get(META_HANDLE); - MutableEntry child(&wtrans, syncable::CREATE, parent.Get(ID), "bar"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "bar"); ASSERT_TRUE(child.good()); child.Put(syncable::IS_UNSYNCED, true); child.Put(syncable::IS_DIR, true); @@ -3308,7 +3317,8 @@ TEST_F(SyncerTest, EnsureWeSendUpOldParent) { entry.Put(PARENT_ID, folder_two_id); entry.Put(IS_UNSYNCED, true); // A new entry should send no "old parent." - MutableEntry create(&trans, CREATE, trans.root_id(), "new_folder"); + MutableEntry create( + &trans, CREATE, BOOKMARKS, trans.root_id(), "new_folder"); create.Put(IS_UNSYNCED, true); create.Put(SPECIFICS, DefaultBookmarkSpecifics()); } @@ -3328,7 +3338,7 @@ TEST_F(SyncerTest, Test64BitVersionSupport) { // Try writing max int64 to the version fields of a meta entry. { WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); - MutableEntry entry(&wtrans, syncable::CREATE, wtrans.root_id(), name); + MutableEntry entry(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); ASSERT_TRUE(entry.good()); entry.Put(syncable::BASE_VERSION, really_big_int); entry.Put(syncable::SERVER_VERSION, really_big_int); @@ -3539,7 +3549,8 @@ TEST_F(SyncerTest, ClientTagUncommittedTagMatchesUpdate) { { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); + MutableEntry perm_folder( + &trans, CREATE, BOOKMARKS, ids_.root(), "clientname"); ASSERT_TRUE(perm_folder.good()); perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); perm_folder.Put(SPECIFICS, local_bookmark); @@ -3604,7 +3615,8 @@ TEST_F(SyncerTest, ClientTagConflictWithDeletedLocalEntry) { { // Create a deleted local entry with a unique client tag. WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); + MutableEntry perm_folder( + &trans, CREATE, BOOKMARKS, ids_.root(), "clientname"); ASSERT_TRUE(perm_folder.good()); ASSERT_FALSE(perm_folder.Get(ID).ServerKnows()); perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); @@ -4066,7 +4078,8 @@ class SyncerUndeletionTest : public SyncerTest { void Create() { WriteTransaction trans(FROM_HERE, UNITTEST, directory()); - MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); + MutableEntry perm_folder( + &trans, CREATE, BOOKMARKS, ids_.root(), "clientname"); ASSERT_TRUE(perm_folder.good()); perm_folder.Put(UNIQUE_CLIENT_TAG, client_tag_); perm_folder.Put(IS_UNSYNCED, true); diff --git a/sync/internal_api/public/test/test_entry_factory.h b/sync/internal_api/public/test/test_entry_factory.h index 071a501..7ca79e6 100644 --- a/sync/internal_api/public/test/test_entry_factory.h +++ b/sync/internal_api/public/test/test_entry_factory.h @@ -29,15 +29,21 @@ class TestEntryFactory { const sync_pb::EntitySpecifics& specifics, const std::string& parent_id); + int64 CreateUnappliedNewBookmarkItemWithParent( + const std::string& item_id, + const sync_pb::EntitySpecifics& specifics, + const std::string& parent_id); + // Create a new unapplied update without a parent. int64 CreateUnappliedNewItem(const std::string& item_id, const sync_pb::EntitySpecifics& specifics, bool is_unique); - // Create an unsynced item in the database. If item_id is a local ID, it will - // be treated as a create-new. Otherwise, if it's a server ID, we'll fake the - // server data so that it looks like it exists on the server. Returns the - // methandle of the created item in |metahandle_out| if not NULL. + // Create an unsynced unique_client_tag item in the database. If item_id is a + // local ID, it will be treated as a create-new. Otherwise, if it's a server + // ID, we'll fake the server data so that it looks like it exists on the + // server. Returns the methandle of the created item in |metahandle_out| if + // not NULL. void CreateUnsyncedItem(const syncable::Id& item_id, const syncable::Id& parent_id, const std::string& name, @@ -45,14 +51,13 @@ class TestEntryFactory { ModelType model_type, int64* metahandle_out); - // Creates an item that is both unsynced an an unapplied update. Returns the - // metahandle of the created item. - int64 CreateUnappliedAndUnsyncedItem(const std::string& name, - ModelType model_type); + // Creates a bookmark that is both unsynced an an unapplied update. Returns + // the metahandle of the created item. + int64 CreateUnappliedAndUnsyncedBookmarkItem(const std::string& name); - // Creates an item that has neither IS_UNSYNED or IS_UNAPPLIED_UPDATE. The - // item is known to both the server and client. Returns the metahandle of - // the created item. + // Creates a unique_client_tag item that has neither IS_UNSYNED or + // IS_UNAPPLIED_UPDATE. The item is known to both the server and client. + // Returns the metahandle of the created item. int64 CreateSyncedItem(const std::string& name, ModelType model_type, bool is_folder); diff --git a/sync/internal_api/public/write_node.h b/sync/internal_api/public/write_node.h index 73baa6f..990f040 100644 --- a/sync/internal_api/public/write_node.h +++ b/sync/internal_api/public/write_node.h @@ -67,15 +67,12 @@ class SYNC_EXPORT WriteNode : public BaseNode { ModelType model_type, const std::string& tag) OVERRIDE; - // Create a new node with the specified parent and predecessor. |model_type| - // dictates the type of the item, and controls which EntitySpecifics proto - // extension can be used with this item. Use a NULL |predecessor| - // to indicate that this is to be the first child. + // Create a new bookmark node with the specified parent and predecessor. Use + // a NULL |predecessor| to indicate that this is to be the first child. // |predecessor| must be a child of |new_parent| or NULL. Returns false on // failure. - bool InitByCreation(ModelType model_type, - const BaseNode& parent, - const BaseNode* predecessor); + bool InitBookmarkByCreation(const BaseNode& parent, + const BaseNode* predecessor); // Create nodes using this function if they're unique items that // you want to fetch using client_tag. Note that the behavior of these @@ -183,9 +180,6 @@ class SYNC_EXPORT WriteNode : public BaseNode { void* operator new(size_t size); // Node is meant for stack use only. - // Helper to set model type. This will clear any specifics data. - void PutModelType(ModelType model_type); - // Helper to set the previous node. bool PutPredecessor(const BaseNode* predecessor) WARN_UNUSED_RESULT; diff --git a/sync/internal_api/sync_encryption_handler_impl_unittest.cc b/sync/internal_api/sync_encryption_handler_impl_unittest.cc index 6e0b757..a650c14 100644 --- a/sync/internal_api/sync_encryption_handler_impl_unittest.cc +++ b/sync/internal_api/sync_encryption_handler_impl_unittest.cc @@ -103,6 +103,7 @@ class SyncEncryptionHandlerImplTest : public ::testing::Test { syncable::WriteTransaction wtrans(FROM_HERE, syncable::UNITTEST, directory); syncable::MutableEntry node(&wtrans, syncable::CREATE, + model_type, wtrans.root_id(), tag_name); node.Put(syncable::UNIQUE_SERVER_TAG, tag_name); diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc index fd981f1..c06aa28 100644 --- a/sync/internal_api/sync_manager_impl_unittest.cc +++ b/sync/internal_api/sync_manager_impl_unittest.cc @@ -130,23 +130,6 @@ int64 MakeNode(UserShare* share, return node.GetId(); } -// Makes a non-folder child of a non-root node. Returns the id of the -// newly-created node. -int64 MakeNodeWithParent(UserShare* share, - ModelType model_type, - const std::string& client_tag, - int64 parent_id) { - WriteTransaction trans(FROM_HERE, share); - ReadNode parent_node(&trans); - EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); - WriteNode node(&trans); - WriteNode::InitUniqueByCreationResult result = - node.InitUniqueByCreation(model_type, parent_node, client_tag); - EXPECT_EQ(WriteNode::INIT_SUCCESS, result); - node.SetIsFolder(false); - return node.GetId(); -} - // Makes a folder child of a non-root node. Returns the id of the // newly-created node. int64 MakeFolderWithParent(UserShare* share, @@ -155,13 +138,24 @@ int64 MakeFolderWithParent(UserShare* share, BaseNode* predecessor) { WriteTransaction trans(FROM_HERE, share); ReadNode parent_node(&trans); - EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); + DCHECK_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); WriteNode node(&trans); - EXPECT_TRUE(node.InitByCreation(model_type, parent_node, predecessor)); + DCHECK(node.InitBookmarkByCreation(parent_node, predecessor)); node.SetIsFolder(true); return node.GetId(); } +int64 MakeBookmarkWithParent(UserShare* share, + int64 parent_id, + BaseNode* predecessor) { + WriteTransaction trans(FROM_HERE, share); + ReadNode parent_node(&trans); + DCHECK_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); + WriteNode node(&trans); + DCHECK(node.InitBookmarkByCreation(parent_node, predecessor)); + return node.GetId(); +} + // Creates the "synced" root node for a particular datatype. We use the syncable // methods here so that the syncer treats these nodes as if they were already // received from the server. @@ -350,8 +344,7 @@ TEST_F(SyncApiTest, TestDeleteBehavior) { // we'll use this spare folder later WriteNode folder_node(&trans); - EXPECT_TRUE(folder_node.InitByCreation(BOOKMARKS, - root_node, NULL)); + EXPECT_TRUE(folder_node.InitBookmarkByCreation(root_node, NULL)); folder_id = folder_node.GetId(); WriteNode wnode(&trans); @@ -460,22 +453,21 @@ TEST_F(SyncApiTest, WriteEncryptedTitle) { trans.GetCryptographer()->AddKey(params); } test_user_share_.encryption_handler()->EnableEncryptEverything(); + int bookmark_id; { WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); ReadNode root_node(&trans); root_node.InitByRootLookup(); WriteNode bookmark_node(&trans); - WriteNode::InitUniqueByCreationResult result = - bookmark_node.InitUniqueByCreation(BOOKMARKS, - root_node, "foo"); - EXPECT_EQ(WriteNode::INIT_SUCCESS, result); + ASSERT_TRUE(bookmark_node.InitBookmarkByCreation(root_node, NULL)); + bookmark_id = bookmark_node.GetId(); bookmark_node.SetTitle(UTF8ToWide("foo")); WriteNode pref_node(&trans); - result = + WriteNode::InitUniqueByCreationResult result = pref_node.InitUniqueByCreation(PREFERENCES, root_node, "bar"); - EXPECT_EQ(WriteNode::INIT_SUCCESS, result); + ASSERT_EQ(WriteNode::INIT_SUCCESS, result); pref_node.SetTitle(UTF8ToWide("bar")); } { @@ -484,15 +476,13 @@ TEST_F(SyncApiTest, WriteEncryptedTitle) { root_node.InitByRootLookup(); ReadNode bookmark_node(&trans); - EXPECT_EQ(BaseNode::INIT_OK, - bookmark_node.InitByClientTagLookup(BOOKMARKS, - "foo")); + ASSERT_EQ(BaseNode::INIT_OK, bookmark_node.InitByIdLookup(bookmark_id)); EXPECT_EQ("foo", bookmark_node.GetTitle()); EXPECT_EQ(kEncryptedString, bookmark_node.GetEntry()->Get(syncable::NON_UNIQUE_NAME)); ReadNode pref_node(&trans); - EXPECT_EQ(BaseNode::INIT_OK, + ASSERT_EQ(BaseNode::INIT_OK, pref_node.InitByClientTagLookup(PREFERENCES, "bar")); EXPECT_EQ(kEncryptedString, pref_node.GetTitle()); @@ -672,16 +662,14 @@ TEST_F(SyncApiTest, GetTotalNodeCountMultipleChildren) { BOOKMARKS, parent, NULL); - ignore_result(MakeNodeWithParent( + ignore_result(MakeBookmarkWithParent( test_user_share_.user_share(), - BOOKMARKS, - "c2", - parent)); - ignore_result(MakeNodeWithParent( + parent, + NULL)); + ignore_result(MakeBookmarkWithParent( test_user_share_.user_share(), - BOOKMARKS, - "c1c1", - child1)); + child1, + NULL)); { ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); @@ -1540,20 +1528,17 @@ TEST_F(SyncManagerTest, EncryptDataTypesWithData) { // First batch_size nodes are children of folder. size_t i; for (i = 0; i < batch_size; ++i) { - MakeNodeWithParent(sync_manager_.GetUserShare(), BOOKMARKS, - base::StringPrintf("%"PRIuS"", i), folder); + MakeBookmarkWithParent(sync_manager_.GetUserShare(), folder, NULL); } // Next batch_size nodes are a different type and on their own. for (; i < 2*batch_size; ++i) { - MakeNodeWithParent(sync_manager_.GetUserShare(), SESSIONS, - base::StringPrintf("%"PRIuS"", i), - GetIdForDataType(SESSIONS)); + MakeNode(sync_manager_.GetUserShare(), SESSIONS, + base::StringPrintf("%"PRIuS"", i)); } // Last batch_size nodes are a third type that will not need encryption. for (; i < 3*batch_size; ++i) { - MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, - base::StringPrintf("%"PRIuS"", i), - GetIdForDataType(THEMES)); + MakeNode(sync_manager_.GetUserShare(), THEMES, + base::StringPrintf("%"PRIuS"", i)); } { @@ -2150,10 +2135,11 @@ TEST_F(SyncManagerTest, CreateLocalBookmark) { std::string url = "url"; { WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); - ReadNode root_node(&trans); - root_node.InitByRootLookup(); + ReadNode bookmark_root(&trans); + ASSERT_EQ(BaseNode::INIT_OK, + bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS))); WriteNode node(&trans); - ASSERT_TRUE(node.InitByCreation(BOOKMARKS, root_node, NULL)); + ASSERT_TRUE(node.InitBookmarkByCreation(bookmark_root, NULL)); node.SetIsFolder(false); node.SetTitle(UTF8ToWide(title)); @@ -2163,9 +2149,10 @@ TEST_F(SyncManagerTest, CreateLocalBookmark) { } { ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); - ReadNode root_node(&trans); - root_node.InitByRootLookup(); - int64 child_id = root_node.GetFirstChildId(); + ReadNode bookmark_root(&trans); + ASSERT_EQ(BaseNode::INIT_OK, + bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS))); + int64 child_id = bookmark_root.GetFirstChildId(); ReadNode node(&trans); ASSERT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); diff --git a/sync/internal_api/test/test_entry_factory.cc b/sync/internal_api/test/test_entry_factory.cc index 8e6b2b3..3753b99 100644 --- a/sync/internal_api/test/test_entry_factory.cc +++ b/sync/internal_api/test/test_entry_factory.cc @@ -9,6 +9,7 @@ #include "sync/syncable/mutable_entry.h" #include "sync/syncable/syncable_id.h" #include "sync/syncable/syncable_read_transaction.h" +#include "sync/syncable/syncable_util.h" #include "sync/syncable/syncable_write_transaction.h" #include "sync/test/engine/test_id_factory.h" @@ -45,6 +46,25 @@ int64 TestEntryFactory::CreateUnappliedNewItemWithParent( return entry.Get(syncable::META_HANDLE); } +int64 TestEntryFactory::CreateUnappliedNewBookmarkItemWithParent( + const string& item_id, + const sync_pb::EntitySpecifics& specifics, + const string& parent_id) { + WriteTransaction trans(FROM_HERE, UNITTEST, directory_); + MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, + Id::CreateFromServerId(item_id)); + DCHECK(entry.good()); + entry.Put(syncable::SERVER_VERSION, GetNextRevision()); + entry.Put(syncable::IS_UNAPPLIED_UPDATE, true); + + entry.Put(syncable::SERVER_NON_UNIQUE_NAME, item_id); + entry.Put(syncable::SERVER_PARENT_ID, Id::CreateFromServerId(parent_id)); + entry.Put(syncable::SERVER_IS_DIR, true); + entry.Put(syncable::SERVER_SPECIFICS, specifics); + + return entry.Get(syncable::META_HANDLE); +} + int64 TestEntryFactory::CreateUnappliedNewItem( const string& item_id, const sync_pb::EntitySpecifics& specifics, @@ -73,11 +93,19 @@ void TestEntryFactory::CreateUnsyncedItem( bool is_folder, ModelType model_type, int64* metahandle_out) { + if (is_folder) { + DCHECK_EQ(model_type, BOOKMARKS); + } + WriteTransaction trans(FROM_HERE, UNITTEST, directory_); + Id predecessor_id; - DCHECK( - directory_->GetLastChildIdForTest(&trans, parent_id, &predecessor_id)); - MutableEntry entry(&trans, syncable::CREATE, parent_id, name); + if (model_type == BOOKMARKS) { + DCHECK(directory_->GetLastChildIdForTest( + &trans, parent_id, &predecessor_id)); + } + + MutableEntry entry(&trans, syncable::CREATE, model_type, parent_id, name); DCHECK(entry.good()); entry.Put(syncable::ID, item_id); entry.Put(syncable::BASE_VERSION, @@ -86,13 +114,18 @@ void TestEntryFactory::CreateUnsyncedItem( entry.Put(syncable::IS_DIR, is_folder); entry.Put(syncable::IS_DEL, false); entry.Put(syncable::PARENT_ID, parent_id); - CHECK(entry.PutPredecessor(predecessor_id)); sync_pb::EntitySpecifics default_specifics; AddDefaultFieldValue(model_type, &default_specifics); entry.Put(syncable::SPECIFICS, default_specifics); + + // Bookmarks get inserted at the end of the list. + if (model_type == BOOKMARKS) { + DCHECK(entry.PutPredecessor(predecessor_id)); + } + if (item_id.ServerKnows()) { entry.Put(syncable::SERVER_SPECIFICS, default_specifics); - entry.Put(syncable::SERVER_IS_DIR, is_folder); + entry.Put(syncable::SERVER_IS_DIR, false); entry.Put(syncable::SERVER_PARENT_ID, parent_id); entry.Put(syncable::SERVER_IS_DEL, false); } @@ -100,13 +133,12 @@ void TestEntryFactory::CreateUnsyncedItem( *metahandle_out = entry.Get(syncable::META_HANDLE); } -int64 TestEntryFactory::CreateUnappliedAndUnsyncedItem( - const string& name, - ModelType model_type) { +int64 TestEntryFactory::CreateUnappliedAndUnsyncedBookmarkItem( + const string& name) { int64 metahandle = 0; CreateUnsyncedItem( TestIdFactory::MakeServer(name), TestIdFactory::root(), - name, false, model_type, &metahandle); + name, false, BOOKMARKS, &metahandle); WriteTransaction trans(FROM_HERE, UNITTEST, directory_); MutableEntry entry(&trans, syncable::GET_BY_HANDLE, metahandle); @@ -129,10 +161,7 @@ int64 TestEntryFactory::CreateSyncedItem( syncable::Id item_id(TestIdFactory::MakeServer(name)); int64 version = GetNextRevision(); - sync_pb::EntitySpecifics default_specifics; - AddDefaultFieldValue(model_type, &default_specifics); - - MutableEntry entry(&trans, syncable::CREATE, parent_id, name); + MutableEntry entry(&trans, syncable::CREATE, model_type, parent_id, name); if (!entry.good()) { NOTREACHED(); return syncable::kInvalidMetaHandle; @@ -146,20 +175,19 @@ int64 TestEntryFactory::CreateSyncedItem( entry.Put(syncable::IS_DEL, false); entry.Put(syncable::PARENT_ID, parent_id); + // TODO(sync): Place bookmarks at the end of the list? if (!entry.PutPredecessor(TestIdFactory::root())) { NOTREACHED(); return syncable::kInvalidMetaHandle; } - entry.Put(syncable::SPECIFICS, default_specifics); entry.Put(syncable::SERVER_VERSION, GetNextRevision()); - entry.Put(syncable::IS_UNAPPLIED_UPDATE, true); - entry.Put(syncable::SERVER_NON_UNIQUE_NAME, "X"); - entry.Put(syncable::SERVER_PARENT_ID, TestIdFactory::MakeServer("Y")); + entry.Put(syncable::IS_UNAPPLIED_UPDATE, false); + entry.Put(syncable::SERVER_NON_UNIQUE_NAME, name); + entry.Put(syncable::SERVER_PARENT_ID, parent_id); entry.Put(syncable::SERVER_IS_DIR, is_folder); entry.Put(syncable::SERVER_IS_DEL, false); - entry.Put(syncable::SERVER_SPECIFICS, default_specifics); - entry.Put(syncable::SERVER_PARENT_ID, parent_id); + entry.Put(syncable::SERVER_SPECIFICS, entry.Get(syncable::SPECIFICS)); return entry.Get(syncable::META_HANDLE); } diff --git a/sync/internal_api/write_node.cc b/sync/internal_api/write_node.cc index 5628571..43d6e50 100644 --- a/sync/internal_api/write_node.cc +++ b/sync/internal_api/write_node.cc @@ -212,12 +212,7 @@ void WriteNode::SetEntitySpecifics( DCHECK_NE(new_specifics_type, UNSPECIFIED); DVLOG(1) << "Writing entity specifics of type " << ModelTypeToString(new_specifics_type); - // GetModelType() can be unspecified if this is the first time this - // node is being initialized (see PutModelType()). Otherwise, it - // should match |new_specifics_type|. - if (GetModelType() != UNSPECIFIED) { - DCHECK_EQ(new_specifics_type, GetModelType()); - } + DCHECK_EQ(new_specifics_type, GetModelType()); // Preserve unknown fields. const sync_pb::EntitySpecifics& old_specifics = entry_->Get(SPECIFICS); @@ -327,22 +322,10 @@ BaseNode::InitByLookupResult WriteNode::InitByTagLookup( return INIT_OK; } -void WriteNode::PutModelType(ModelType model_type) { - // Set an empty specifics of the appropriate datatype. The presence - // of the specific field will identify the model type. - DCHECK(GetModelType() == model_type || - GetModelType() == UNSPECIFIED); // Immutable once set. - - sync_pb::EntitySpecifics specifics; - AddDefaultFieldValue(model_type, &specifics); - SetEntitySpecifics(specifics); -} - // Create a new node with default properties, and bind this WriteNode to it. // Return true on success. -bool WriteNode::InitByCreation(ModelType model_type, - const BaseNode& parent, - const BaseNode* predecessor) { +bool WriteNode::InitBookmarkByCreation(const BaseNode& parent, + const BaseNode* predecessor) { DCHECK(!entry_) << "Init called twice"; // |predecessor| must be a child of |parent| or NULL. if (predecessor && predecessor->GetParentId() != parent.GetId()) { @@ -357,7 +340,8 @@ bool WriteNode::InitByCreation(ModelType model_type, string dummy(kDefaultNameForNewNodes); entry_ = new syncable::MutableEntry(transaction_->GetWrappedWriteTrans(), - syncable::CREATE, parent_id, dummy); + syncable::CREATE, BOOKMARKS, + parent_id, dummy); if (!entry_->good()) return false; @@ -365,8 +349,6 @@ bool WriteNode::InitByCreation(ModelType model_type, // Entries are untitled folders by default. entry_->Put(syncable::IS_DIR, true); - PutModelType(model_type); - // Now set the predecessor, which sets IS_UNSYNCED as necessary. return PutPredecessor(predecessor); } @@ -434,7 +416,8 @@ WriteNode::InitUniqueByCreationResult WriteNode::InitUniqueByCreation( } } else { entry_ = new syncable::MutableEntry(transaction_->GetWrappedWriteTrans(), - syncable::CREATE, parent_id, dummy); + syncable::CREATE, + model_type, parent_id, dummy); if (!entry_->good()) return INIT_FAILED_COULD_NOT_CREATE_ENTRY; @@ -445,9 +428,6 @@ WriteNode::InitUniqueByCreationResult WriteNode::InitUniqueByCreation( // We don't support directory and tag combinations. entry_->Put(syncable::IS_DIR, false); - // Will clear specifics data. - PutModelType(model_type); - // Now set the predecessor, which sets IS_UNSYNCED as necessary. bool success = PutPredecessor(NULL); if (!success) diff --git a/sync/syncable/mutable_entry.cc b/sync/syncable/mutable_entry.cc index 64a23ce..816e951 100644 --- a/sync/syncable/mutable_entry.cc +++ b/sync/syncable/mutable_entry.cc @@ -19,15 +19,9 @@ using std::string; namespace syncer { namespace syncable { -MutableEntry::MutableEntry(WriteTransaction* trans, Create, - const Id& parent_id, const string& name) - : Entry(trans), - write_transaction_(trans) { - Init(trans, parent_id, name); -} - - -void MutableEntry::Init(WriteTransaction* trans, const Id& parent_id, +void MutableEntry::Init(WriteTransaction* trans, + ModelType model_type, + const Id& parent_id, const string& name) { scoped_ptr<EntryKernel> kernel(new EntryKernel); kernel_ = NULL; @@ -43,9 +37,15 @@ void MutableEntry::Init(WriteTransaction* trans, const Id& parent_id, // We match the database defaults here kernel->put(BASE_VERSION, CHANGES_VERSION); kernel->put(SERVER_ORDINAL_IN_PARENT, NodeOrdinal::CreateInitialOrdinal()); - if (!trans->directory()->InsertEntry(trans, kernel.get())) { - return; // We failed inserting, nothing more to do. - } + + // Normally the SPECIFICS setting code is wrapped in logic to deal with + // unknown fields and encryption. Since all we want to do here is ensure that + // GetModelType() returns a correct value from the very beginning, these + // few lines are sufficient. + sync_pb::EntitySpecifics specifics; + AddDefaultFieldValue(model_type, &specifics); + kernel->put(SPECIFICS, specifics); + // Because this entry is new, it was originally deleted. kernel->put(IS_DEL, true); trans->SaveOriginal(kernel.get()); @@ -55,6 +55,17 @@ void MutableEntry::Init(WriteTransaction* trans, const Id& parent_id, kernel_ = kernel.release(); } +MutableEntry::MutableEntry(WriteTransaction* trans, + Create, + ModelType model_type, + const Id& parent_id, + const string& name) + : Entry(trans), + write_transaction_(trans) { + Init(trans, model_type, parent_id, name); + DCHECK(trans->directory()->InsertEntry(trans, kernel_)); +} + MutableEntry::MutableEntry(WriteTransaction* trans, CreateNewUpdateItem, const Id& id) : Entry(trans), write_transaction_(trans) { diff --git a/sync/syncable/mutable_entry.h b/sync/syncable/mutable_entry.h index cf7768a..51cd794 100644 --- a/sync/syncable/mutable_entry.h +++ b/sync/syncable/mutable_entry.h @@ -6,6 +6,7 @@ #define SYNC_SYNCABLE_MUTABLE_ENTRY_H_ #include "sync/base/sync_export.h" +#include "sync/internal_api/public/base/model_type.h" #include "sync/internal_api/public/base/node_ordinal.h" #include "sync/syncable/entry.h" #include "sync/syncable/metahandle_set.h" @@ -28,12 +29,12 @@ enum CreateNewUpdateItem { // A mutable meta entry. Changes get committed to the database when the // WriteTransaction is destroyed. class SYNC_EXPORT_PRIVATE MutableEntry : public Entry { - void Init(WriteTransaction* trans, const Id& parent_id, - const std::string& name); + void Init(WriteTransaction* trans, ModelType model_type, + const Id& parent_id, const std::string& name); public: - MutableEntry(WriteTransaction* trans, Create, const Id& parent_id, - const std::string& name); + MutableEntry(WriteTransaction* trans, Create, ModelType model_type, + const Id& parent_id, const std::string& name); MutableEntry(WriteTransaction* trans, CreateNewUpdateItem, const Id& id); MutableEntry(WriteTransaction* trans, GetByHandle, int64); MutableEntry(WriteTransaction* trans, GetById, const Id&); diff --git a/sync/syncable/syncable_unittest.cc b/sync/syncable/syncable_unittest.cc index 7c72ed4b..444e9e3 100644 --- a/sync/syncable/syncable_unittest.cc +++ b/sync/syncable/syncable_unittest.cc @@ -146,7 +146,7 @@ TEST_F(SyncableGeneralTest, General) { // Test creating a new meta entry. { WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), name); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(BASE_VERSION, 1); @@ -238,7 +238,7 @@ TEST_F(SyncableGeneralTest, ChildrenOps) { { WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), name); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(BASE_VERSION, 1); @@ -300,7 +300,7 @@ TEST_F(SyncableGeneralTest, ClientIndexRebuildsProperly) { NullTransactionObserver())); { WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), name); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), name); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(BASE_VERSION, 1); @@ -346,7 +346,7 @@ TEST_F(SyncableGeneralTest, ClientIndexRebuildsDeletedProperly) { NullTransactionObserver())); { WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), "deleted"); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "deleted"); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(BASE_VERSION, 1); @@ -401,7 +401,7 @@ TEST_F(SyncableGeneralTest, ToValue) { // Test creating a new meta entry. { WriteTransaction wtrans(FROM_HERE, UNITTEST, &dir); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), "new"); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), "new"); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(BASE_VERSION, 1); @@ -409,7 +409,7 @@ TEST_F(SyncableGeneralTest, ToValue) { scoped_ptr<DictionaryValue> value(me.ToValue(NULL)); ExpectDictBooleanValue(true, *value, "good"); EXPECT_TRUE(value->HasKey("kernel")); - ExpectDictStringValue("Unspecified", *value, "modelType"); + ExpectDictStringValue("Bookmarks", *value, "modelType"); ExpectDictBooleanValue(true, *value, "existsOnClientBecauseNameIsNonEmpty"); ExpectDictBooleanValue(false, *value, "isRoot"); } @@ -504,7 +504,7 @@ class SyncableDirectoryTest : public testing::Test { } void CreateEntry(const std::string& entryname, Id id) { WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), entryname); + MutableEntry me(&wtrans, CREATE, BOOKMARKS, wtrans.root_id(), entryname); ASSERT_TRUE(me.good()); me.Put(ID, id); me.Put(IS_UNSYNCED, true); @@ -544,7 +544,7 @@ TEST_F(SyncableDirectoryTest, TakeSnapshotGetsMetahandlesToPurge) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); for (int i = 0; i < metas_to_create; i++) { - MutableEntry e(&trans, CREATE, trans.root_id(), "foo"); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); e.Put(IS_UNSYNCED, true); sync_pb::EntitySpecifics specs; if (i % 2 == 0) { @@ -585,7 +585,7 @@ TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); for (int i = 0; i < metahandles_to_create; i++) { - MutableEntry e(&trans, CREATE, trans.root_id(), "foo"); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); expected_dirty_metahandles.push_back(e.Get(META_HANDLE)); e.Put(IS_UNSYNCED, true); } @@ -616,7 +616,7 @@ TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { e1.Put(IS_DIR, true); e1.Put(IS_UNSYNCED, true); // Add new entries - MutableEntry e2(&trans, CREATE, trans.root_id(), "bar"); + MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar"); e2.Put(IS_UNSYNCED, true); new_dirty_metahandles.push_back(e2.Get(META_HANDLE)); } @@ -648,7 +648,7 @@ TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); for (int i = 0; i < metahandles_to_create; i++) { - MutableEntry e(&trans, CREATE, trans.root_id(), "foo"); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); expected_dirty_metahandles.push_back(e.Get(META_HANDLE)); e.Put(IS_UNSYNCED, true); } @@ -667,7 +667,7 @@ TEST_F(SyncableDirectoryTest, TakeSnapshotGetsOnlyDirtyHandlesTest) { e1.Put(IS_DIR, true); e1.Put(IS_UNSYNCED, true); // Add new entries - MutableEntry e2(&trans, CREATE, trans.root_id(), "bar"); + MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), "bar"); e2.Put(IS_UNSYNCED, true); new_dirty_metahandles.push_back(e2.Get(META_HANDLE)); } @@ -871,13 +871,13 @@ TEST_F(SyncableDirectoryTest, TestBasicLookupValidID) { TEST_F(SyncableDirectoryTest, TestDelete) { std::string name = "peanut butter jelly time"; WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry e1(&trans, CREATE, trans.root_id(), name); + MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), name); ASSERT_TRUE(e1.good()); ASSERT_TRUE(e1.Put(IS_DEL, true)); - MutableEntry e2(&trans, CREATE, trans.root_id(), name); + MutableEntry e2(&trans, CREATE, BOOKMARKS, trans.root_id(), name); ASSERT_TRUE(e2.good()); ASSERT_TRUE(e2.Put(IS_DEL, true)); - MutableEntry e3(&trans, CREATE, trans.root_id(), name); + MutableEntry e3(&trans, CREATE, BOOKMARKS, trans.root_id(), name); ASSERT_TRUE(e3.good()); ASSERT_TRUE(e3.Put(IS_DEL, true)); @@ -899,14 +899,14 @@ TEST_F(SyncableDirectoryTest, TestGetUnsynced) { dir_->GetUnsyncedMetaHandles(&trans, &handles); ASSERT_TRUE(0 == handles.size()); - MutableEntry e1(&trans, CREATE, trans.root_id(), "abba"); + MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba"); ASSERT_TRUE(e1.good()); handle1 = e1.Get(META_HANDLE); e1.Put(BASE_VERSION, 1); e1.Put(IS_DIR, true); e1.Put(ID, TestIdFactory::FromNumber(101)); - MutableEntry e2(&trans, CREATE, e1.Get(ID), "bread"); + MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.Get(ID), "bread"); ASSERT_TRUE(e2.good()); handle2 = e2.Get(META_HANDLE); e2.Put(BASE_VERSION, 1); @@ -971,7 +971,7 @@ TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) { dir_->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); ASSERT_TRUE(0 == handles.size()); - MutableEntry e1(&trans, CREATE, trans.root_id(), "abba"); + MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "abba"); ASSERT_TRUE(e1.good()); handle1 = e1.Get(META_HANDLE); e1.Put(IS_UNAPPLIED_UPDATE, false); @@ -979,7 +979,7 @@ TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) { e1.Put(ID, TestIdFactory::FromNumber(101)); e1.Put(IS_DIR, true); - MutableEntry e2(&trans, CREATE, e1.Get(ID), "bread"); + MutableEntry e2(&trans, CREATE, BOOKMARKS, e1.Get(ID), "bread"); ASSERT_TRUE(e2.good()); handle2 = e2.Get(META_HANDLE); e2.Put(IS_UNAPPLIED_UPDATE, false); @@ -1040,22 +1040,22 @@ TEST_F(SyncableDirectoryTest, DeleteBug_531383) { int64 grandchild_handle; { WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry parent(&wtrans, CREATE, id_factory.root(), "Bob"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob"); ASSERT_TRUE(parent.good()); parent.Put(IS_DIR, true); parent.Put(ID, id_factory.NewServerId()); parent.Put(BASE_VERSION, 1); - MutableEntry child(&wtrans, CREATE, parent.Get(ID), "Bob"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "Bob"); ASSERT_TRUE(child.good()); child.Put(IS_DIR, true); child.Put(ID, id_factory.NewServerId()); child.Put(BASE_VERSION, 1); - MutableEntry grandchild(&wtrans, CREATE, child.Get(ID), "Bob"); + MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.Get(ID), "Bob"); ASSERT_TRUE(grandchild.good()); grandchild.Put(ID, id_factory.NewServerId()); grandchild.Put(BASE_VERSION, 1); ASSERT_TRUE(grandchild.Put(IS_DEL, true)); - MutableEntry twin(&wtrans, CREATE, child.Get(ID), "Bob"); + MutableEntry twin(&wtrans, CREATE, BOOKMARKS, child.Get(ID), "Bob"); ASSERT_TRUE(twin.good()); ASSERT_TRUE(twin.Put(IS_DEL, true)); ASSERT_TRUE(grandchild.Put(IS_DEL, false)); @@ -1079,32 +1079,32 @@ TEST_F(SyncableDirectoryTest, TestIsLegalNewParent) { WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get()); Entry root(&wtrans, GET_BY_ID, id_factory.root()); ASSERT_TRUE(root.good()); - MutableEntry parent(&wtrans, CREATE, root.Get(ID), "Bob"); + MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root.Get(ID), "Bob"); ASSERT_TRUE(parent.good()); parent.Put(IS_DIR, true); parent.Put(ID, id_factory.NewServerId()); parent.Put(BASE_VERSION, 1); - MutableEntry child(&wtrans, CREATE, parent.Get(ID), "Bob"); + MutableEntry child(&wtrans, CREATE, BOOKMARKS, parent.Get(ID), "Bob"); ASSERT_TRUE(child.good()); child.Put(IS_DIR, true); child.Put(ID, id_factory.NewServerId()); child.Put(BASE_VERSION, 1); - MutableEntry grandchild(&wtrans, CREATE, child.Get(ID), "Bob"); + MutableEntry grandchild(&wtrans, CREATE, BOOKMARKS, child.Get(ID), "Bob"); ASSERT_TRUE(grandchild.good()); grandchild.Put(ID, id_factory.NewServerId()); grandchild.Put(BASE_VERSION, 1); - MutableEntry parent2(&wtrans, CREATE, root.Get(ID), "Pete"); + MutableEntry parent2(&wtrans, CREATE, BOOKMARKS, root.Get(ID), "Pete"); ASSERT_TRUE(parent2.good()); parent2.Put(IS_DIR, true); parent2.Put(ID, id_factory.NewServerId()); parent2.Put(BASE_VERSION, 1); - MutableEntry child2(&wtrans, CREATE, parent2.Get(ID), "Pete"); + MutableEntry child2(&wtrans, CREATE, BOOKMARKS, parent2.Get(ID), "Pete"); ASSERT_TRUE(child2.good()); child2.Put(IS_DIR, true); child2.Put(ID, id_factory.NewServerId()); child2.Put(BASE_VERSION, 1); - MutableEntry grandchild2(&wtrans, CREATE, child2.Get(ID), "Pete"); + MutableEntry grandchild2(&wtrans, CREATE, BOOKMARKS, child2.Get(ID), "Pete"); ASSERT_TRUE(grandchild2.good()); grandchild2.Put(ID, id_factory.NewServerId()); grandchild2.Put(BASE_VERSION, 1); @@ -1136,13 +1136,13 @@ TEST_F(SyncableDirectoryTest, TestEntryIsInFolder) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry folder(&trans, CREATE, trans.root_id(), "folder"); + MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "folder"); ASSERT_TRUE(folder.good()); EXPECT_TRUE(folder.Put(IS_DIR, true)); EXPECT_TRUE(folder.Put(IS_UNSYNCED, true)); folder_id = folder.Get(ID); - MutableEntry entry(&trans, CREATE, folder.Get(ID), entry_name); + MutableEntry entry(&trans, CREATE, BOOKMARKS, folder.Get(ID), entry_name); ASSERT_TRUE(entry.good()); entry_handle = entry.Get(META_HANDLE); entry.Put(IS_UNSYNCED, true); @@ -1167,15 +1167,15 @@ TEST_F(SyncableDirectoryTest, TestParentIdIndexUpdate) { std::string child_name = "child"; WriteTransaction wt(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry parent_folder(&wt, CREATE, wt.root_id(), "folder1"); + MutableEntry parent_folder(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder1"); parent_folder.Put(IS_UNSYNCED, true); EXPECT_TRUE(parent_folder.Put(IS_DIR, true)); - MutableEntry parent_folder2(&wt, CREATE, wt.root_id(), "folder2"); + MutableEntry parent_folder2(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder2"); parent_folder2.Put(IS_UNSYNCED, true); EXPECT_TRUE(parent_folder2.Put(IS_DIR, true)); - MutableEntry child(&wt, CREATE, parent_folder.Get(ID), child_name); + MutableEntry child(&wt, CREATE, BOOKMARKS, parent_folder.Get(ID), child_name); EXPECT_TRUE(child.Put(IS_DIR, true)); child.Put(IS_UNSYNCED, true); @@ -1196,7 +1196,7 @@ TEST_F(SyncableDirectoryTest, TestNoReindexDeletedItems) { std::string new_name = "new_name"; WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry folder(&trans, CREATE, trans.root_id(), folder_name); + MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), folder_name); ASSERT_TRUE(folder.good()); ASSERT_TRUE(folder.Put(IS_DIR, true)); ASSERT_TRUE(folder.Put(IS_DEL, true)); @@ -1214,7 +1214,7 @@ TEST_F(SyncableDirectoryTest, TestNoReindexDeletedItems) { TEST_F(SyncableDirectoryTest, TestCaseChangeRename) { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry folder(&trans, CREATE, trans.root_id(), "CaseChange"); + MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "CaseChange"); ASSERT_TRUE(folder.good()); EXPECT_TRUE(folder.Put(PARENT_ID, trans.root_id())); EXPECT_TRUE(folder.Put(NON_UNIQUE_NAME, "CASECHANGE")); @@ -1240,7 +1240,7 @@ TEST_F(SyncableDirectoryTest, GetModelType) { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry folder(&trans, CREATE, trans.root_id(), "Folder"); + MutableEntry folder(&trans, CREATE, BOOKMARKS, trans.root_id(), "Folder"); ASSERT_TRUE(folder.good()); folder.Put(ID, id_factory.NewServerId()); folder.Put(SPECIFICS, specifics); @@ -1249,7 +1249,7 @@ TEST_F(SyncableDirectoryTest, GetModelType) { folder.Put(IS_DEL, false); ASSERT_EQ(datatype, folder.GetModelType()); - MutableEntry item(&trans, CREATE, trans.root_id(), "Item"); + MutableEntry item(&trans, CREATE, BOOKMARKS, trans.root_id(), "Item"); ASSERT_TRUE(item.good()); item.Put(ID, id_factory.NewServerId()); item.Put(SPECIFICS, specifics); @@ -1260,7 +1260,8 @@ TEST_F(SyncableDirectoryTest, GetModelType) { // It's critical that deletion records retain their datatype, so that // they can be dispatched to the appropriate change processor. - MutableEntry deleted_item(&trans, CREATE, trans.root_id(), "Deleted Item"); + MutableEntry deleted_item( + &trans, CREATE, BOOKMARKS, trans.root_id(), "Deleted Item"); ASSERT_TRUE(item.good()); deleted_item.Put(ID, id_factory.NewServerId()); deleted_item.Put(SPECIFICS, specifics); @@ -1315,11 +1316,11 @@ TEST_F(SyncableDirectoryTest, ChangeEntryIDAndUpdateChildren_ParentAndChild) { // Create two client-side items, a parent and child. WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry parent(&trans, CREATE, id_factory.root(), "parent"); + MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent"); parent.Put(IS_DIR, true); parent.Put(IS_UNSYNCED, true); - MutableEntry child(&trans, CREATE, parent.Get(ID), "child"); + MutableEntry child(&trans, CREATE, BOOKMARKS, parent.Get(ID), "child"); child.Put(IS_UNSYNCED, true); orig_parent_id = parent.Get(ID); @@ -1363,11 +1364,11 @@ TEST_F(SyncableDirectoryTest, // Create two client-side items, a parent and child. WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry parent(&trans, CREATE, id_factory.root(), "parent"); + MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent"); parent.Put(IS_DIR, true); parent.Put(IS_UNSYNCED, true); - MutableEntry child(&trans, CREATE, parent.Get(ID), "child"); + MutableEntry child(&trans, CREATE, BOOKMARKS, parent.Get(ID), "child"); child.Put(IS_UNSYNCED, true); orig_parent_id = parent.Get(ID); @@ -1446,7 +1447,7 @@ TEST_F(SyncableDirectoryTest, OldClientLeftUnsyncedDeletedLocalItem) { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); // Create an uncommitted tombstone entry. - MutableEntry server_knows(&trans, CREATE, id_factory.root(), + MutableEntry server_knows(&trans, CREATE, BOOKMARKS, id_factory.root(), "server_knows"); server_knows.Put(ID, server_knows_id); server_knows.Put(IS_UNSYNCED, true); @@ -1455,7 +1456,8 @@ TEST_F(SyncableDirectoryTest, OldClientLeftUnsyncedDeletedLocalItem) { server_knows.Put(SERVER_VERSION, 4); // Create a valid update entry. - MutableEntry not_is_del(&trans, CREATE, id_factory.root(), "not_is_del"); + MutableEntry not_is_del( + &trans, CREATE, BOOKMARKS, id_factory.root(), "not_is_del"); not_is_del.Put(ID, not_is_del_id); not_is_del.Put(IS_DEL, false); not_is_del.Put(IS_UNSYNCED, true); @@ -1466,7 +1468,7 @@ TEST_F(SyncableDirectoryTest, OldClientLeftUnsyncedDeletedLocalItem) { // New clients should never put entries into this state. We work around // this by setting IS_DEL before setting IS_UNSYNCED, something which the // client should never do in practice. - MutableEntry zombie(&trans, CREATE, id_factory.root(), "zombie"); + MutableEntry zombie(&trans, CREATE, BOOKMARKS, id_factory.root(), "zombie"); zombie.Put(ID, zombie_id); zombie.Put(IS_DEL, true); zombie.Put(IS_UNSYNCED, true); @@ -1502,11 +1504,11 @@ TEST_F(SyncableDirectoryTest, OrdinalWithNullSurvivesSaveAndReload) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry parent(&trans, CREATE, id_factory.root(), "parent"); + MutableEntry parent(&trans, CREATE, BOOKMARKS, id_factory.root(), "parent"); parent.Put(IS_DIR, true); parent.Put(IS_UNSYNCED, true); - MutableEntry child(&trans, CREATE, parent.Get(ID), "child"); + MutableEntry child(&trans, CREATE, BOOKMARKS, parent.Get(ID), "child"); child.Put(IS_UNSYNCED, true); child.Put(SERVER_ORDINAL_IN_PARENT, null_ord); @@ -1690,9 +1692,8 @@ TEST_F(OnDiskSyncableDirectoryTest, TestPurgeEntriesWithTypeIn) { // Add more nodes for this type. Technically, they should be placed under // the proper type root nodes but the assertions in this test won't notice // if their parent isn't quite right. - MutableEntry item1(&trans, CREATE, trans.root_id(), "Item"); + MutableEntry item1(&trans, CREATE, BOOKMARKS, trans.root_id(), "Item"); ASSERT_TRUE(item1.good()); - item1.Put(SPECIFICS, bookmark_specs); item1.Put(SERVER_SPECIFICS, bookmark_specs); item1.Put(IS_UNSYNCED, true); @@ -1702,7 +1703,8 @@ TEST_F(OnDiskSyncableDirectoryTest, TestPurgeEntriesWithTypeIn) { item2.Put(SERVER_SPECIFICS, bookmark_specs); item2.Put(IS_UNAPPLIED_UPDATE, true); - MutableEntry item3(&trans, CREATE, trans.root_id(), "Item"); + MutableEntry item3(&trans, CREATE, PREFERENCES, + trans.root_id(), "Item"); ASSERT_TRUE(item3.good()); item3.Put(SPECIFICS, preference_specs); item3.Put(SERVER_SPECIFICS, preference_specs); @@ -1714,7 +1716,8 @@ TEST_F(OnDiskSyncableDirectoryTest, TestPurgeEntriesWithTypeIn) { item4.Put(SERVER_SPECIFICS, preference_specs); item4.Put(IS_UNAPPLIED_UPDATE, true); - MutableEntry item5(&trans, CREATE, trans.root_id(), "Item"); + MutableEntry item5(&trans, CREATE, AUTOFILL, + trans.root_id(), "Item"); ASSERT_TRUE(item5.good()); item5.Put(SPECIFICS, autofill_specs); item5.Put(SERVER_SPECIFICS, autofill_specs); @@ -1791,7 +1794,8 @@ TEST_F(OnDiskSyncableDirectoryTest, { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry create(&trans, CREATE, trans.root_id(), create_name); + MutableEntry create( + &trans, CREATE, BOOKMARKS, trans.root_id(), create_name); MutableEntry update(&trans, CREATE_NEW_UPDATE_ITEM, update_id); create.Put(IS_UNSYNCED, true); update.Put(IS_UNAPPLIED_UPDATE, true); @@ -1891,7 +1895,7 @@ TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailure) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry e1(&trans, CREATE, trans.root_id(), "aguilera"); + MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); ASSERT_TRUE(e1.good()); EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); handle1 = e1.Get(META_HANDLE); @@ -1937,7 +1941,8 @@ TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailure) { EXPECT_TRUE(IsInDirtyMetahandles(handle1)); // New item. - MutableEntry kids_on_block(&trans, CREATE, trans.root_id(), "kids"); + MutableEntry kids_on_block( + &trans, CREATE, BOOKMARKS, trans.root_id(), "kids"); ASSERT_TRUE(kids_on_block.good()); handle2 = kids_on_block.Get(META_HANDLE); kids_on_block.Put(BASE_VERSION, 1); @@ -1972,7 +1977,7 @@ TEST_F(OnDiskSyncableDirectoryTest, TestSaveChangesFailureWithPurge) { { WriteTransaction trans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry e1(&trans, CREATE, trans.root_id(), "aguilera"); + MutableEntry e1(&trans, CREATE, BOOKMARKS, trans.root_id(), "aguilera"); ASSERT_TRUE(e1.good()); EXPECT_TRUE(e1.GetKernelCopy().is_dirty()); handle1 = e1.Get(META_HANDLE); @@ -2116,7 +2121,7 @@ class StressTransactionsDelegate : public base::PlatformThread::Delegate { base::StringPrintf("%d.%d", thread_number_, entry_count++); path_name.assign(unique_name.begin(), unique_name.end()); WriteTransaction trans(FROM_HERE, UNITTEST, dir_); - MutableEntry e(&trans, CREATE, trans.root_id(), path_name); + MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), path_name); CHECK(e.good()); base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds( rand() % 20)); @@ -2173,13 +2178,9 @@ class SyncableClientTagTest : public SyncableDirectoryTest { SyncableClientTagTest() : test_name_("test_name"), test_tag_("dietcoke") {} bool CreateWithDefaultTag(Id id, bool deleted) { - return CreateWithTag(test_tag_, id, deleted); - } - - // Attempt to create an entry with a default tag. - bool CreateWithTag(const char* tag, Id id, bool deleted) { WriteTransaction wtrans(FROM_HERE, UNITTEST, dir_.get()); - MutableEntry me(&wtrans, CREATE, wtrans.root_id(), test_name_); + MutableEntry me(&wtrans, CREATE, PREFERENCES, + wtrans.root_id(), test_name_); CHECK(me.good()); me.Put(ID, id); if (id.ServerKnows()) { @@ -2188,7 +2189,7 @@ class SyncableClientTagTest : public SyncableDirectoryTest { me.Put(IS_UNSYNCED, true); me.Put(IS_DEL, deleted); me.Put(IS_DIR, false); - return me.Put(UNIQUE_CLIENT_TAG, tag); + return me.Put(UNIQUE_CLIENT_TAG, test_tag_); } // Verify an entry exists with the default tag. diff --git a/sync/test/engine/test_syncable_utils.cc b/sync/test/engine/test_syncable_utils.cc index 77be4c3..389a16a 100644 --- a/sync/test/engine/test_syncable_utils.cc +++ b/sync/test/engine/test_syncable_utils.cc @@ -71,6 +71,7 @@ void CreateTypeRoot(WriteTransaction* trans, std::string tag_name = syncer::ModelTypeToRootTag(type); syncable::MutableEntry node(trans, syncable::CREATE, + type, TestIdFactory::root(), tag_name); DCHECK(node.good()); |