| Index: chrome/browser/sync/sessions/session_state.cc
|
| diff --git a/chrome/browser/sync/sessions/session_state.cc b/chrome/browser/sync/sessions/session_state.cc
|
| index d9392f2bfa4c667ffef9090cf31d9d33b1da7d11..4d350911b20363b3ecb67dda70b39d28645bf7b3 100644
|
| --- a/chrome/browser/sync/sessions/session_state.cc
|
| +++ b/chrome/browser/sync/sessions/session_state.cc
|
| @@ -184,144 +184,70 @@ std::string SyncSessionSnapshot::ToString() const {
|
| return json;
|
| }
|
|
|
| -ConflictProgress::ConflictProgress(bool* dirty_flag) : dirty_(dirty_flag) {}
|
| +ConflictProgress::ConflictProgress(bool* dirty_flag)
|
| + : num_server_conflicting_items(0), num_hierarchy_conflicting_items(0),
|
| + num_encryption_conflicting_items(0), dirty_(dirty_flag) {
|
| +}
|
|
|
| ConflictProgress::~ConflictProgress() {
|
| - CleanupSets();
|
| }
|
|
|
| bool ConflictProgress::HasSimpleConflictItem(const syncable::Id& id) const {
|
| - return conflicting_item_ids_.count(id) > 0 &&
|
| - (IdToConflictSetFind(id) == IdToConflictSetEnd());
|
| -}
|
| -
|
| -IdToConflictSetMap::const_iterator ConflictProgress::IdToConflictSetFind(
|
| - const syncable::Id& the_id) const {
|
| - return id_to_conflict_set_.find(the_id);
|
| -}
|
| -
|
| -IdToConflictSetMap::const_iterator
|
| -ConflictProgress::IdToConflictSetBegin() const {
|
| - return id_to_conflict_set_.begin();
|
| -}
|
| -
|
| -IdToConflictSetMap::const_iterator
|
| -ConflictProgress::IdToConflictSetEnd() const {
|
| - return id_to_conflict_set_.end();
|
| -}
|
| -
|
| -IdToConflictSetMap::size_type ConflictProgress::IdToConflictSetSize() const {
|
| - return id_to_conflict_set_.size();
|
| -}
|
| -
|
| -const ConflictSet* ConflictProgress::IdToConflictSetGet(
|
| - const syncable::Id& the_id) {
|
| - return id_to_conflict_set_[the_id];
|
| -}
|
| -
|
| -std::set<ConflictSet*>::const_iterator
|
| -ConflictProgress::ConflictSetsBegin() const {
|
| - return conflict_sets_.begin();
|
| -}
|
| -
|
| -std::set<ConflictSet*>::const_iterator
|
| -ConflictProgress::ConflictSetsEnd() const {
|
| - return conflict_sets_.end();
|
| -}
|
| -
|
| -std::set<ConflictSet*>::size_type
|
| -ConflictProgress::ConflictSetsSize() const {
|
| - return conflict_sets_.size();
|
| + return simple_conflicting_item_ids_.count(id) > 0;
|
| }
|
|
|
| std::set<syncable::Id>::const_iterator
|
| -ConflictProgress::ConflictingItemsBegin() const {
|
| - return conflicting_item_ids_.begin();
|
| +ConflictProgress::SimpleConflictingItemsBegin() const {
|
| + return simple_conflicting_item_ids_.begin();
|
| }
|
| std::set<syncable::Id>::const_iterator
|
| -ConflictProgress::ConflictingItemsEnd() const {
|
| - return conflicting_item_ids_.end();
|
| +ConflictProgress::SimpleConflictingItemsEnd() const {
|
| + return simple_conflicting_item_ids_.end();
|
| }
|
|
|
| -void ConflictProgress::AddConflictingItemById(const syncable::Id& the_id) {
|
| +void ConflictProgress::AddSimpleConflictingItemById(
|
| + const syncable::Id& the_id) {
|
| std::pair<std::set<syncable::Id>::iterator, bool> ret =
|
| - conflicting_item_ids_.insert(the_id);
|
| + simple_conflicting_item_ids_.insert(the_id);
|
| if (ret.second)
|
| *dirty_ = true;
|
| }
|
|
|
| -void ConflictProgress::EraseConflictingItemById(const syncable::Id& the_id) {
|
| - int items_erased = conflicting_item_ids_.erase(the_id);
|
| +void ConflictProgress::EraseSimpleConflictingItemById(
|
| + const syncable::Id& the_id) {
|
| + int items_erased = simple_conflicting_item_ids_.erase(the_id);
|
| if (items_erased != 0)
|
| *dirty_ = true;
|
| }
|
|
|
| -void ConflictProgress::AddNonblockingConflictingItemById(
|
| +void ConflictProgress::AddEncryptionConflictingItemById(
|
| const syncable::Id& the_id) {
|
| std::pair<std::set<syncable::Id>::iterator, bool> ret =
|
| - nonblocking_conflicting_item_ids_.insert(the_id);
|
| - if (ret.second)
|
| + unresolvable_conflicting_item_ids_.insert(the_id);
|
| + if (ret.second) {
|
| + num_encryption_conflicting_items++;
|
| *dirty_ = true;
|
| + }
|
| }
|
|
|
| -void ConflictProgress::EraseNonblockingConflictingItemById(
|
| +void ConflictProgress::AddHierarchyConflictingItemById(
|
| const syncable::Id& the_id) {
|
| - int items_erased = nonblocking_conflicting_item_ids_.erase(the_id);
|
| - if (items_erased != 0)
|
| + std::pair<std::set<syncable::Id>::iterator, bool> ret =
|
| + unresolvable_conflicting_item_ids_.insert(the_id);
|
| + if (ret.second) {
|
| + num_hierarchy_conflicting_items++;
|
| *dirty_ = true;
|
| -}
|
| -
|
| -void ConflictProgress::MergeSets(const syncable::Id& id1,
|
| - const syncable::Id& id2) {
|
| - // There are no single item sets, we just leave those entries == 0
|
| - vector<syncable::Id>* set1 = id_to_conflict_set_[id1];
|
| - vector<syncable::Id>* set2 = id_to_conflict_set_[id2];
|
| - vector<syncable::Id>* rv = 0;
|
| - if (0 == set1 && 0 == set2) {
|
| - // Neither item currently has a set so we build one.
|
| - rv = new vector<syncable::Id>();
|
| - rv->push_back(id1);
|
| - if (id1 != id2) {
|
| - rv->push_back(id2);
|
| - } else {
|
| - LOG(WARNING) << "[BUG] Attempting to merge two identical conflict ids.";
|
| - }
|
| - conflict_sets_.insert(rv);
|
| - } else if (0 == set1) {
|
| - // Add the item to the existing set.
|
| - rv = set2;
|
| - rv->push_back(id1);
|
| - } else if (0 == set2) {
|
| - // Add the item to the existing set.
|
| - rv = set1;
|
| - rv->push_back(id2);
|
| - } else if (set1 == set2) {
|
| - // It's the same set already.
|
| - return;
|
| - } else {
|
| - // Merge the two sets.
|
| - rv = set1;
|
| - // Point all the second sets id's back to the first.
|
| - vector<syncable::Id>::iterator i;
|
| - for (i = set2->begin() ; i != set2->end() ; ++i) {
|
| - id_to_conflict_set_[*i] = rv;
|
| - }
|
| - // Copy the second set to the first.
|
| - rv->insert(rv->end(), set2->begin(), set2->end());
|
| - conflict_sets_.erase(set2);
|
| - delete set2;
|
| }
|
| - id_to_conflict_set_[id1] = id_to_conflict_set_[id2] = rv;
|
| }
|
|
|
| -void ConflictProgress::CleanupSets() {
|
| - // Clean up all the sets.
|
| - set<ConflictSet*>::iterator i;
|
| - for (i = conflict_sets_.begin(); i != conflict_sets_.end(); i++) {
|
| - delete *i;
|
| +void ConflictProgress::AddServerConflictingItemById(
|
| + const syncable::Id& the_id) {
|
| + std::pair<std::set<syncable::Id>::iterator, bool> ret =
|
| + unresolvable_conflicting_item_ids_.insert(the_id);
|
| + if (ret.second) {
|
| + num_server_conflicting_items++;
|
| + *dirty_ = true;
|
| }
|
| - conflict_sets_.clear();
|
| - id_to_conflict_set_.clear();
|
| }
|
|
|
| UpdateProgress::UpdateProgress() {}
|
| @@ -374,7 +300,7 @@ int UpdateProgress::SuccessfullyAppliedUpdateCount() const {
|
| bool UpdateProgress::HasConflictingUpdates() const {
|
| std::vector<AppliedUpdate>::const_iterator it;
|
| for (it = applied_updates_.begin(); it != applied_updates_.end(); ++it) {
|
| - if (it->first == CONFLICT) {
|
| + if (it->first != SUCCESS) {
|
| return true;
|
| }
|
| }
|
|
|