Index: chrome/browser/sync/sessions/sync_session.cc |
diff --git a/chrome/browser/sync/sessions/sync_session.cc b/chrome/browser/sync/sessions/sync_session.cc |
index da6412f7809116448143399aa3b1656ab566d924..077b629a9ced2305b00c218a9bfce8881d41f7d2 100644 |
--- a/chrome/browser/sync/sessions/sync_session.cc |
+++ b/chrome/browser/sync/sessions/sync_session.cc |
@@ -24,6 +24,32 @@ SyncSession::SyncSession(SyncSessionContext* context, Delegate* delegate, |
SyncSession::~SyncSession() {} |
+void SyncSession::Coalesce(const SyncSession& session) { |
+ if (context_ != session.context() || delegate_ != session.delegate_) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ |
+ source_ = SyncSourceInfo(session.source_.first, |
+ source_.second | session.source_.second); |
+ |
+ std::vector<ModelSafeWorker*> temp; |
+ std::set_union(workers_.begin(), workers_.end(), |
+ session.workers_.begin(), session.workers_.end(), |
+ std::back_inserter(temp)); |
+ workers_.swap(temp); |
+ |
+ ModelSafeRoutingInfo temp_r; |
+ std::set_union(routing_info_.begin(), routing_info_.end(), |
+ session.routing_info_.begin(), session.routing_info_.end(), |
+ std::insert_iterator<ModelSafeRoutingInfo>(temp_r, temp_r.begin())); |
+ routing_info_.swap(temp_r); |
+} |
+ |
+void SyncSession::ResetTransientState() { |
+ status_controller_.reset(new StatusController(routing_info_)); |
+} |
+ |
SyncSessionSnapshot SyncSession::TakeSnapshot() const { |
syncable::ScopedDirLookup dir(context_->directory_manager(), |
context_->account_name()); |
@@ -55,7 +81,8 @@ SyncSessionSnapshot SyncSession::TakeSnapshot() const { |
delegate_->IsSyncingCurrentlySilenced(), |
status_controller_->unsynced_handles().size(), |
status_controller_->TotalNumConflictingItems(), |
- status_controller_->did_commit_items()); |
+ status_controller_->did_commit_items(), |
+ source_); |
} |
SyncSourceInfo SyncSession::TestAndSetSource() { |