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 b857c0d890180f5c907f872da09b8c6c27e2b7f4..6b5f6ff2f7a14987d0f96932be66fcf9b9f37f2e 100644 |
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc |
@@ -26,6 +26,7 @@ |
#include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
#include "chrome/browser/sync_file_system/drive_backend/register_app_task.h" |
#include "chrome/browser/sync_file_system/drive_backend/remote_to_local_syncer.h" |
+#include "chrome/browser/sync_file_system/drive_backend/sync_engine_context.h" |
#include "chrome/browser/sync_file_system/drive_backend/sync_engine_initializer.h" |
#include "chrome/browser/sync_file_system/drive_backend/sync_task.h" |
#include "chrome/browser/sync_file_system/drive_backend/uninstall_app_task.h" |
@@ -44,6 +45,9 @@ |
#include "webkit/common/fileapi/file_system_util.h" |
namespace sync_file_system { |
+ |
+class RemoteChangeProcessor; |
+ |
namespace drive_backend { |
namespace { |
@@ -121,7 +125,7 @@ void SyncEngine::AppendDependsOnFactories( |
SyncEngine::~SyncEngine() { |
net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
- drive_service_->RemoveObserver(this); |
+ context_->GetDriveService()->RemoveObserver(this); |
if (notification_manager_) |
notification_manager_->RemoveObserver(this); |
} |
@@ -137,7 +141,7 @@ void SyncEngine::Initialize() { |
if (notification_manager_) |
notification_manager_->AddObserver(this); |
- drive_service_->AddObserver(this); |
+ context_->GetDriveService()->AddObserver(this); |
net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
net::NetworkChangeNotifier::ConnectionType type = |
@@ -157,10 +161,12 @@ void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { |
void SyncEngine::RegisterOrigin( |
const GURL& origin, |
const SyncStatusCallback& callback) { |
- if (!metadata_database_ && drive_service_->HasRefreshToken()) |
+ if (!context_->GetMetadataDatabase() && |
+ context_->GetDriveService()->HasRefreshToken()) |
PostInitializeTask(); |
- scoped_ptr<RegisterAppTask> task(new RegisterAppTask(this, origin.host())); |
+ scoped_ptr<RegisterAppTask> task( |
+ new RegisterAppTask(context_.get(), origin.host())); |
if (task->CanFinishImmediately()) { |
callback.Run(SYNC_STATUS_OK); |
return; |
@@ -203,14 +209,15 @@ void SyncEngine::UninstallOrigin( |
const SyncStatusCallback& callback) { |
task_manager_->ScheduleSyncTask( |
FROM_HERE, |
- scoped_ptr<SyncTask>(new UninstallAppTask(this, origin.host(), flag)), |
+ scoped_ptr<SyncTask>( |
+ new UninstallAppTask(context_.get(), origin.host(), flag)), |
SyncTaskManager::PRIORITY_HIGH, |
callback); |
} |
void SyncEngine::ProcessRemoteChange( |
const SyncFileCallback& callback) { |
- RemoteToLocalSyncer* syncer = new RemoteToLocalSyncer(this); |
+ RemoteToLocalSyncer* syncer = new RemoteToLocalSyncer(context_.get()); |
task_manager_->ScheduleSyncTask( |
FROM_HERE, |
scoped_ptr<SyncTask>(syncer), |
@@ -222,7 +229,7 @@ void SyncEngine::ProcessRemoteChange( |
void SyncEngine::SetRemoteChangeProcessor( |
RemoteChangeProcessor* processor) { |
- remote_change_processor_ = processor; |
+ context_->SetRemoteChangeProcessor(processor); |
} |
LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
@@ -242,11 +249,11 @@ RemoteServiceState SyncEngine::GetCurrentState() const { |
void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) { |
DCHECK(status_map); |
- if (!extension_service_ || !metadata_database_) |
+ if (!extension_service_ || !context_->GetMetadataDatabase()) |
return; |
std::vector<std::string> app_ids; |
- metadata_database_->GetRegisteredAppIDs(&app_ids); |
+ context_->GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids); |
for (std::vector<std::string>::const_iterator itr = app_ids.begin(); |
itr != app_ids.end(); ++itr) { |
@@ -254,20 +261,21 @@ void SyncEngine::GetOriginStatusMap(OriginStatusMap* status_map) { |
GURL origin = |
extensions::Extension::GetBaseURLFromExtensionId(app_id); |
(*status_map)[origin] = |
- metadata_database_->IsAppEnabled(app_id) ? "Enabled" : "Disabled"; |
+ context_->GetMetadataDatabase()->IsAppEnabled(app_id) ? |
+ "Enabled" : "Disabled"; |
} |
} |
scoped_ptr<base::ListValue> SyncEngine::DumpFiles(const GURL& origin) { |
- if (!metadata_database_) |
+ if (!context_->GetMetadataDatabase()) |
return scoped_ptr<base::ListValue>(); |
- return metadata_database_->DumpFiles(origin.host()); |
+ return context_->GetMetadataDatabase()->DumpFiles(origin.host()); |
} |
scoped_ptr<base::ListValue> SyncEngine::DumpDatabase() { |
- if (!metadata_database_) |
+ if (!context_->GetMetadataDatabase()) |
return scoped_ptr<base::ListValue>(); |
- return metadata_database_->DumpDatabase(); |
+ return context_->GetMetadataDatabase()->DumpDatabase(); |
} |
void SyncEngine::SetSyncEnabled(bool enabled) { |
@@ -326,13 +334,14 @@ void SyncEngine::DownloadRemoteVersion( |
} |
void SyncEngine::PromoteDemotedChanges() { |
- if (metadata_database_ && metadata_database_->HasLowPriorityDirtyTracker()) { |
- metadata_database_->PromoteLowerPriorityTrackersToNormal(); |
+ if (context_->GetMetadataDatabase() && |
+ context_->GetMetadataDatabase()->HasLowPriorityDirtyTracker()) { |
+ context_->GetMetadataDatabase()->PromoteLowerPriorityTrackersToNormal(); |
FOR_EACH_OBSERVER( |
Observer, |
service_observers_, |
OnRemoteChangeQueueUpdated( |
- metadata_database_->CountDirtyTracker())); |
+ context_->GetMetadataDatabase()->CountDirtyTracker())); |
} |
} |
@@ -343,7 +352,7 @@ void SyncEngine::ApplyLocalChange( |
const fileapi::FileSystemURL& url, |
const SyncStatusCallback& callback) { |
LocalToRemoteSyncer* syncer = new LocalToRemoteSyncer( |
- this, local_metadata, local_change, local_path, url); |
+ context_.get(), local_metadata, local_change, local_path, url); |
task_manager_->ScheduleSyncTask( |
FROM_HERE, |
scoped_ptr<SyncTask>(syncer), |
@@ -368,12 +377,12 @@ void SyncEngine::NotifyLastOperationStatus( |
SyncStatusCode sync_status, |
bool used_network) { |
UpdateServiceStateFromSyncStatusCode(sync_status, used_network); |
- if (metadata_database_) { |
+ if (context_->GetMetadataDatabase()) { |
FOR_EACH_OBSERVER( |
Observer, |
service_observers_, |
OnRemoteChangeQueueUpdated( |
- metadata_database_->CountDirtyTracker())); |
+ context_->GetMetadataDatabase()->CountDirtyTracker())); |
} |
} |
@@ -392,8 +401,9 @@ void SyncEngine::OnReadyToSendRequests() { |
return; |
UpdateServiceState(REMOTE_SERVICE_OK, "Authenticated"); |
- if (!metadata_database_ && signin_manager_) { |
- drive_service_->Initialize(signin_manager_->GetAuthenticatedAccountId()); |
+ if (!context_->GetMetadataDatabase() && signin_manager_) { |
+ context_->GetDriveService()->Initialize( |
+ signin_manager_->GetAuthenticatedAccountId()); |
PostInitializeTask(); |
return; |
} |
@@ -424,23 +434,23 @@ void SyncEngine::OnNetworkChanged( |
} |
drive::DriveServiceInterface* SyncEngine::GetDriveService() { |
- return drive_service_.get(); |
+ return context_->GetDriveService(); |
} |
drive::DriveUploaderInterface* SyncEngine::GetDriveUploader() { |
- return drive_uploader_.get(); |
+ return context_->GetDriveUploader(); |
} |
MetadataDatabase* SyncEngine::GetMetadataDatabase() { |
- return metadata_database_.get(); |
+ return context_->GetMetadataDatabase(); |
} |
RemoteChangeProcessor* SyncEngine::GetRemoteChangeProcessor() { |
- return remote_change_processor_; |
+ return context_->GetRemoteChangeProcessor(); |
} |
base::SequencedTaskRunner* SyncEngine::GetBlockingTaskRunner() { |
- return task_runner_.get(); |
+ return context_->GetBlockingTaskRunner(); |
} |
SyncEngine::SyncEngine(const base::FilePath& base_dir, |
@@ -452,14 +462,10 @@ SyncEngine::SyncEngine(const base::FilePath& base_dir, |
SigninManagerBase* signin_manager, |
leveldb::Env* env_override) |
: base_dir_(base_dir), |
- task_runner_(task_runner), |
env_override_(env_override), |
- drive_service_(drive_service.Pass()), |
- drive_uploader_(drive_uploader.Pass()), |
notification_manager_(notification_manager), |
extension_service_(extension_service), |
signin_manager_(signin_manager), |
- remote_change_processor_(NULL), |
service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
should_check_conflict_(true), |
should_check_remote_change_(true), |
@@ -468,33 +474,37 @@ SyncEngine::SyncEngine(const base::FilePath& base_dir, |
default_conflict_resolution_policy_( |
CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), |
network_available_(false), |
- weak_ptr_factory_(this) {} |
+ context_(new SyncEngineContext(drive_service.Pass(), |
+ drive_uploader.Pass(), |
+ task_runner)), |
+ weak_ptr_factory_(this) { |
+} |
void SyncEngine::DoDisableApp(const std::string& app_id, |
const SyncStatusCallback& callback) { |
- if (metadata_database_) |
- metadata_database_->DisableApp(app_id, callback); |
+ if (context_->GetMetadataDatabase()) |
+ context_->GetMetadataDatabase()->DisableApp(app_id, callback); |
else |
callback.Run(SYNC_STATUS_OK); |
} |
void SyncEngine::DoEnableApp(const std::string& app_id, |
const SyncStatusCallback& callback) { |
- if (metadata_database_) |
- metadata_database_->EnableApp(app_id, callback); |
+ if (context_->GetMetadataDatabase()) |
+ context_->GetMetadataDatabase()->EnableApp(app_id, callback); |
else |
callback.Run(SYNC_STATUS_OK); |
} |
void SyncEngine::PostInitializeTask() { |
- DCHECK(!metadata_database_); |
+ DCHECK(!context_->GetMetadataDatabase()); |
- // This initializer task may not run if metadata_database_ is already |
- // initialized when it runs. |
+ // This initializer task may not run if MetadataDatabase in context_ is |
+ // already initialized when it runs. |
SyncEngineInitializer* initializer = |
- new SyncEngineInitializer(this, |
- task_runner_.get(), |
- drive_service_.get(), |
+ new SyncEngineInitializer(context_.get(), |
+ context_->GetBlockingTaskRunner(), |
+ context_->GetDriveService(), |
base_dir_.Append(kDatabaseName), |
env_override_); |
task_manager_->ScheduleSyncTask( |
@@ -508,7 +518,7 @@ void SyncEngine::PostInitializeTask() { |
void SyncEngine::DidInitialize(SyncEngineInitializer* initializer, |
SyncStatusCode status) { |
if (status != SYNC_STATUS_OK) { |
- if (drive_service_->HasRefreshToken()) { |
+ if (context_->GetDriveService()->HasRefreshToken()) { |
UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, |
"Could not initialize remote service"); |
} else { |
@@ -521,9 +531,8 @@ void SyncEngine::DidInitialize(SyncEngineInitializer* initializer, |
scoped_ptr<MetadataDatabase> metadata_database = |
initializer->PassMetadataDatabase(); |
if (metadata_database) |
- metadata_database_ = metadata_database.Pass(); |
+ context_->SetMetadataDatabase(metadata_database.Pass()); |
- DCHECK(metadata_database_); |
UpdateRegisteredApps(); |
} |
@@ -531,7 +540,7 @@ void SyncEngine::DidProcessRemoteChange(RemoteToLocalSyncer* syncer, |
const SyncFileCallback& callback, |
SyncStatusCode status) { |
if (syncer->is_sync_root_deletion()) { |
- MetadataDatabase::ClearDatabase(metadata_database_.Pass()); |
+ MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase()); |
PostInitializeTask(); |
callback.Run(status, syncer->url()); |
return; |
@@ -586,7 +595,7 @@ void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer, |
!listing_remote_changes_) { |
task_manager_->ScheduleSyncTask( |
FROM_HERE, |
- scoped_ptr<SyncTask>(new ListChangesTask(this)), |
+ scoped_ptr<SyncTask>(new ListChangesTask(context_.get())), |
SyncTaskManager::PRIORITY_HIGH, |
base::Bind(&SyncEngine::DidFetchChanges, |
weak_ptr_factory_.GetWeakPtr())); |
@@ -613,7 +622,7 @@ void SyncEngine::MaybeStartFetchChanges() { |
if (GetCurrentState() == REMOTE_SERVICE_DISABLED) |
return; |
- if (!metadata_database_) |
+ if (!context_->GetMetadataDatabase()) |
return; |
if (listing_remote_changes_) |
@@ -621,11 +630,12 @@ void SyncEngine::MaybeStartFetchChanges() { |
base::TimeTicks now = base::TimeTicks::Now(); |
if (!should_check_remote_change_ && now < time_to_check_changes_) { |
- if (!metadata_database_->HasDirtyTracker() && should_check_conflict_) { |
+ if (!context_->GetMetadataDatabase()->HasDirtyTracker() && |
+ should_check_conflict_) { |
should_check_conflict_ = false; |
task_manager_->ScheduleSyncTaskIfIdle( |
FROM_HERE, |
- scoped_ptr<SyncTask>(new ConflictResolver(this)), |
+ scoped_ptr<SyncTask>(new ConflictResolver(context_.get())), |
base::Bind(&SyncEngine::DidResolveConflict, |
weak_ptr_factory_.GetWeakPtr())); |
} |
@@ -634,7 +644,7 @@ void SyncEngine::MaybeStartFetchChanges() { |
if (task_manager_->ScheduleSyncTaskIfIdle( |
FROM_HERE, |
- scoped_ptr<SyncTask>(new ListChangesTask(this)), |
+ scoped_ptr<SyncTask>(new ListChangesTask(context_.get())), |
base::Bind(&SyncEngine::DidFetchChanges, |
weak_ptr_factory_.GetWeakPtr()))) { |
should_check_remote_change_ = false; |
@@ -681,7 +691,7 @@ void SyncEngine::UpdateServiceStateFromSyncStatusCode( |
case SYNC_STATUS_NETWORK_ERROR: |
case SYNC_STATUS_ABORT: |
case SYNC_STATUS_FAILED: |
- if (drive_service_->HasRefreshToken()) { |
+ if (context_->GetDriveService()->HasRefreshToken()) { |
UpdateServiceState(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE, |
"Network or temporary service error."); |
} else { |
@@ -724,9 +734,9 @@ void SyncEngine::UpdateRegisteredApps() { |
if (!extension_service_) |
return; |
- DCHECK(metadata_database_); |
+ DCHECK(context_->GetMetadataDatabase()); |
std::vector<std::string> app_ids; |
- metadata_database_->GetRegisteredAppIDs(&app_ids); |
+ context_->GetMetadataDatabase()->GetRegisteredAppIDs(&app_ids); |
// Update the status of every origin using status from ExtensionService. |
for (std::vector<std::string>::const_iterator itr = app_ids.begin(); |
@@ -744,7 +754,8 @@ void SyncEngine::UpdateRegisteredApps() { |
continue; |
} |
FileTracker tracker; |
- if (!metadata_database_->FindAppRootTracker(app_id, &tracker)) { |
+ if (!context_->GetMetadataDatabase()->FindAppRootTracker(app_id, |
+ &tracker)) { |
// App will register itself on first run. |
continue; |
} |