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

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

Issue 288193002: [SyncFS] Construct and destruct sync_worker in worker_task_runner (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Work for comments Created 6 years, 7 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 be3a51a18477c1f3ae973dd9d3b7ed15d643fffe..9874561b17c65752f8278283b1006a396ad71c07 100644
--- a/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
+++ b/chrome/browser/sync_file_system/drive_backend/sync_engine.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/metrics/histogram.h"
+#include "base/run_loop.h"
#include "base/threading/sequenced_worker_pool.h"
#include "base/time/time.h"
#include "base/values.h"
@@ -66,7 +67,6 @@ class SyncEngine::WorkerObserver : public SyncWorker::Observer {
base::WeakPtr<SyncEngine> sync_engine)
: ui_task_runner_(ui_task_runner),
sync_engine_(sync_engine) {}
-
virtual ~WorkerObserver() {}
virtual void OnPendingFileListUpdated(int item_count) OVERRIDE {
@@ -183,9 +183,12 @@ scoped_ptr<SyncEngine> SyncEngine::CreateForBrowserContext(
notification_manager,
extension_service,
signin_manager));
+ base::RunLoop run_loop;
sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()),
file_task_runner.get(),
+ run_loop.QuitClosure(),
NULL);
+ run_loop.Run();
return sync_engine.Pass();
}
@@ -205,11 +208,17 @@ SyncEngine::~SyncEngine() {
if (notification_manager_)
notification_manager_->RemoveObserver(this);
- // TODO(tzik): Destroy |sync_worker_| and |worker_observer_| on the worker.
+ worker_task_runner_->PostTask(
tzik 2014/05/26 05:41:30 worker_task_runner_->DeleteSoon(); should work.
peria 2014/05/26 06:08:10 Done.
+ FROM_HERE,
+ base::Bind(
+ &SyncWorker::DestructOnWorker,
+ base::Passed(&sync_worker_),
+ base::Passed(worker_observer_.PassAs<SyncWorker::Observer>())));
}
void SyncEngine::Initialize(const base::FilePath& base_dir,
base::SequencedTaskRunner* file_task_runner,
+ const base::Closure& closure,
leveldb::Env* env_override) {
// DriveServiceWrapper and DriveServiceOnWorker relay communications
// between DriveService and syncers in SyncWorker.
@@ -239,18 +248,18 @@ void SyncEngine::Initialize(const base::FilePath& base_dir,
if (extension_service_)
extension_service_weak_ptr = extension_service_->AsWeakPtr();
- // TODO(peria): Use PostTask on |worker_task_runner_| to call this function.
- sync_worker_ = SyncWorker::CreateOnWorker(
- base_dir,
- worker_observer_.get(),
- extension_service_weak_ptr,
- sync_engine_context.Pass(),
- env_override);
-
- if (notification_manager_)
- notification_manager_->AddObserver(this);
- GetDriveService()->AddObserver(this);
- net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
+ PostTaskAndReplyWithResult(
+ worker_task_runner_,
+ FROM_HERE,
+ base::Bind(&SyncWorker::CreateOnWorker,
+ base_dir,
+ worker_observer_.get(),
+ extension_service_weak_ptr,
+ base::Passed(sync_engine_context.Pass()),
tzik 2014/05/26 05:41:30 s/sync_engine_context.Pass()/&sync_engine_context/
peria 2014/05/26 06:08:10 Done.
+ env_override),
+ base::Bind(&SyncEngine::SetSyncWorker,
+ weak_ptr_factory_.GetWeakPtr(),
+ closure));
}
void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) {
@@ -545,5 +554,17 @@ void SyncEngine::UpdateRegisteredApps() {
}
}
+void SyncEngine::SetSyncWorker(const base::Closure& closure,
+ scoped_ptr<SyncWorker> sync_worker) {
+ sync_worker_ = sync_worker.Pass();
+
+ if (notification_manager_)
+ notification_manager_->AddObserver(this);
+ GetDriveService()->AddObserver(this);
+ net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
+
+ closure.Run();
+}
+
} // namespace drive_backend
} // namespace sync_file_system

Powered by Google App Engine
This is Rietveld 408576698