Index: sync/syncable/model_neutral_mutable_entry.cc |
diff --git a/sync/syncable/model_neutral_mutable_entry.cc b/sync/syncable/model_neutral_mutable_entry.cc |
index c7f1e3d6da598dfddf05351dc8d6837c7c01c9a7..77c442acfde7ff7119cfc5366c3057c9a57efb73 100644 |
--- a/sync/syncable/model_neutral_mutable_entry.cc |
+++ b/sync/syncable/model_neutral_mutable_entry.cc |
@@ -44,6 +44,42 @@ ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, |
kernel_ = kernel.release(); |
} |
+ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, |
+ CreateNewTypeRoot, |
+ ModelType type) |
+ : Entry(trans), base_write_transaction_(trans) { |
+ DCHECK(!IsTypeWithServerGeneratedRoot(type)); |
+ Entry same_type_root(trans, GET_TYPE_ROOT, type); |
+ kernel_ = NULL; |
+ if (same_type_root.good()) { |
+ return; // already have a type root for the given type |
+ } |
+ |
+ scoped_ptr<EntryKernel> kernel(new EntryKernel()); |
+ |
+ sync_pb::EntitySpecifics specifics; |
+ AddDefaultFieldValue(type, &specifics); |
+ kernel->put(SPECIFICS, specifics); |
+ |
+ kernel->put(ID, |
+ syncable::Id::CreateFromClientString(ModelTypeToString(type))); |
+ kernel->put(META_HANDLE, trans->directory()->NextMetahandle()); |
+ kernel->put(PARENT_ID, syncable::Id::GetRoot()); |
+ kernel->put(BASE_VERSION, CHANGES_VERSION); |
+ kernel->put(NON_UNIQUE_NAME, ModelTypeToString(type)); |
+ kernel->put(IS_DIR, true); |
+ |
+ kernel->mark_dirty(&trans->directory()->kernel_->dirty_metahandles); |
+ |
+ if (!trans->directory()->InsertEntry(trans, kernel.get())) { |
+ return; // Failed inserting. |
+ } |
+ |
+ trans->TrackChangesTo(kernel.get()); |
+ |
+ kernel_ = kernel.release(); |
+} |
+ |
ModelNeutralMutableEntry::ModelNeutralMutableEntry( |
BaseWriteTransaction* trans, GetById, const Id& id) |
: Entry(trans, GET_BY_ID, id), base_write_transaction_(trans) { |