| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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 "sync/syncable/mutable_entry.h" | 5 #include "components/sync/syncable/mutable_entry.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| 11 #include "sync/internal_api/public/base/unique_position.h" | 11 #include "components/sync/base/unique_position.h" |
| 12 #include "sync/syncable/directory.h" | 12 #include "components/sync/syncable/directory.h" |
| 13 #include "sync/syncable/scoped_kernel_lock.h" | 13 #include "components/sync/syncable/scoped_kernel_lock.h" |
| 14 #include "sync/syncable/scoped_parent_child_index_updater.h" | 14 #include "components/sync/syncable/scoped_parent_child_index_updater.h" |
| 15 #include "sync/syncable/syncable-inl.h" | 15 #include "components/sync/syncable/syncable-inl.h" |
| 16 #include "sync/syncable/syncable_changes_version.h" | 16 #include "components/sync/syncable/syncable_changes_version.h" |
| 17 #include "sync/syncable/syncable_util.h" | 17 #include "components/sync/syncable/syncable_util.h" |
| 18 #include "sync/syncable/syncable_write_transaction.h" | 18 #include "components/sync/syncable/syncable_write_transaction.h" |
| 19 | 19 |
| 20 using std::string; | 20 using std::string; |
| 21 | 21 |
| 22 namespace syncer { | 22 namespace syncer { |
| 23 namespace syncable { | 23 namespace syncable { |
| 24 | 24 |
| 25 void MutableEntry::Init(WriteTransaction* trans, | 25 void MutableEntry::Init(WriteTransaction* trans, |
| 26 ModelType model_type, | 26 ModelType model_type, |
| 27 const Id& parent_id, | 27 const Id& parent_id, |
| 28 const string& name) { | 28 const string& name) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 89 kernel_->put(UNIQUE_BOOKMARK_TAG, unique_tag); | 89 kernel_->put(UNIQUE_BOOKMARK_TAG, unique_tag); |
| 90 kernel_->put(UNIQUE_POSITION, UniquePosition::InitialPosition(unique_tag)); | 90 kernel_->put(UNIQUE_POSITION, UniquePosition::InitialPosition(unique_tag)); |
| 91 } else { | 91 } else { |
| 92 DCHECK(!ShouldMaintainPosition()); | 92 DCHECK(!ShouldMaintainPosition()); |
| 93 } | 93 } |
| 94 | 94 |
| 95 bool result = trans->directory()->InsertEntry(trans, kernel_); | 95 bool result = trans->directory()->InsertEntry(trans, kernel_); |
| 96 DCHECK(result); | 96 DCHECK(result); |
| 97 } | 97 } |
| 98 | 98 |
| 99 MutableEntry::MutableEntry(WriteTransaction* trans, CreateNewUpdateItem, | 99 MutableEntry::MutableEntry(WriteTransaction* trans, |
| 100 CreateNewUpdateItem, |
| 100 const Id& id) | 101 const Id& id) |
| 101 : ModelNeutralMutableEntry(trans, CREATE_NEW_UPDATE_ITEM, id), | 102 : ModelNeutralMutableEntry(trans, CREATE_NEW_UPDATE_ITEM, id), |
| 102 write_transaction_(trans) {} | 103 write_transaction_(trans) {} |
| 103 | 104 |
| 104 MutableEntry::MutableEntry(WriteTransaction* trans, GetById, const Id& id) | 105 MutableEntry::MutableEntry(WriteTransaction* trans, GetById, const Id& id) |
| 105 : ModelNeutralMutableEntry(trans, GET_BY_ID, id), | 106 : ModelNeutralMutableEntry(trans, GET_BY_ID, id), |
| 106 write_transaction_(trans) { | 107 write_transaction_(trans) {} |
| 107 } | |
| 108 | 108 |
| 109 MutableEntry::MutableEntry(WriteTransaction* trans, | 109 MutableEntry::MutableEntry(WriteTransaction* trans, |
| 110 GetByHandle, | 110 GetByHandle, |
| 111 int64_t metahandle) | 111 int64_t metahandle) |
| 112 : ModelNeutralMutableEntry(trans, GET_BY_HANDLE, metahandle), | 112 : ModelNeutralMutableEntry(trans, GET_BY_HANDLE, metahandle), |
| 113 write_transaction_(trans) {} | 113 write_transaction_(trans) {} |
| 114 | 114 |
| 115 MutableEntry::MutableEntry(WriteTransaction* trans, GetByClientTag, | 115 MutableEntry::MutableEntry(WriteTransaction* trans, |
| 116 GetByClientTag, |
| 116 const std::string& tag) | 117 const std::string& tag) |
| 117 : ModelNeutralMutableEntry(trans, GET_BY_CLIENT_TAG, tag), | 118 : ModelNeutralMutableEntry(trans, GET_BY_CLIENT_TAG, tag), |
| 118 write_transaction_(trans) { | 119 write_transaction_(trans) {} |
| 119 } | |
| 120 | 120 |
| 121 MutableEntry::MutableEntry(WriteTransaction* trans, GetTypeRoot, ModelType type) | 121 MutableEntry::MutableEntry(WriteTransaction* trans, GetTypeRoot, ModelType type) |
| 122 : ModelNeutralMutableEntry(trans, GET_TYPE_ROOT, type), | 122 : ModelNeutralMutableEntry(trans, GET_TYPE_ROOT, type), |
| 123 write_transaction_(trans) { | 123 write_transaction_(trans) {} |
| 124 } | |
| 125 | 124 |
| 126 void MutableEntry::PutLocalExternalId(int64_t value) { | 125 void MutableEntry::PutLocalExternalId(int64_t value) { |
| 127 DCHECK(kernel_); | 126 DCHECK(kernel_); |
| 128 if (kernel_->ref(LOCAL_EXTERNAL_ID) != value) { | 127 if (kernel_->ref(LOCAL_EXTERNAL_ID) != value) { |
| 129 write_transaction()->TrackChangesTo(kernel_); | 128 write_transaction()->TrackChangesTo(kernel_); |
| 130 ScopedKernelLock lock(dir()); | 129 ScopedKernelLock lock(dir()); |
| 131 kernel_->put(LOCAL_EXTERNAL_ID, value); | 130 kernel_->put(LOCAL_EXTERNAL_ID, value); |
| 132 MarkDirty(); | 131 MarkDirty(); |
| 133 } | 132 } |
| 134 } | 133 } |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 if (!GetId().ServerKnows() && !GetSyncing()) { | 194 if (!GetId().ServerKnows() && !GetSyncing()) { |
| 196 PutIsUnsynced(false); | 195 PutIsUnsynced(false); |
| 197 } | 196 } |
| 198 } | 197 } |
| 199 | 198 |
| 200 { | 199 { |
| 201 ScopedKernelLock lock(dir()); | 200 ScopedKernelLock lock(dir()); |
| 202 // Some indices don't include deleted items and must be updated | 201 // Some indices don't include deleted items and must be updated |
| 203 // upon a value change. | 202 // upon a value change. |
| 204 ScopedParentChildIndexUpdater updater(lock, kernel_, | 203 ScopedParentChildIndexUpdater updater(lock, kernel_, |
| 205 &dir()->kernel()->parent_child_index); | 204 &dir()->kernel()->parent_child_index); |
| 206 | 205 |
| 207 kernel_->put(IS_DEL, value); | 206 kernel_->put(IS_DEL, value); |
| 208 MarkDirty(); | 207 MarkDirty(); |
| 209 } | 208 } |
| 210 } | 209 } |
| 211 | 210 |
| 212 void MutableEntry::PutNonUniqueName(const std::string& value) { | 211 void MutableEntry::PutNonUniqueName(const std::string& value) { |
| 213 DCHECK(kernel_); | 212 DCHECK(kernel_); |
| 214 if (kernel_->ref(NON_UNIQUE_NAME) != value) { | 213 if (kernel_->ref(NON_UNIQUE_NAME) != value) { |
| 215 write_transaction()->TrackChangesTo(kernel_); | 214 write_transaction()->TrackChangesTo(kernel_); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 238 } | 237 } |
| 239 } | 238 } |
| 240 | 239 |
| 241 void MutableEntry::PutUniquePosition(const UniquePosition& value) { | 240 void MutableEntry::PutUniquePosition(const UniquePosition& value) { |
| 242 DCHECK(kernel_); | 241 DCHECK(kernel_); |
| 243 if (!kernel_->ref(UNIQUE_POSITION).Equals(value)) { | 242 if (!kernel_->ref(UNIQUE_POSITION).Equals(value)) { |
| 244 write_transaction()->TrackChangesTo(kernel_); | 243 write_transaction()->TrackChangesTo(kernel_); |
| 245 // We should never overwrite a valid position with an invalid one. | 244 // We should never overwrite a valid position with an invalid one. |
| 246 DCHECK(value.IsValid()); | 245 DCHECK(value.IsValid()); |
| 247 ScopedKernelLock lock(dir()); | 246 ScopedKernelLock lock(dir()); |
| 248 ScopedParentChildIndexUpdater updater( | 247 ScopedParentChildIndexUpdater updater(lock, kernel_, |
| 249 lock, kernel_, &dir()->kernel()->parent_child_index); | 248 &dir()->kernel()->parent_child_index); |
| 250 kernel_->put(UNIQUE_POSITION, value); | 249 kernel_->put(UNIQUE_POSITION, value); |
| 251 MarkDirty(); | 250 MarkDirty(); |
| 252 } | 251 } |
| 253 } | 252 } |
| 254 | 253 |
| 255 bool MutableEntry::PutPredecessor(const Id& predecessor_id) { | 254 bool MutableEntry::PutPredecessor(const Id& predecessor_id) { |
| 256 if (predecessor_id.IsNull()) { | 255 if (predecessor_id.IsNull()) { |
| 257 dir()->PutPredecessor(kernel_, NULL); | 256 dir()->PutPredecessor(kernel_, NULL); |
| 258 } else { | 257 } else { |
| 259 MutableEntry predecessor(write_transaction(), GET_BY_ID, predecessor_id); | 258 MutableEntry predecessor(write_transaction(), GET_BY_ID, predecessor_id); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 313 DCHECK(!e->IsRoot()) << "We shouldn't mark a permanent object for syncing."; | 312 DCHECK(!e->IsRoot()) << "We shouldn't mark a permanent object for syncing."; |
| 314 if (!(e->PutIsUnsynced(true))) | 313 if (!(e->PutIsUnsynced(true))) |
| 315 return false; | 314 return false; |
| 316 if (e->GetSyncing()) | 315 if (e->GetSyncing()) |
| 317 e->PutDirtySync(true); | 316 e->PutDirtySync(true); |
| 318 return true; | 317 return true; |
| 319 } | 318 } |
| 320 | 319 |
| 321 } // namespace syncable | 320 } // namespace syncable |
| 322 } // namespace syncer | 321 } // namespace syncer |
| OLD | NEW |