Chromium Code Reviews| Index: chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
| diff --git a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
| index e313787a69ccf90eae465d62bd4c6f3c9a3edcc3..9edaa77d8454cdf95ec44429d7d91dbd4e7de36a 100644 |
| --- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
| +++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
| @@ -7,6 +7,7 @@ |
| #include <vector> |
| #include "base/bind.h" |
| +#include "base/memory/weak_ptr.h" |
| #include "base/threading/sequenced_worker_pool.h" |
| #include "base/values.h" |
| #include "chrome/browser/drive/drive_api_service.h" |
| @@ -20,6 +21,8 @@ |
| #include "chrome/browser/signin/signin_manager_factory.h" |
| #include "chrome/browser/sync_file_system/drive_backend/conflict_resolver.h" |
| #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants.h" |
| +#include "chrome/browser/sync_file_system/drive_backend/drive_service_messenger.h" |
| +#include "chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h" |
| #include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h" |
| #include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h" |
| #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
| @@ -90,11 +93,6 @@ scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( |
| ExtensionService* extension_service = |
| extensions::ExtensionSystem::Get(context)->extension_service(); |
| - scoped_refptr<base::SequencedTaskRunner> file_task_runner( |
| - worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| - worker_pool->GetSequenceToken(), |
| - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); |
| - |
| // TODO(peria): Create another task runner to manage SyncWorker. |
| scoped_refptr<base::SingleThreadTaskRunner> |
| worker_task_runner = base::MessageLoopProxy::current(); |
| @@ -106,10 +104,17 @@ scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext( |
| notification_manager, |
| extension_service, |
| signin_manager)); |
| + |
| + scoped_refptr<base::SequencedTaskRunner> file_task_runner( |
| + worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( |
| + worker_pool->GetSequenceToken(), |
| + base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); |
| + |
| sync_engine->Initialize( |
| GetSyncFileSystemDir(context->GetPath()), |
| file_task_runner.get(), |
| - NULL); |
| + false, |
| + NULL /* env_override */); |
| return sync_engine.Pass(); |
| } |
| @@ -132,12 +137,24 @@ SyncEngine::~SyncEngine() { |
| void SyncEngine::Initialize(const base::FilePath& base_dir, |
|
peria
2014/04/24 04:08:38
It may be good to make InitializeForTesting().
In
|
| base::SequencedTaskRunner* file_task_runner, |
| + bool pass_service_to_worker, |
| leveldb::Env* env_override) { |
| - scoped_ptr<SyncEngineContext> sync_engine_context( |
| - new SyncEngineContext(drive_service_.get(), |
| - drive_uploader_.get(), |
| - base::MessageLoopProxy::current(), |
| - file_task_runner)); |
| + scoped_ptr<SyncEngineContext> sync_engine_context; |
| + if (pass_service_to_worker) { |
| + sync_engine_context.reset( |
| + new SyncEngineContext(drive_service_.Pass(), |
| + drive_uploader_.get(), |
| + base::MessageLoopProxy::current(), |
| + file_task_runner)); |
| + } else { |
| + scoped_ptr<drive::DriveServiceInterface> drive_service_messenger( |
| + new DriveServiceMessenger(drive_service_wrapper_->AsWeakPtr())); |
| + sync_engine_context.reset( |
| + new SyncEngineContext(drive_service_messenger.Pass(), |
| + drive_uploader_.get(), |
| + base::MessageLoopProxy::current(), |
| + file_task_runner)); |
| + } |
| // TODO(peria): Use PostTask on |worker_task_runner_| to call this function. |
| sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(), |
| base_dir, |
| @@ -366,11 +383,11 @@ void SyncEngine::OnNetworkChanged( |
| } |
| drive::DriveServiceInterface* SyncEngine::GetDriveService() { |
| - return drive_service_.get(); |
| + return sync_worker_->GetDriveService(); |
| } |
| drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { |
| - return drive_uploader_.get(); |
| + return sync_worker_->GetDriveUploader(); |
| } |
| MetadataDatabase* SyncEngine::GetMetadataDatabase() { |
| @@ -386,6 +403,7 @@ SyncEngine::SyncEngine( |
| ExtensionServiceInterface* extension_service, |
| SigninManagerBase* signin_manager) |
| : drive_service_(drive_service.Pass()), |
| + drive_service_wrapper_(new DriveServiceWrapper(drive_service_.get())), |
| drive_uploader_(drive_uploader.Pass()), |
| notification_manager_(notification_manager), |
| extension_service_(extension_service), |