| 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 1c0fd5da018bf8cd8ca689d1188882c8e6a701e2..ce9180ef059548c15d07f42703f79f93f7092741 100644
|
| --- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
|
| +++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
|
| @@ -26,11 +26,13 @@
|
| #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"
|
| #include "chrome/browser/sync_file_system/file_status_observer.h"
|
| #include "chrome/browser/sync_file_system/logger.h"
|
| +#include "chrome/browser/sync_file_system/remote_change_processor.h"
|
| #include "chrome/browser/sync_file_system/syncable_file_system_util.h"
|
| #include "components/signin/core/profile_oauth2_token_service.h"
|
| #include "content/public/browser/browser_thread.h"
|
| @@ -121,7 +123,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);
|
| }
|
| @@ -135,7 +137,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 =
|
| @@ -155,10 +157,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;
|
| @@ -201,14 +205,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),
|
| @@ -240,11 +245,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) {
|
| @@ -252,20 +257,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) {
|
| @@ -324,13 +330,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()));
|
| }
|
| }
|
|
|
| @@ -341,7 +348,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),
|
| @@ -366,12 +373,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()));
|
| }
|
| }
|
|
|
| @@ -390,8 +397,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;
|
| }
|
| @@ -422,15 +430,15 @@ 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() {
|
| @@ -438,7 +446,7 @@ RemoteChangeProcessor* SyncEngine::GetRemoteChangeProcessor() {
|
| }
|
|
|
| base::SequencedTaskRunner* SyncEngine::GetBlockingTaskRunner() {
|
| - return task_runner_.get();
|
| + return context_->GetBlockingTaskRunner();
|
| }
|
|
|
| SyncEngine::SyncEngine(const base::FilePath& base_dir,
|
| @@ -450,10 +458,7 @@ 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),
|
| @@ -466,33 +471,39 @@ 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()),
|
| + weak_ptr_factory_(this) {
|
| + // TODO(peria): Move following setters into constructor of Context.
|
| + context_->SetDriveService(drive_service.Pass());
|
| + context_->SetDriveUploader(drive_uploader.Pass());
|
| + context_->SetSequencedTaskRunner(task_runner);
|
| +}
|
|
|
| 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(
|
| @@ -506,7 +517,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 {
|
| @@ -519,9 +530,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();
|
| }
|
|
|
| @@ -529,7 +539,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;
|
| @@ -584,7 +594,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()));
|
| @@ -611,7 +621,7 @@ void SyncEngine::MaybeStartFetchChanges() {
|
| if (GetCurrentState() == REMOTE_SERVICE_DISABLED)
|
| return;
|
|
|
| - if (!metadata_database_)
|
| + if (!context_->GetMetadataDatabase())
|
| return;
|
|
|
| if (listing_remote_changes_)
|
| @@ -619,11 +629,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()));
|
| }
|
| @@ -632,7 +643,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;
|
| @@ -679,7 +690,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 {
|
| @@ -722,9 +733,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();
|
| @@ -742,7 +753,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;
|
| }
|
|
|