diff options
Diffstat (limited to 'chrome/browser/sync/engine/update_applicator.cc')
-rw-r--r-- | chrome/browser/sync/engine/update_applicator.cc | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/chrome/browser/sync/engine/update_applicator.cc b/chrome/browser/sync/engine/update_applicator.cc index e44083c..0c8122a 100644 --- a/chrome/browser/sync/engine/update_applicator.cc +++ b/chrome/browser/sync/engine/update_applicator.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -71,14 +71,18 @@ bool UpdateApplicator::AttemptOneApplication( progress_ = true; application_results_.AddSuccess(entry.Get(syncable::ID)); break; - case CONFLICT: + case CONFLICT_SIMPLE: pointer_++; - application_results_.AddConflict(entry.Get(syncable::ID)); + application_results_.AddSimpleConflict(entry.Get(syncable::ID)); break; case CONFLICT_ENCRYPTION: pointer_++; application_results_.AddEncryptionConflict(entry.Get(syncable::ID)); break; + case CONFLICT_HIERARCHY: + pointer_++; + application_results_.AddHierarchyConflict(entry.Get(syncable::ID)); + break; default: NOTREACHED(); break; @@ -133,7 +137,7 @@ UpdateApplicator::ResultTracker::ResultTracker(size_t num_results) { UpdateApplicator::ResultTracker::~ResultTracker() { } -void UpdateApplicator::ResultTracker::AddConflict(syncable::Id id) { +void UpdateApplicator::ResultTracker::AddSimpleConflict(syncable::Id id) { conflicting_ids_.push_back(id); } @@ -141,6 +145,10 @@ void UpdateApplicator::ResultTracker::AddEncryptionConflict(syncable::Id id) { encryption_conflict_ids_.push_back(id); } +void UpdateApplicator::ResultTracker::AddHierarchyConflict(syncable::Id id) { + hierarchy_conflict_ids_.push_back(id); +} + void UpdateApplicator::ResultTracker::AddSuccess(syncable::Id id) { successful_ids_.push_back(id); } @@ -150,19 +158,21 @@ void UpdateApplicator::ResultTracker::SaveProgress( sessions::UpdateProgress* update_progress) { vector<syncable::Id>::const_iterator i; for (i = conflicting_ids_.begin(); i != conflicting_ids_.end(); ++i) { - conflict_progress->AddConflictingItemById(*i); - update_progress->AddAppliedUpdate(CONFLICT, *i); + conflict_progress->AddSimpleConflictingItemById(*i); + update_progress->AddAppliedUpdate(CONFLICT_SIMPLE, *i); } for (i = encryption_conflict_ids_.begin(); i != encryption_conflict_ids_.end(); ++i) { - // Encryption conflicts should not put the syncer into a stuck state. We - // mark as conflict, so that we reattempt to apply updates, but add it to - // the list of nonblocking conflicts instead of normal conflicts. - conflict_progress->AddNonblockingConflictingItemById(*i); - update_progress->AddAppliedUpdate(CONFLICT, *i); + conflict_progress->AddEncryptionConflictingItemById(*i); + update_progress->AddAppliedUpdate(CONFLICT_ENCRYPTION, *i); + } + for (i = hierarchy_conflict_ids_.begin(); + i != hierarchy_conflict_ids_.end(); ++i) { + conflict_progress->AddHierarchyConflictingItemById(*i); + update_progress->AddAppliedUpdate(CONFLICT_HIERARCHY, *i); } for (i = successful_ids_.begin(); i != successful_ids_.end(); ++i) { - conflict_progress->EraseConflictingItemById(*i); + conflict_progress->EraseSimpleConflictingItemById(*i); update_progress->AddAppliedUpdate(SUCCESS, *i); } } @@ -170,6 +180,7 @@ void UpdateApplicator::ResultTracker::SaveProgress( void UpdateApplicator::ResultTracker::ClearConflicts() { conflicting_ids_.clear(); encryption_conflict_ids_.clear(); + hierarchy_conflict_ids_.clear(); } bool UpdateApplicator::ResultTracker::no_conflicts() const { |