Index: sync/syncable/write_transaction.cc |
diff --git a/sync/syncable/write_transaction.cc b/sync/syncable/write_transaction.cc |
index 09759b6194eccb7b47debe2ebe491aaecc21a78a..8a319ba9c9906b3fa188f1263bc885b94e98b9ea 100644 |
--- a/sync/syncable/write_transaction.cc |
+++ b/sync/syncable/write_transaction.cc |
@@ -6,6 +6,7 @@ |
#include "sync/syncable/directory.h" |
#include "sync/syncable/directory_change_delegate.h" |
+#include "sync/syncable/mutable_entry.h" |
#include "sync/syncable/transaction_observer.h" |
#include "sync/syncable/write_transaction_info.h" |
@@ -82,13 +83,15 @@ ModelTypeSet WriteTransaction::NotifyTransactionChangingAndEnding( |
ImmutableWriteTransactionInfo immutable_write_transaction_info( |
&write_transaction_info); |
DirectoryChangeDelegate* const delegate = directory_->kernel_->delegate; |
+ std::vector<int64> entry_changed; |
if (writer_ == syncable::SYNCAPI) { |
delegate->HandleCalculateChangesChangeEventFromSyncApi( |
- immutable_write_transaction_info, this); |
+ immutable_write_transaction_info, this, &entry_changed); |
} else { |
delegate->HandleCalculateChangesChangeEventFromSyncer( |
- immutable_write_transaction_info, this); |
+ immutable_write_transaction_info, this, &entry_changed); |
} |
+ UpdateTransactionVersion(entry_changed); |
ModelTypeSet models_with_changes = |
delegate->HandleTransactionEndingChangeEvent( |
@@ -107,6 +110,22 @@ void WriteTransaction::NotifyTransactionComplete( |
models_with_changes); |
} |
+void WriteTransaction::UpdateTransactionVersion( |
+ const std::vector<int64>& entry_changed) { |
+ syncer::ModelTypeSet type_seen; |
+ for (uint32 i = 0; i < entry_changed.size(); ++i) { |
+ MutableEntry entry(this, GET_BY_HANDLE, entry_changed[i]); |
+ if (entry.good()) { |
+ ModelType type = GetModelTypeFromSpecifics(entry.Get(SPECIFICS)); |
+ if (!type_seen.Has(type)) { |
+ directory_->IncrementTransactionVersion(type); |
+ type_seen.Put(type); |
+ } |
+ entry.Put(TRANSACTION_VERSION, directory_->GetTransactionVersion(type)); |
+ } |
+ } |
+} |
+ |
WriteTransaction::~WriteTransaction() { |
const ImmutableEntryKernelMutationMap& mutations = RecordMutations(); |
directory()->CheckInvariantsOnTransactionClose(this, mutations.Get()); |