 Chromium Code Reviews
 Chromium Code Reviews Issue 248853002:
  [NOCOMMIT] Make DriveService{Wrapper|Messenger} class  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master
    
  
    Issue 248853002:
  [NOCOMMIT] Make DriveService{Wrapper|Messenger} class  (Closed) 
  Base URL: https://chromium.googlesource.com/chromium/src.git@master| OLD | NEW | 
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" | 
| 6 | 6 | 
| 7 #include <vector> | 7 #include <vector> | 
| 8 | 8 | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/memory/weak_ptr.h" | |
| 10 #include "base/threading/sequenced_worker_pool.h" | 11 #include "base/threading/sequenced_worker_pool.h" | 
| 11 #include "base/values.h" | 12 #include "base/values.h" | 
| 12 #include "chrome/browser/drive/drive_api_service.h" | 13 #include "chrome/browser/drive/drive_api_service.h" | 
| 13 #include "chrome/browser/drive/drive_notification_manager.h" | 14 #include "chrome/browser/drive/drive_notification_manager.h" | 
| 14 #include "chrome/browser/drive/drive_notification_manager_factory.h" | 15 #include "chrome/browser/drive/drive_notification_manager_factory.h" | 
| 15 #include "chrome/browser/drive/drive_service_interface.h" | 16 #include "chrome/browser/drive/drive_service_interface.h" | 
| 16 #include "chrome/browser/drive/drive_uploader.h" | 17 #include "chrome/browser/drive/drive_uploader.h" | 
| 17 #include "chrome/browser/extensions/extension_service.h" | 18 #include "chrome/browser/extensions/extension_service.h" | 
| 18 #include "chrome/browser/profiles/profile.h" | 19 #include "chrome/browser/profiles/profile.h" | 
| 19 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 20 #include "chrome/browser/signin/profile_oauth2_token_service_factory.h" | 
| 20 #include "chrome/browser/signin/signin_manager_factory.h" | 21 #include "chrome/browser/signin/signin_manager_factory.h" | 
| 21 #include "chrome/browser/sync_file_system/drive_backend/conflict_resolver.h" | 22 #include "chrome/browser/sync_file_system/drive_backend/conflict_resolver.h" | 
| 22 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h" | 23 #include "chrome/browser/sync_file_system/drive_backend/drive_backend_constants. h" | 
| 24 #include "chrome/browser/sync_file_system/drive_backend/drive_service_messenger. h" | |
| 25 #include "chrome/browser/sync_file_system/drive_backend/drive_service_wrapper.h" | |
| 23 #include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h" | 26 #include "chrome/browser/sync_file_system/drive_backend/list_changes_task.h" | 
| 24 #include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h " | 27 #include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h " | 
| 25 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 28 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 
| 26 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h" | 29 #include "chrome/browser/sync_file_system/drive_backend/register_app_task.h" | 
| 27 #include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h " | 30 #include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h " | 
| 28 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" | 31 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" | 
| 29 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer. h" | 32 #include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer. h" | 
| 30 #include "chrome/browser/sync_file_system/drive_backend/sync_task.h" | 33 #include "chrome/browser/sync_file_system/drive_backend/sync_task.h" | 
| 31 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" | 34 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" | 
| 32 #include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h" | 35 #include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h" | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId()); | 86 drive_service->Initialize(signin_manager->GetAuthenticatedAccountId()); | 
| 84 | 87 | 
| 85 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( | 88 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( | 
| 86 new drive::DriveUploader(drive_service.get(), drive_task_runner.get())); | 89 new drive::DriveUploader(drive_service.get(), drive_task_runner.get())); | 
| 87 | 90 | 
| 88 drive::DriveNotificationManager* notification_manager = | 91 drive::DriveNotificationManager* notification_manager = | 
| 89 drive::DriveNotificationManagerFactory::GetForBrowserContext(context); | 92 drive::DriveNotificationManagerFactory::GetForBrowserContext(context); | 
| 90 ExtensionService* extension_service = | 93 ExtensionService* extension_service = | 
| 91 extensions::ExtensionSystem::Get(context)->extension_service(); | 94 extensions::ExtensionSystem::Get(context)->extension_service(); | 
| 92 | 95 | 
| 93 scoped_refptr<base::SequencedTaskRunner> file_task_runner( | |
| 94 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( | |
| 95 worker_pool->GetSequenceToken(), | |
| 96 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); | |
| 97 | |
| 98 // TODO(peria): Create another task runner to manage SyncWorker. | 96 // TODO(peria): Create another task runner to manage SyncWorker. | 
| 99 scoped_refptr<base::SingleThreadTaskRunner> | 97 scoped_refptr<base::SingleThreadTaskRunner> | 
| 100 worker_task_runner = base::MessageLoopProxy::current(); | 98 worker_task_runner = base::MessageLoopProxy::current(); | 
| 101 | 99 | 
| 102 scoped_ptr<drive_backend::SyncEngine> sync_engine( | 100 scoped_ptr<drive_backend::SyncEngine> sync_engine( | 
| 103 new SyncEngine(drive_service.Pass(), | 101 new SyncEngine(drive_service.Pass(), | 
| 104 drive_uploader.Pass(), | 102 drive_uploader.Pass(), | 
| 105 worker_task_runner, | 103 worker_task_runner, | 
| 106 notification_manager, | 104 notification_manager, | 
| 107 extension_service, | 105 extension_service, | 
| 108 signin_manager)); | 106 signin_manager)); | 
| 107 | |
| 108 scoped_refptr<base::SequencedTaskRunner> file_task_runner( | |
| 109 worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( | |
| 110 worker_pool->GetSequenceToken(), | |
| 111 base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); | |
| 112 | |
| 109 sync_engine->Initialize( | 113 sync_engine->Initialize( | 
| 110 GetSyncFileSystemDir(context->GetPath()), | 114 GetSyncFileSystemDir(context->GetPath()), | 
| 111 file_task_runner.get(), | 115 file_task_runner.get(), | 
| 112 NULL); | 116 false, | 
| 117 NULL /* env_override */); | |
| 113 | 118 | 
| 114 return sync_engine.Pass(); | 119 return sync_engine.Pass(); | 
| 115 } | 120 } | 
| 116 | 121 | 
| 117 void SyncEngine::AppendDependsOnFactories( | 122 void SyncEngine::AppendDependsOnFactories( | 
| 118 std::set<BrowserContextKeyedServiceFactory*>* factories) { | 123 std::set<BrowserContextKeyedServiceFactory*>* factories) { | 
| 119 DCHECK(factories); | 124 DCHECK(factories); | 
| 120 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); | 125 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); | 
| 121 factories->insert(SigninManagerFactory::GetInstance()); | 126 factories->insert(SigninManagerFactory::GetInstance()); | 
| 122 factories->insert( | 127 factories->insert( | 
| 123 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); | 128 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); | 
| 124 } | 129 } | 
| 125 | 130 | 
| 126 SyncEngine::~SyncEngine() { | 131 SyncEngine::~SyncEngine() { | 
| 127 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | 132 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | 
| 128 GetDriveService()->RemoveObserver(this); | 133 GetDriveService()->RemoveObserver(this); | 
| 129 if (notification_manager_) | 134 if (notification_manager_) | 
| 130 notification_manager_->RemoveObserver(this); | 135 notification_manager_->RemoveObserver(this); | 
| 131 } | 136 } | 
| 132 | 137 | 
| 133 void SyncEngine::Initialize(const base::FilePath& base_dir, | 138 void SyncEngine::Initialize(const base::FilePath& base_dir, | 
| 
peria
2014/04/24 04:08:38
It may be good to make InitializeForTesting().
In
 | |
| 134 base::SequencedTaskRunner* file_task_runner, | 139 base::SequencedTaskRunner* file_task_runner, | 
| 140 bool pass_service_to_worker, | |
| 135 leveldb::Env* env_override) { | 141 leveldb::Env* env_override) { | 
| 136 scoped_ptr<SyncEngineContext> sync_engine_context( | 142 scoped_ptr<SyncEngineContext> sync_engine_context; | 
| 137 new SyncEngineContext(drive_service_.get(), | 143 if (pass_service_to_worker) { | 
| 138 drive_uploader_.get(), | 144 sync_engine_context.reset( | 
| 139 base::MessageLoopProxy::current(), | 145 new SyncEngineContext(drive_service_.Pass(), | 
| 140 file_task_runner)); | 146 drive_uploader_.get(), | 
| 147 base::MessageLoopProxy::current(), | |
| 148 file_task_runner)); | |
| 149 } else { | |
| 150 scoped_ptr<drive::DriveServiceInterface> drive_service_messenger( | |
| 151 new DriveServiceMessenger(drive_service_wrapper_->AsWeakPtr())); | |
| 152 sync_engine_context.reset( | |
| 153 new SyncEngineContext(drive_service_messenger.Pass(), | |
| 154 drive_uploader_.get(), | |
| 155 base::MessageLoopProxy::current(), | |
| 156 file_task_runner)); | |
| 157 } | |
| 141 // TODO(peria): Use PostTask on |worker_task_runner_| to call this function. | 158 // TODO(peria): Use PostTask on |worker_task_runner_| to call this function. | 
| 142 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(), | 159 sync_worker_ = SyncWorker::CreateOnWorker(weak_ptr_factory_.GetWeakPtr(), | 
| 143 base_dir, | 160 base_dir, | 
| 144 sync_engine_context.Pass(), | 161 sync_engine_context.Pass(), | 
| 145 env_override); | 162 env_override); | 
| 146 | 163 | 
| 147 if (notification_manager_) | 164 if (notification_manager_) | 
| 148 notification_manager_->AddObserver(this); | 165 notification_manager_->AddObserver(this); | 
| 149 GetDriveService()->AddObserver(this); | 166 GetDriveService()->AddObserver(this); | 
| 150 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 167 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 359 void SyncEngine::OnNetworkChanged( | 376 void SyncEngine::OnNetworkChanged( | 
| 360 net::NetworkChangeNotifier::ConnectionType type) { | 377 net::NetworkChangeNotifier::ConnectionType type) { | 
| 361 worker_task_runner_->PostTask( | 378 worker_task_runner_->PostTask( | 
| 362 FROM_HERE, | 379 FROM_HERE, | 
| 363 base::Bind(&SyncWorker::OnNetworkChanged, | 380 base::Bind(&SyncWorker::OnNetworkChanged, | 
| 364 base::Unretained(sync_worker_.get()), | 381 base::Unretained(sync_worker_.get()), | 
| 365 type)); | 382 type)); | 
| 366 } | 383 } | 
| 367 | 384 | 
| 368 drive::DriveServiceInterface* SyncEngine::GetDriveService() { | 385 drive::DriveServiceInterface* SyncEngine::GetDriveService() { | 
| 369 return drive_service_.get(); | 386 return sync_worker_->GetDriveService(); | 
| 370 } | 387 } | 
| 371 | 388 | 
| 372 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { | 389 drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { | 
| 373 return drive_uploader_.get(); | 390 return sync_worker_->GetDriveUploader(); | 
| 374 } | 391 } | 
| 375 | 392 | 
| 376 MetadataDatabase* SyncEngine::GetMetadataDatabase() { | 393 MetadataDatabase* SyncEngine::GetMetadataDatabase() { | 
| 377 // TODO(peria): Post task | 394 // TODO(peria): Post task | 
| 378 return sync_worker_->GetMetadataDatabase(); | 395 return sync_worker_->GetMetadataDatabase(); | 
| 379 } | 396 } | 
| 380 | 397 | 
| 381 SyncEngine::SyncEngine( | 398 SyncEngine::SyncEngine( | 
| 382 scoped_ptr<drive::DriveServiceInterface> drive_service, | 399 scoped_ptr<drive::DriveServiceInterface> drive_service, | 
| 383 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, | 400 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, | 
| 384 base::SequencedTaskRunner* worker_task_runner, | 401 base::SequencedTaskRunner* worker_task_runner, | 
| 385 drive::DriveNotificationManager* notification_manager, | 402 drive::DriveNotificationManager* notification_manager, | 
| 386 ExtensionServiceInterface* extension_service, | 403 ExtensionServiceInterface* extension_service, | 
| 387 SigninManagerBase* signin_manager) | 404 SigninManagerBase* signin_manager) | 
| 388 : drive_service_(drive_service.Pass()), | 405 : drive_service_(drive_service.Pass()), | 
| 406 drive_service_wrapper_(new DriveServiceWrapper(drive_service_.get())), | |
| 389 drive_uploader_(drive_uploader.Pass()), | 407 drive_uploader_(drive_uploader.Pass()), | 
| 390 notification_manager_(notification_manager), | 408 notification_manager_(notification_manager), | 
| 391 extension_service_(extension_service), | 409 extension_service_(extension_service), | 
| 392 signin_manager_(signin_manager), | 410 signin_manager_(signin_manager), | 
| 393 worker_task_runner_(worker_task_runner), | 411 worker_task_runner_(worker_task_runner), | 
| 394 weak_ptr_factory_(this) {} | 412 weak_ptr_factory_(this) {} | 
| 395 | 413 | 
| 396 void SyncEngine::DidProcessRemoteChange( | 414 void SyncEngine::DidProcessRemoteChange( | 
| 397 sync_file_system::SyncAction sync_action, | 415 sync_file_system::SyncAction sync_action, | 
| 398 const fileapi::FileSystemURL& url) { | 416 const fileapi::FileSystemURL& url) { | 
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 474 void SyncEngine::NotifyLastOperationStatus() { | 492 void SyncEngine::NotifyLastOperationStatus() { | 
| 475 FOR_EACH_OBSERVER( | 493 FOR_EACH_OBSERVER( | 
| 476 Observer, | 494 Observer, | 
| 477 service_observers_, | 495 service_observers_, | 
| 478 OnRemoteChangeQueueUpdated( | 496 OnRemoteChangeQueueUpdated( | 
| 479 GetMetadataDatabase()->CountDirtyTracker())); | 497 GetMetadataDatabase()->CountDirtyTracker())); | 
| 480 } | 498 } | 
| 481 | 499 | 
| 482 } // namespace drive_backend | 500 } // namespace drive_backend | 
| 483 } // namespace sync_file_system | 501 } // namespace sync_file_system | 
| OLD | NEW |