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

Side by Side 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: Removed RunLoop 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h" 5 #include "chrome/browser/sync_file_system/drive_backend/sync_engine.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/run_loop.h"
tzik 2014/05/26 06:50:21 please drop this
peria 2014/05/26 07:55:09 Done.
11 #include "base/threading/sequenced_worker_pool.h" 12 #include "base/threading/sequenced_worker_pool.h"
12 #include "base/time/time.h" 13 #include "base/time/time.h"
13 #include "base/values.h" 14 #include "base/values.h"
14 #include "chrome/browser/drive/drive_api_service.h" 15 #include "chrome/browser/drive/drive_api_service.h"
15 #include "chrome/browser/drive/drive_notification_manager.h" 16 #include "chrome/browser/drive/drive_notification_manager.h"
16 #include "chrome/browser/drive/drive_notification_manager_factory.h" 17 #include "chrome/browser/drive/drive_notification_manager_factory.h"
17 #include "chrome/browser/drive/drive_service_interface.h" 18 #include "chrome/browser/drive/drive_service_interface.h"
18 #include "chrome/browser/drive/drive_uploader.h" 19 #include "chrome/browser/drive/drive_uploader.h"
19 #include "chrome/browser/extensions/extension_service.h" 20 #include "chrome/browser/extensions/extension_service.h"
20 #include "chrome/browser/profiles/profile.h" 21 #include "chrome/browser/profiles/profile.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 class RemoteChangeProcessor; 60 class RemoteChangeProcessor;
60 61
61 namespace drive_backend { 62 namespace drive_backend {
62 63
63 class SyncEngine::WorkerObserver : public SyncWorker::Observer { 64 class SyncEngine::WorkerObserver : public SyncWorker::Observer {
64 public: 65 public:
65 WorkerObserver(base::SequencedTaskRunner* ui_task_runner, 66 WorkerObserver(base::SequencedTaskRunner* ui_task_runner,
66 base::WeakPtr<SyncEngine> sync_engine) 67 base::WeakPtr<SyncEngine> sync_engine)
67 : ui_task_runner_(ui_task_runner), 68 : ui_task_runner_(ui_task_runner),
68 sync_engine_(sync_engine) {} 69 sync_engine_(sync_engine) {}
69
70 virtual ~WorkerObserver() {} 70 virtual ~WorkerObserver() {}
71 71
72 virtual void OnPendingFileListUpdated(int item_count) OVERRIDE { 72 virtual void OnPendingFileListUpdated(int item_count) OVERRIDE {
73 if (ui_task_runner_->RunsTasksOnCurrentThread()) { 73 if (ui_task_runner_->RunsTasksOnCurrentThread()) {
74 sync_engine_->OnPendingFileListUpdated(item_count); 74 sync_engine_->OnPendingFileListUpdated(item_count);
75 return; 75 return;
76 } 76 }
77 77
78 ui_task_runner_->PostTask( 78 ui_task_runner_->PostTask(
79 FROM_HERE, 79 FROM_HERE,
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 scoped_refptr<base::SingleThreadTaskRunner> 176 scoped_refptr<base::SingleThreadTaskRunner>
177 worker_task_runner = base::MessageLoopProxy::current(); 177 worker_task_runner = base::MessageLoopProxy::current();
178 178
179 scoped_ptr<drive_backend::SyncEngine> sync_engine( 179 scoped_ptr<drive_backend::SyncEngine> sync_engine(
180 new SyncEngine(drive_service.Pass(), 180 new SyncEngine(drive_service.Pass(),
181 drive_uploader.Pass(), 181 drive_uploader.Pass(),
182 worker_task_runner, 182 worker_task_runner,
183 notification_manager, 183 notification_manager,
184 extension_service, 184 extension_service,
185 signin_manager)); 185 signin_manager));
186
186 sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()), 187 sync_engine->Initialize(GetSyncFileSystemDir(context->GetPath()),
187 file_task_runner.get(), 188 file_task_runner.get(),
188 NULL); 189 NULL);
189 190
190 return sync_engine.Pass(); 191 return sync_engine.Pass();
191 } 192 }
192 193
193 void SyncEngine::AppendDependsOnFactories( 194 void SyncEngine::AppendDependsOnFactories(
194 std::set<BrowserContextKeyedServiceFactory*>* factories) { 195 std::set<BrowserContextKeyedServiceFactory*>* factories) {
195 DCHECK(factories); 196 DCHECK(factories);
196 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); 197 factories->insert(drive::DriveNotificationManagerFactory::GetInstance());
197 factories->insert(SigninManagerFactory::GetInstance()); 198 factories->insert(SigninManagerFactory::GetInstance());
198 factories->insert( 199 factories->insert(
199 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); 200 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory());
200 } 201 }
201 202
202 SyncEngine::~SyncEngine() { 203 SyncEngine::~SyncEngine() {
203 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 204 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this);
204 GetDriveService()->RemoveObserver(this); 205 GetDriveService()->RemoveObserver(this);
205 if (notification_manager_) 206 if (notification_manager_)
206 notification_manager_->RemoveObserver(this); 207 notification_manager_->RemoveObserver(this);
207 208
208 // TODO(tzik): Destroy |sync_worker_| and |worker_observer_| on the worker. 209 worker_task_runner_->DeleteSoon(FROM_HERE, worker_observer_.release());
210 worker_task_runner_->DeleteSoon(FROM_HERE, sync_worker_.release());
209 } 211 }
210 212
211 void SyncEngine::Initialize(const base::FilePath& base_dir, 213 void SyncEngine::Initialize(const base::FilePath& base_dir,
212 base::SequencedTaskRunner* file_task_runner, 214 base::SequencedTaskRunner* file_task_runner,
213 leveldb::Env* env_override) { 215 leveldb::Env* env_override) {
214 // DriveServiceWrapper and DriveServiceOnWorker relay communications 216 // DriveServiceWrapper and DriveServiceOnWorker relay communications
215 // between DriveService and syncers in SyncWorker. 217 // between DriveService and syncers in SyncWorker.
216 scoped_ptr<drive::DriveServiceInterface> 218 scoped_ptr<drive::DriveServiceInterface>
217 drive_service_on_worker( 219 drive_service_on_worker(
218 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(), 220 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(),
(...skipping 13 matching lines...) Expand all
232 file_task_runner)); 234 file_task_runner));
233 235
234 worker_observer_.reset( 236 worker_observer_.reset(
235 new WorkerObserver(base::MessageLoopProxy::current(), 237 new WorkerObserver(base::MessageLoopProxy::current(),
236 weak_ptr_factory_.GetWeakPtr())); 238 weak_ptr_factory_.GetWeakPtr()));
237 239
238 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; 240 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr;
239 if (extension_service_) 241 if (extension_service_)
240 extension_service_weak_ptr = extension_service_->AsWeakPtr(); 242 extension_service_weak_ptr = extension_service_->AsWeakPtr();
241 243
242 // TODO(peria): Use PostTask on |worker_task_runner_| to call this function.
243 sync_worker_ = SyncWorker::CreateOnWorker( 244 sync_worker_ = SyncWorker::CreateOnWorker(
244 base_dir, 245 base_dir,
245 worker_observer_.get(), 246 worker_observer_.get(),
246 extension_service_weak_ptr, 247 extension_service_weak_ptr,
247 sync_engine_context.Pass(), 248 sync_engine_context.Pass(),
248 env_override); 249 env_override);
249 250
250 if (notification_manager_) 251 if (notification_manager_)
251 notification_manager_->AddObserver(this); 252 notification_manager_->AddObserver(this);
252 GetDriveService()->AddObserver(this); 253 GetDriveService()->AddObserver(this);
253 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); 254 net::NetworkChangeNotifier::AddNetworkChangeObserver(this);
255
256 worker_task_runner_->PostTask(
257 FROM_HERE,
258 base::Bind(&SyncWorker::Initialize,
259 sync_worker_->AsWeakPtr()));
tzik 2014/05/26 06:50:21 Unretained?
peria 2014/05/26 07:55:09 Done.
260
254 } 261 }
255 262
256 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { 263 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) {
257 service_observers_.AddObserver(observer); 264 service_observers_.AddObserver(observer);
258 } 265 }
259 266
260 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { 267 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) {
261 file_status_observers_.AddObserver(observer); 268 file_status_observers_.AddObserver(observer);
262 } 269 }
263 270
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT; 547 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT;
541 if (is_app_enabled && !is_app_root_tracker_enabled) 548 if (is_app_enabled && !is_app_root_tracker_enabled)
542 EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); 549 EnableOrigin(origin, base::Bind(&EmptyStatusCallback));
543 else if (!is_app_enabled && is_app_root_tracker_enabled) 550 else if (!is_app_enabled && is_app_root_tracker_enabled)
544 DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); 551 DisableOrigin(origin, base::Bind(&EmptyStatusCallback));
545 } 552 }
546 } 553 }
547 554
548 } // namespace drive_backend 555 } // namespace drive_backend
549 } // namespace sync_file_system 556 } // namespace sync_file_system
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698