Index: sync/sessions/sync_session_context.cc |
diff --git a/sync/sessions/sync_session_context.cc b/sync/sessions/sync_session_context.cc |
index d44591d79d852da92acded66ea8ac35475bec1f7..aa5dfa54044d616eab9c216227762654164952eb 100644 |
--- a/sync/sessions/sync_session_context.cc |
+++ b/sync/sessions/sync_session_context.cc |
@@ -35,8 +35,10 @@ SyncSessionContext::SyncSessionContext( |
server_enabled_pre_commit_update_avoidance_(false), |
client_enabled_pre_commit_update_avoidance_( |
client_enabled_pre_commit_update_avoidance) { |
- for (size_t i = 0u; i < workers.size(); ++i) |
- workers_.push_back(workers[i]); |
+ for (size_t i = 0u; i < workers.size(); ++i) { |
+ workers_.insert( |
+ std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); |
+ } |
std::vector<SyncEngineEventListener*>::const_iterator it; |
for (it = listeners.begin(); it != listeners.end(); ++it) |
@@ -48,24 +50,28 @@ SyncSessionContext::~SyncSessionContext() { |
void SyncSessionContext::set_routing_info( |
const ModelSafeRoutingInfo& routing_info) { |
- routing_info_ = routing_info; |
+ enabled_types_ = GetRoutingInfoTypes(routing_info); |
// TODO(rlarocque): This is not a good long-term solution. We must find a |
// better way to initialize the set of CommitContributors and UpdateHandlers. |
- ModelTypeSet enabled_types = GetRoutingInfoTypes(routing_info); |
- |
+ STLDeleteValues<UpdateHandlerMap>(&update_handler_map_); |
STLDeleteValues<CommitContributorMap>(&commit_contributor_map_); |
- for (ModelTypeSet::Iterator it = enabled_types.First(); it.Good(); it.Inc()) { |
- SyncDirectoryCommitContributor* contributor = |
- new SyncDirectoryCommitContributor(directory(), it.Get()); |
- commit_contributor_map_.insert(std::make_pair(it.Get(), contributor)); |
- } |
+ for (ModelSafeRoutingInfo::const_iterator routing_iter = routing_info.begin(); |
+ routing_iter != routing_info.end(); ++routing_iter) { |
+ ModelType type = routing_iter->first; |
+ ModelSafeGroup group = routing_iter->second; |
+ std::map<ModelSafeGroup, scoped_refptr<ModelSafeWorker> >::iterator |
+ worker_it = workers_.find(group); |
+ DCHECK(worker_it != workers_.end()); |
+ scoped_refptr<ModelSafeWorker> worker = worker_it->second; |
- STLDeleteValues<UpdateHandlerMap>(&update_handler_map_); |
- for (ModelTypeSet::Iterator it = enabled_types.First(); it.Good(); it.Inc()) { |
SyncDirectoryUpdateHandler* handler = |
- new SyncDirectoryUpdateHandler(directory(), it.Get()); |
- update_handler_map_.insert(std::make_pair(it.Get(), handler)); |
+ new SyncDirectoryUpdateHandler(directory(), type, worker); |
+ update_handler_map_.insert(std::make_pair(type, handler)); |
+ |
+ SyncDirectoryCommitContributor* contributor = |
+ new SyncDirectoryCommitContributor(directory(), type); |
+ commit_contributor_map_.insert(std::make_pair(type, contributor)); |
} |
} |