Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(256)

Unified Diff: chrome/browser/sync_file_system/drive_backend/sync_engine.cc

Issue 213473008: [SyncFS] Split SyncEngine and SyncEngineContext (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698