| 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/engine/apply_control_data_updates.h" | 5 #include "sync/engine/apply_control_data_updates.h" |
| 6 | 6 |
| 7 #include "base/metrics/histogram.h" | 7 #include "base/metrics/histogram.h" |
| 8 #include "sync/engine/conflict_resolver.h" | 8 #include "sync/engine/conflict_resolver.h" |
| 9 #include "sync/engine/conflict_util.h" | 9 #include "sync/engine/conflict_util.h" |
| 10 #include "sync/engine/syncer_util.h" | 10 #include "sync/engine/syncer_util.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 &trans, ToFullModelTypeSet(ControlTypes()), &handles); | 25 &trans, ToFullModelTypeSet(ControlTypes()), &handles); |
| 26 | 26 |
| 27 // First, go through and manually apply any new top level datatype nodes (so | 27 // First, go through and manually apply any new top level datatype nodes (so |
| 28 // that we don't have to worry about hitting a CONFLICT_HIERARCHY with an | 28 // that we don't have to worry about hitting a CONFLICT_HIERARCHY with an |
| 29 // entry because we haven't applied its parent yet). | 29 // entry because we haven't applied its parent yet). |
| 30 // TODO(sync): if at some point we support control datatypes with actual | 30 // TODO(sync): if at some point we support control datatypes with actual |
| 31 // hierarchies we'll need to revisit this logic. | 31 // hierarchies we'll need to revisit this logic. |
| 32 ModelTypeSet control_types = ControlTypes(); | 32 ModelTypeSet control_types = ControlTypes(); |
| 33 for (ModelTypeSet::Iterator iter = control_types.First(); iter.Good(); | 33 for (ModelTypeSet::Iterator iter = control_types.First(); iter.Good(); |
| 34 iter.Inc()) { | 34 iter.Inc()) { |
| 35 syncable::MutableEntry entry(&trans, syncable::GET_TYPE_ROOT, iter.Get()); | 35 ModelType type = iter.Get(); |
| 36 syncable::MutableEntry entry(&trans, syncable::GET_TYPE_ROOT, type); |
| 36 if (!entry.good()) | 37 if (!entry.good()) |
| 37 continue; | 38 continue; |
| 38 if (!entry.GetIsUnappliedUpdate()) | 39 |
| 40 if (!entry.GetIsUnappliedUpdate()) { |
| 41 // If this is a type with client generated root, the root node has been |
| 42 // created locally and might never be updated by the server. In that case |
| 43 // it has to be marked as having the initial download completed (which is |
| 44 // done by changing the root's base version to a value other than |
| 45 // CHANGES_VERSION). This does nothing if the root's base version is |
| 46 // already other than CHANGES_VERSION. |
| 47 if (IsTypeWithClientGeneratedRoot(type)) { |
| 48 dir->MarkInitialSyncEndedForType(&trans, type); |
| 49 } |
| 39 continue; | 50 continue; |
| 51 } |
| 40 | 52 |
| 41 ModelType type = entry.GetServerModelType(); | 53 DCHECK_EQ(type, entry.GetServerModelType()); |
| 42 if (type == NIGORI) { | 54 if (type == NIGORI) { |
| 43 // Nigori node applications never fail. | 55 // Nigori node applications never fail. |
| 44 ApplyNigoriUpdate(&trans, | 56 ApplyNigoriUpdate(&trans, |
| 45 &entry, | 57 &entry, |
| 46 dir->GetCryptographer(&trans)); | 58 dir->GetCryptographer(&trans)); |
| 47 } else { | 59 } else { |
| 48 ApplyControlUpdate(&trans, | 60 ApplyControlUpdate(&trans, |
| 49 &entry, | 61 &entry, |
| 50 dir->GetCryptographer(&trans)); | 62 dir->GetCryptographer(&trans)); |
| 51 } | 63 } |
| (...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 ConflictResolver::OVERWRITE_LOCAL, | 215 ConflictResolver::OVERWRITE_LOCAL, |
| 204 ConflictResolver::CONFLICT_RESOLUTION_SIZE); | 216 ConflictResolver::CONFLICT_RESOLUTION_SIZE); |
| 205 } | 217 } |
| 206 | 218 |
| 207 UpdateAttemptResponse response = AttemptToUpdateEntry( | 219 UpdateAttemptResponse response = AttemptToUpdateEntry( |
| 208 trans, entry, cryptographer); | 220 trans, entry, cryptographer); |
| 209 DCHECK_EQ(SUCCESS, response); | 221 DCHECK_EQ(SUCCESS, response); |
| 210 } | 222 } |
| 211 | 223 |
| 212 } // namespace syncer | 224 } // namespace syncer |
| OLD | NEW |