| 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() {
|
|
|