Commit 80ee4546 authored by peria@chromium.org's avatar peria@chromium.org

[SyncFS] Construct and destruct instances live in worker_task_runner.

- SyncWorker: Construct / Destruct
- SyncWorker::Observer: Destruct


BUG=347425
TEST=./unit_tests --gtest_filter="SyncEngineTest.*:DriveBackendSyncTest.*"

Review URL: https://codereview.chromium.org/288193002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272876 0039d316-1c4b-4281-b951-d872f2087c98
parent fc238c22
...@@ -207,7 +207,13 @@ SyncEngine::~SyncEngine() { ...@@ -207,7 +207,13 @@ SyncEngine::~SyncEngine() {
if (notification_manager_) if (notification_manager_)
notification_manager_->RemoveObserver(this); notification_manager_->RemoveObserver(this);
// TODO(tzik): Destroy |sync_worker_| and |worker_observer_| on the worker. WorkerObserver* worker_observer = worker_observer_.release();
if (!worker_task_runner_->DeleteSoon(FROM_HERE, worker_observer))
delete worker_observer;
SyncWorker* sync_worker = sync_worker_.release();
if (!worker_task_runner_->DeleteSoon(FROM_HERE, sync_worker))
delete sync_worker;
} }
void SyncEngine::Initialize(const base::FilePath& base_dir, void SyncEngine::Initialize(const base::FilePath& base_dir,
...@@ -240,13 +246,16 @@ void SyncEngine::Initialize(const base::FilePath& base_dir, ...@@ -240,13 +246,16 @@ void SyncEngine::Initialize(const base::FilePath& base_dir,
if (extension_service_) if (extension_service_)
extension_service_weak_ptr = extension_service_->AsWeakPtr(); extension_service_weak_ptr = extension_service_->AsWeakPtr();
// TODO(peria): Use PostTask on |worker_task_runner_| to call this function. sync_worker_.reset(new SyncWorker(
sync_worker_ = SyncWorker::CreateOnWorker(
base_dir, base_dir,
worker_observer_.get(),
extension_service_weak_ptr, extension_service_weak_ptr,
sync_engine_context.Pass(), sync_engine_context.Pass(),
env_override); env_override));
sync_worker_->AddObserver(worker_observer_.get());
worker_task_runner_->PostTask(
FROM_HERE,
base::Bind(&SyncWorker::Initialize,
base::Unretained(sync_worker_.get())));
if (notification_manager_) if (notification_manager_)
notification_manager_->AddObserver(this); notification_manager_->AddObserver(this);
......
...@@ -85,22 +85,24 @@ void QueryAppStatusOnUIThread( ...@@ -85,22 +85,24 @@ void QueryAppStatusOnUIThread(
} // namespace } // namespace
scoped_ptr<SyncWorker> SyncWorker::CreateOnWorker( SyncWorker::SyncWorker(
const base::FilePath& base_dir, const base::FilePath& base_dir,
Observer* observer,
const base::WeakPtr<ExtensionServiceInterface>& extension_service, const base::WeakPtr<ExtensionServiceInterface>& extension_service,
scoped_ptr<SyncEngineContext> sync_engine_context, scoped_ptr<SyncEngineContext> sync_engine_context,
leveldb::Env* env_override) { leveldb::Env* env_override)
scoped_ptr<SyncWorker> sync_worker( : base_dir_(base_dir),
new SyncWorker(base_dir, env_override_(env_override),
extension_service, service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE),
sync_engine_context.Pass(), should_check_conflict_(true),
env_override)); should_check_remote_change_(true),
sync_worker->AddObserver(observer); listing_remote_changes_(false),
sync_worker->Initialize(); sync_enabled_(false),
default_conflict_resolution_policy_(
return sync_worker.Pass(); CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN),
} network_available_(false),
extension_service_(extension_service),
context_(sync_engine_context.Pass()),
weak_ptr_factory_(this) {}
SyncWorker::~SyncWorker() {} SyncWorker::~SyncWorker() {}
...@@ -133,7 +135,6 @@ void SyncWorker::RegisterOrigin( ...@@ -133,7 +135,6 @@ void SyncWorker::RegisterOrigin(
return; return;
} }
// TODO(peria): Forward |callback| to UI thread.
task_manager_->ScheduleSyncTask( task_manager_->ScheduleSyncTask(
FROM_HERE, FROM_HERE,
task.PassAs<SyncTask>(), task.PassAs<SyncTask>(),
...@@ -144,7 +145,6 @@ void SyncWorker::RegisterOrigin( ...@@ -144,7 +145,6 @@ void SyncWorker::RegisterOrigin(
void SyncWorker::EnableOrigin( void SyncWorker::EnableOrigin(
const GURL& origin, const GURL& origin,
const SyncStatusCallback& callback) { const SyncStatusCallback& callback) {
// TODO(peria): Forward |callback| to UI thread.
task_manager_->ScheduleTask( task_manager_->ScheduleTask(
FROM_HERE, FROM_HERE,
base::Bind(&SyncWorker::DoEnableApp, base::Bind(&SyncWorker::DoEnableApp,
...@@ -157,7 +157,6 @@ void SyncWorker::EnableOrigin( ...@@ -157,7 +157,6 @@ void SyncWorker::EnableOrigin(
void SyncWorker::DisableOrigin( void SyncWorker::DisableOrigin(
const GURL& origin, const GURL& origin,
const SyncStatusCallback& callback) { const SyncStatusCallback& callback) {
// TODO(peria): Forward |callback| to UI thread.
task_manager_->ScheduleTask( task_manager_->ScheduleTask(
FROM_HERE, FROM_HERE,
base::Bind(&SyncWorker::DoDisableApp, base::Bind(&SyncWorker::DoDisableApp,
...@@ -171,7 +170,6 @@ void SyncWorker::UninstallOrigin( ...@@ -171,7 +170,6 @@ void SyncWorker::UninstallOrigin(
const GURL& origin, const GURL& origin,
RemoteFileSyncService::UninstallFlag flag, RemoteFileSyncService::UninstallFlag flag,
const SyncStatusCallback& callback) { const SyncStatusCallback& callback) {
// TODO(peria): Forward |callback| to UI thread.
task_manager_->ScheduleSyncTask( task_manager_->ScheduleSyncTask(
FROM_HERE, FROM_HERE,
scoped_ptr<SyncTask>( scoped_ptr<SyncTask>(
...@@ -189,7 +187,8 @@ void SyncWorker::ProcessRemoteChange( ...@@ -189,7 +187,8 @@ void SyncWorker::ProcessRemoteChange(
SyncTaskManager::PRIORITY_MED, SyncTaskManager::PRIORITY_MED,
base::Bind(&SyncWorker::DidProcessRemoteChange, base::Bind(&SyncWorker::DidProcessRemoteChange,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
syncer, callback)); syncer,
callback));
} }
void SyncWorker::SetRemoteChangeProcessor( void SyncWorker::SetRemoteChangeProcessor(
...@@ -291,7 +290,8 @@ void SyncWorker::ApplyLocalChange( ...@@ -291,7 +290,8 @@ void SyncWorker::ApplyLocalChange(
SyncTaskManager::PRIORITY_MED, SyncTaskManager::PRIORITY_MED,
base::Bind(&SyncWorker::DidApplyLocalChange, base::Bind(&SyncWorker::DidApplyLocalChange,
weak_ptr_factory_.GetWeakPtr(), weak_ptr_factory_.GetWeakPtr(),
syncer, callback)); syncer,
callback));
} }
void SyncWorker::MaybeScheduleNextTask() { void SyncWorker::MaybeScheduleNextTask() {
...@@ -389,25 +389,6 @@ void SyncWorker::AddObserver(Observer* observer) { ...@@ -389,25 +389,6 @@ void SyncWorker::AddObserver(Observer* observer) {
observers_.AddObserver(observer); observers_.AddObserver(observer);
} }
SyncWorker::SyncWorker(
const base::FilePath& base_dir,
const base::WeakPtr<ExtensionServiceInterface>& extension_service,
scoped_ptr<SyncEngineContext> sync_engine_context,
leveldb::Env* env_override)
: base_dir_(base_dir),
env_override_(env_override),
service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE),
should_check_conflict_(true),
should_check_remote_change_(true),
listing_remote_changes_(false),
sync_enabled_(false),
default_conflict_resolution_policy_(
CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN),
network_available_(false),
extension_service_(extension_service),
context_(sync_engine_context.Pass()),
weak_ptr_factory_(this) {}
void SyncWorker::DoDisableApp(const std::string& app_id, void SyncWorker::DoDisableApp(const std::string& app_id,
const SyncStatusCallback& callback) { const SyncStatusCallback& callback) {
if (GetMetadataDatabase()) { if (GetMetadataDatabase()) {
......
...@@ -74,12 +74,10 @@ class SyncWorker : public SyncTaskManager::Client { ...@@ -74,12 +74,10 @@ class SyncWorker : public SyncTaskManager::Client {
virtual ~Observer() {} virtual ~Observer() {}
}; };
static scoped_ptr<SyncWorker> CreateOnWorker( SyncWorker(const base::FilePath& base_dir,
const base::FilePath& base_dir, const base::WeakPtr<ExtensionServiceInterface>& extension_service,
Observer* observer, scoped_ptr<SyncEngineContext> sync_engine_context,
const base::WeakPtr<ExtensionServiceInterface>& extension_service, leveldb::Env* env_override);
scoped_ptr<SyncEngineContext> sync_engine_context,
leveldb::Env* env_override);
virtual ~SyncWorker(); virtual ~SyncWorker();
...@@ -142,11 +140,6 @@ class SyncWorker : public SyncTaskManager::Client { ...@@ -142,11 +140,6 @@ class SyncWorker : public SyncTaskManager::Client {
friend class DriveBackendSyncTest; friend class DriveBackendSyncTest;
friend class SyncEngineTest; friend class SyncEngineTest;
SyncWorker(const base::FilePath& base_dir,
const base::WeakPtr<ExtensionServiceInterface>& extension_service,
scoped_ptr<SyncEngineContext> sync_engine_context,
leveldb::Env* env_override);
void DoDisableApp(const std::string& app_id, void DoDisableApp(const std::string& app_id,
const SyncStatusCallback& callback); const SyncStatusCallback& callback);
void DoEnableApp(const std::string& app_id, void DoEnableApp(const std::string& app_id,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment