// 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. #include "sync/sessions/sync_session_context.h" #include "sync/sessions/debug_info_getter.h" #include "sync/util/extensions_activity.h" namespace syncer { namespace sessions { SyncSessionContext::SyncSessionContext( ServerConnectionManager* connection_manager, syncable::Directory* directory, const std::vector<ModelSafeWorker*>& workers, ExtensionsActivity* extensions_activity, const std::vector<SyncEngineEventListener*>& listeners, DebugInfoGetter* debug_info_getter, TrafficRecorder* traffic_recorder, bool keystore_encryption_enabled, bool client_enabled_pre_commit_update_avoidance, const std::string& invalidator_client_id) : connection_manager_(connection_manager), directory_(directory), update_handler_deleter_(&update_handler_map_), commit_contributor_deleter_(&commit_contributor_map_), extensions_activity_(extensions_activity), notifications_enabled_(false), max_commit_batch_size_(kDefaultMaxCommitBatchSize), debug_info_getter_(debug_info_getter), traffic_recorder_(traffic_recorder), keystore_encryption_enabled_(keystore_encryption_enabled), invalidator_client_id_(invalidator_client_id), 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_.insert( std::make_pair(workers[i]->GetModelSafeGroup(), workers[i])); } std::vector<SyncEngineEventListener*>::const_iterator it; for (it = listeners.begin(); it != listeners.end(); ++it) listeners_.AddObserver(*it); } SyncSessionContext::~SyncSessionContext() { } void SyncSessionContext::set_routing_info( const ModelSafeRoutingInfo& 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. STLDeleteValues<UpdateHandlerMap>(&update_handler_map_); STLDeleteValues<CommitContributorMap>(&commit_contributor_map_); 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; SyncDirectoryUpdateHandler* 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)); } } } // namespace sessions } // namespace syncer