OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/sync/syncable/model_neutral_mutable_entry.h" | 5 #include "components/sync/syncable/model_neutral_mutable_entry.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> |
8 | 9 |
9 #include "components/sync/base/hash_util.h" | 10 #include "components/sync/base/hash_util.h" |
10 #include "components/sync/base/unique_position.h" | 11 #include "components/sync/base/unique_position.h" |
11 #include "components/sync/syncable/directory.h" | 12 #include "components/sync/syncable/directory.h" |
12 #include "components/sync/syncable/scoped_kernel_lock.h" | 13 #include "components/sync/syncable/scoped_kernel_lock.h" |
13 #include "components/sync/syncable/syncable_changes_version.h" | 14 #include "components/sync/syncable/syncable_changes_version.h" |
14 #include "components/sync/syncable/syncable_util.h" | 15 #include "components/sync/syncable/syncable_util.h" |
15 #include "components/sync/syncable/syncable_write_transaction.h" | 16 #include "components/sync/syncable/syncable_write_transaction.h" |
16 | 17 |
17 using std::string; | 18 using std::string; |
(...skipping 12 matching lines...) Expand all Loading... |
30 return; // already have an item with this ID. | 31 return; // already have an item with this ID. |
31 } | 32 } |
32 std::unique_ptr<EntryKernel> kernel(new EntryKernel()); | 33 std::unique_ptr<EntryKernel> kernel(new EntryKernel()); |
33 | 34 |
34 kernel->put(ID, id); | 35 kernel->put(ID, id); |
35 kernel->put(META_HANDLE, trans->directory()->NextMetahandle()); | 36 kernel->put(META_HANDLE, trans->directory()->NextMetahandle()); |
36 kernel->mark_dirty(&trans->directory()->kernel()->dirty_metahandles); | 37 kernel->mark_dirty(&trans->directory()->kernel()->dirty_metahandles); |
37 kernel->put(IS_DEL, true); | 38 kernel->put(IS_DEL, true); |
38 // We match the database defaults here | 39 // We match the database defaults here |
39 kernel->put(BASE_VERSION, CHANGES_VERSION); | 40 kernel->put(BASE_VERSION, CHANGES_VERSION); |
40 if (!trans->directory()->InsertEntry(trans, kernel.get())) { | 41 kernel_ = kernel.get(); |
| 42 if (!trans->directory()->InsertEntry(trans, std::move(kernel))) { |
| 43 kernel_ = nullptr; |
41 return; // Failed inserting. | 44 return; // Failed inserting. |
42 } | 45 } |
43 trans->TrackChangesTo(kernel.get()); | 46 trans->TrackChangesTo(kernel_); |
44 | |
45 kernel_ = kernel.release(); | |
46 } | 47 } |
47 | 48 |
48 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, | 49 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, |
49 CreateNewTypeRoot, | 50 CreateNewTypeRoot, |
50 ModelType type) | 51 ModelType type) |
51 : Entry(trans), base_write_transaction_(trans) { | 52 : Entry(trans), base_write_transaction_(trans) { |
52 // We allow NIGORI because we allow SyncEncryptionHandler to restore a nigori | 53 // We allow NIGORI because we allow SyncEncryptionHandler to restore a nigori |
53 // across Directory instances (see SyncEncryptionHandler::RestoreNigori). | 54 // across Directory instances (see SyncEncryptionHandler::RestoreNigori). |
54 if (type != NIGORI) | 55 if (type != NIGORI) |
55 DCHECK(IsTypeWithClientGeneratedRoot(type)); | 56 DCHECK(IsTypeWithClientGeneratedRoot(type)); |
(...skipping 11 matching lines...) Expand all Loading... |
67 | 68 |
68 kernel->put(ID, | 69 kernel->put(ID, |
69 syncable::Id::CreateFromClientString(ModelTypeToString(type))); | 70 syncable::Id::CreateFromClientString(ModelTypeToString(type))); |
70 kernel->put(META_HANDLE, trans->directory()->NextMetahandle()); | 71 kernel->put(META_HANDLE, trans->directory()->NextMetahandle()); |
71 kernel->put(PARENT_ID, syncable::Id::GetRoot()); | 72 kernel->put(PARENT_ID, syncable::Id::GetRoot()); |
72 kernel->put(BASE_VERSION, CHANGES_VERSION); | 73 kernel->put(BASE_VERSION, CHANGES_VERSION); |
73 kernel->put(NON_UNIQUE_NAME, ModelTypeToString(type)); | 74 kernel->put(NON_UNIQUE_NAME, ModelTypeToString(type)); |
74 kernel->put(IS_DIR, true); | 75 kernel->put(IS_DIR, true); |
75 | 76 |
76 kernel->mark_dirty(&trans->directory()->kernel()->dirty_metahandles); | 77 kernel->mark_dirty(&trans->directory()->kernel()->dirty_metahandles); |
| 78 kernel_ = kernel.get(); |
77 | 79 |
78 if (!trans->directory()->InsertEntry(trans, kernel.get())) { | 80 if (!trans->directory()->InsertEntry(trans, std::move(kernel))) { |
| 81 kernel_ = nullptr; |
79 return; // Failed inserting. | 82 return; // Failed inserting. |
80 } | 83 } |
81 | 84 trans->TrackChangesTo(kernel_); |
82 trans->TrackChangesTo(kernel.get()); | |
83 | |
84 kernel_ = kernel.release(); | |
85 } | 85 } |
86 | 86 |
87 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, | 87 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, |
88 GetById, | 88 GetById, |
89 const Id& id) | 89 const Id& id) |
90 : Entry(trans, GET_BY_ID, id), base_write_transaction_(trans) {} | 90 : Entry(trans, GET_BY_ID, id), base_write_transaction_(trans) {} |
91 | 91 |
92 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, | 92 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans, |
93 GetByHandle, | 93 GetByHandle, |
94 int64_t metahandle) | 94 int64_t metahandle) |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans) | 453 ModelNeutralMutableEntry::ModelNeutralMutableEntry(BaseWriteTransaction* trans) |
454 : Entry(trans), base_write_transaction_(trans) {} | 454 : Entry(trans), base_write_transaction_(trans) {} |
455 | 455 |
456 void ModelNeutralMutableEntry::MarkDirty() { | 456 void ModelNeutralMutableEntry::MarkDirty() { |
457 kernel_->mark_dirty(&dir()->kernel()->dirty_metahandles); | 457 kernel_->mark_dirty(&dir()->kernel()->dirty_metahandles); |
458 } | 458 } |
459 | 459 |
460 } // namespace syncable | 460 } // namespace syncable |
461 | 461 |
462 } // namespace syncer | 462 } // namespace syncer |
OLD | NEW |