| // 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/internal_api/public/internal_components_factory_impl.h" | 
 |  | 
 | #include "sync/engine/backoff_delay_provider.h" | 
 | #include "sync/engine/syncer.h" | 
 | #include "sync/engine/sync_scheduler_impl.h" | 
 | #include "sync/sessions/sync_session_context.h" | 
 | #include "sync/syncable/deferred_on_disk_directory_backing_store.h" | 
 | #include "sync/syncable/on_disk_directory_backing_store.h" | 
 |  | 
 | using base::TimeDelta; | 
 |  | 
 | namespace syncer { | 
 |  | 
 | InternalComponentsFactoryImpl::InternalComponentsFactoryImpl( | 
 |     const Switches& switches) : switches_(switches) { | 
 | } | 
 |  | 
 | InternalComponentsFactoryImpl::~InternalComponentsFactoryImpl() { } | 
 |  | 
 | scoped_ptr<SyncScheduler> InternalComponentsFactoryImpl::BuildScheduler( | 
 |     const std::string& name, | 
 |     sessions::SyncSessionContext* context, | 
 |     CancelationSignal* cancelation_signal) { | 
 |  | 
 |   scoped_ptr<BackoffDelayProvider> delay(BackoffDelayProvider::FromDefaults()); | 
 |  | 
 |   if (switches_.backoff_override == BACKOFF_SHORT_INITIAL_RETRY_OVERRIDE) | 
 |     delay.reset(BackoffDelayProvider::WithShortInitialRetryOverride()); | 
 |  | 
 |   return scoped_ptr<SyncScheduler>(new SyncSchedulerImpl( | 
 |           name, | 
 |           delay.release(), | 
 |           context, | 
 |           new Syncer(cancelation_signal))); | 
 | } | 
 |  | 
 | scoped_ptr<sessions::SyncSessionContext> | 
 | InternalComponentsFactoryImpl::BuildContext( | 
 |     ServerConnectionManager* connection_manager, | 
 |     syncable::Directory* directory, | 
 |     ExtensionsActivity* extensions_activity, | 
 |     const std::vector<SyncEngineEventListener*>& listeners, | 
 |     sessions::DebugInfoGetter* debug_info_getter, | 
 |     ModelTypeRegistry* model_type_registry, | 
 |     const std::string& invalidation_client_id) { | 
 |   return scoped_ptr<sessions::SyncSessionContext>( | 
 |       new sessions::SyncSessionContext( | 
 |           connection_manager, directory, extensions_activity, | 
 |           listeners, debug_info_getter, | 
 |           model_type_registry, | 
 |           switches_.encryption_method == ENCRYPTION_KEYSTORE, | 
 |           switches_.pre_commit_updates_policy == | 
 |               FORCE_ENABLE_PRE_COMMIT_UPDATE_AVOIDANCE, | 
 |           invalidation_client_id)); | 
 | } | 
 |  | 
 | scoped_ptr<syncable::DirectoryBackingStore> | 
 | InternalComponentsFactoryImpl::BuildDirectoryBackingStore( | 
 |     StorageOption storage, const std::string& dir_name, | 
 |     const base::FilePath& backing_filepath) { | 
 |   if (storage == STORAGE_ON_DISK) { | 
 |     return scoped_ptr<syncable::DirectoryBackingStore>( | 
 |         new syncable::OnDiskDirectoryBackingStore(dir_name, backing_filepath)); | 
 |   } else if (storage == STORAGE_ON_DISK_DEFERRED) { | 
 |     return scoped_ptr<syncable::DirectoryBackingStore>( | 
 |         new syncable::DeferredOnDiskDirectoryBackingStore(dir_name, | 
 |                                                           backing_filepath)); | 
 |   } else { | 
 |     NOTREACHED(); | 
 |     return scoped_ptr<syncable::DirectoryBackingStore>(); | 
 |   } | 
 | } | 
 |  | 
 | InternalComponentsFactory::Switches | 
 | InternalComponentsFactoryImpl::GetSwitches() const { | 
 |   return switches_; | 
 | } | 
 |  | 
 | }  // namespace syncer |