OLD | NEW |
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" |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 ExtensionService* extension_service = | 209 ExtensionService* extension_service = |
210 extensions::ExtensionSystem::Get(context)->extension_service(); | 210 extensions::ExtensionSystem::Get(context)->extension_service(); |
211 SigninManagerBase* signin_manager = | 211 SigninManagerBase* signin_manager = |
212 SigninManagerFactory::GetForProfile(profile); | 212 SigninManagerFactory::GetForProfile(profile); |
213 OAuth2TokenService* token_service = | 213 OAuth2TokenService* token_service = |
214 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); | 214 ProfileOAuth2TokenServiceFactory::GetForProfile(profile); |
215 scoped_refptr<net::URLRequestContextGetter> request_context = | 215 scoped_refptr<net::URLRequestContextGetter> request_context = |
216 context->GetRequestContext(); | 216 context->GetRequestContext(); |
217 | 217 |
218 scoped_ptr<drive_backend::SyncEngine> sync_engine( | 218 scoped_ptr<drive_backend::SyncEngine> sync_engine( |
219 new SyncEngine(ui_task_runner, | 219 new SyncEngine(ui_task_runner.get(), |
220 worker_task_runner, | 220 worker_task_runner.get(), |
221 drive_task_runner, | 221 drive_task_runner.get(), |
222 GetSyncFileSystemDir(context->GetPath()), | 222 GetSyncFileSystemDir(context->GetPath()), |
223 task_logger, | 223 task_logger, |
224 notification_manager, | 224 notification_manager, |
225 extension_service, | 225 extension_service, |
226 signin_manager, | 226 signin_manager, |
227 token_service, | 227 token_service, |
228 request_context, | 228 request_context.get(), |
229 make_scoped_ptr(new DriveServiceFactory()), | 229 make_scoped_ptr(new DriveServiceFactory()), |
230 NULL /* env_override */)); | 230 NULL /* env_override */)); |
231 | 231 |
232 sync_engine->Initialize(); | 232 sync_engine->Initialize(); |
233 return sync_engine.Pass(); | 233 return sync_engine.Pass(); |
234 } | 234 } |
235 | 235 |
236 void SyncEngine::AppendDependsOnFactories( | 236 void SyncEngine::AppendDependsOnFactories( |
237 std::set<BrowserContextKeyedServiceFactory*>* factories) { | 237 std::set<BrowserContextKeyedServiceFactory*>* factories) { |
238 DCHECK(factories); | 238 DCHECK(factories); |
239 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); | 239 factories->insert(drive::DriveNotificationManagerFactory::GetInstance()); |
240 factories->insert(SigninManagerFactory::GetInstance()); | 240 factories->insert(SigninManagerFactory::GetInstance()); |
241 factories->insert( | 241 factories->insert( |
242 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); | 242 extensions::ExtensionsBrowserClient::Get()->GetExtensionSystemFactory()); |
243 factories->insert(ProfileOAuth2TokenServiceFactory::GetInstance()); | 243 factories->insert(ProfileOAuth2TokenServiceFactory::GetInstance()); |
244 } | 244 } |
245 | 245 |
246 SyncEngine::~SyncEngine() { | 246 SyncEngine::~SyncEngine() { |
247 Reset(); | 247 Reset(); |
248 | 248 |
249 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); | 249 net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
250 if (signin_manager_) | 250 if (signin_manager_) |
251 signin_manager_->RemoveObserver(this); | 251 signin_manager_->RemoveObserver(this); |
252 if (notification_manager_) | 252 if (notification_manager_) |
253 notification_manager_->RemoveObserver(this); | 253 notification_manager_->RemoveObserver(this); |
254 } | 254 } |
255 | 255 |
256 void SyncEngine::Reset() { | 256 void SyncEngine::Reset() { |
257 if (drive_service_) | 257 if (drive_service_) |
258 drive_service_->RemoveObserver(this); | 258 drive_service_->RemoveObserver(this); |
259 | 259 |
260 DeleteSoon(FROM_HERE, worker_task_runner_, sync_worker_.Pass()); | 260 DeleteSoon(FROM_HERE, worker_task_runner_.get(), sync_worker_.Pass()); |
261 DeleteSoon(FROM_HERE, worker_task_runner_, worker_observer_.Pass()); | 261 DeleteSoon(FROM_HERE, worker_task_runner_.get(), worker_observer_.Pass()); |
262 DeleteSoon(FROM_HERE, worker_task_runner_, | 262 DeleteSoon(FROM_HERE, |
| 263 worker_task_runner_.get(), |
263 remote_change_processor_on_worker_.Pass()); | 264 remote_change_processor_on_worker_.Pass()); |
264 | 265 |
265 drive_service_wrapper_.reset(); | 266 drive_service_wrapper_.reset(); |
266 drive_service_.reset(); | 267 drive_service_.reset(); |
267 drive_uploader_wrapper_.reset(); | 268 drive_uploader_wrapper_.reset(); |
268 drive_uploader_.reset(); | 269 drive_uploader_.reset(); |
269 remote_change_processor_wrapper_.reset(); | 270 remote_change_processor_wrapper_.reset(); |
270 callback_tracker_.AbortAll(); | 271 callback_tracker_.AbortAll(); |
271 } | 272 } |
272 | 273 |
273 void SyncEngine::Initialize() { | 274 void SyncEngine::Initialize() { |
274 Reset(); | 275 Reset(); |
275 | 276 |
276 if (!signin_manager_ || | 277 if (!signin_manager_ || |
277 signin_manager_->GetAuthenticatedAccountId().empty()) | 278 signin_manager_->GetAuthenticatedAccountId().empty()) |
278 return; | 279 return; |
279 | 280 |
280 DCHECK(drive_service_factory_); | 281 DCHECK(drive_service_factory_); |
281 scoped_ptr<drive::DriveServiceInterface> drive_service = | 282 scoped_ptr<drive::DriveServiceInterface> drive_service = |
282 drive_service_factory_->CreateDriveService( | 283 drive_service_factory_->CreateDriveService( |
283 token_service_, request_context_, drive_task_runner_); | 284 token_service_, request_context_.get(), drive_task_runner_.get()); |
284 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( | 285 scoped_ptr<drive::DriveUploaderInterface> drive_uploader( |
285 new drive::DriveUploader(drive_service.get(), drive_task_runner_)); | 286 new drive::DriveUploader(drive_service.get(), drive_task_runner_.get())); |
286 | 287 |
287 InitializeInternal(drive_service.Pass(), drive_uploader.Pass(), | 288 InitializeInternal(drive_service.Pass(), drive_uploader.Pass(), |
288 scoped_ptr<SyncWorkerInterface>()); | 289 scoped_ptr<SyncWorkerInterface>()); |
289 } | 290 } |
290 | 291 |
291 void SyncEngine::InitializeForTesting( | 292 void SyncEngine::InitializeForTesting( |
292 scoped_ptr<drive::DriveServiceInterface> drive_service, | 293 scoped_ptr<drive::DriveServiceInterface> drive_service, |
293 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, | 294 scoped_ptr<drive::DriveUploaderInterface> drive_uploader, |
294 scoped_ptr<SyncWorkerInterface> sync_worker) { | 295 scoped_ptr<SyncWorkerInterface> sync_worker) { |
295 Reset(); | 296 Reset(); |
(...skipping 14 matching lines...) Expand all Loading... |
310 drive_service_->Initialize(account_id); | 311 drive_service_->Initialize(account_id); |
311 | 312 |
312 drive_uploader_ = drive_uploader.Pass(); | 313 drive_uploader_ = drive_uploader.Pass(); |
313 drive_uploader_wrapper_.reset( | 314 drive_uploader_wrapper_.reset( |
314 new DriveUploaderWrapper(drive_uploader_.get())); | 315 new DriveUploaderWrapper(drive_uploader_.get())); |
315 | 316 |
316 // DriveServiceWrapper and DriveServiceOnWorker relay communications | 317 // DriveServiceWrapper and DriveServiceOnWorker relay communications |
317 // between DriveService and syncers in SyncWorker. | 318 // between DriveService and syncers in SyncWorker. |
318 scoped_ptr<drive::DriveServiceInterface> drive_service_on_worker( | 319 scoped_ptr<drive::DriveServiceInterface> drive_service_on_worker( |
319 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(), | 320 new DriveServiceOnWorker(drive_service_wrapper_->AsWeakPtr(), |
320 ui_task_runner_, | 321 ui_task_runner_.get(), |
321 worker_task_runner_)); | 322 worker_task_runner_.get())); |
322 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker( | 323 scoped_ptr<drive::DriveUploaderInterface> drive_uploader_on_worker( |
323 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(), | 324 new DriveUploaderOnWorker(drive_uploader_wrapper_->AsWeakPtr(), |
324 ui_task_runner_, | 325 ui_task_runner_.get(), |
325 worker_task_runner_)); | 326 worker_task_runner_.get())); |
326 scoped_ptr<SyncEngineContext> sync_engine_context( | 327 scoped_ptr<SyncEngineContext> sync_engine_context( |
327 new SyncEngineContext(drive_service_on_worker.Pass(), | 328 new SyncEngineContext(drive_service_on_worker.Pass(), |
328 drive_uploader_on_worker.Pass(), | 329 drive_uploader_on_worker.Pass(), |
329 task_logger_, | 330 task_logger_, |
330 ui_task_runner_, | 331 ui_task_runner_.get(), |
331 worker_task_runner_)); | 332 worker_task_runner_.get())); |
332 | 333 |
333 worker_observer_.reset( | 334 worker_observer_.reset(new WorkerObserver(ui_task_runner_.get(), |
334 new WorkerObserver(ui_task_runner_, weak_ptr_factory_.GetWeakPtr())); | 335 weak_ptr_factory_.GetWeakPtr())); |
335 | 336 |
336 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; | 337 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; |
337 if (extension_service_) | 338 if (extension_service_) |
338 extension_service_weak_ptr = extension_service_->AsWeakPtr(); | 339 extension_service_weak_ptr = extension_service_->AsWeakPtr(); |
339 | 340 |
340 if (!sync_worker) { | 341 if (!sync_worker) { |
341 sync_worker.reset(new SyncWorker( | 342 sync_worker.reset(new SyncWorker( |
342 sync_file_system_dir_, | 343 sync_file_system_dir_, |
343 extension_service_weak_ptr, | 344 extension_service_weak_ptr, |
344 env_override_)); | 345 env_override_)); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 remote_change_processor_ = processor; | 487 remote_change_processor_ = processor; |
487 | 488 |
488 if (!sync_worker_) | 489 if (!sync_worker_) |
489 return; | 490 return; |
490 | 491 |
491 remote_change_processor_wrapper_.reset( | 492 remote_change_processor_wrapper_.reset( |
492 new RemoteChangeProcessorWrapper(processor)); | 493 new RemoteChangeProcessorWrapper(processor)); |
493 | 494 |
494 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( | 495 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( |
495 remote_change_processor_wrapper_->AsWeakPtr(), | 496 remote_change_processor_wrapper_->AsWeakPtr(), |
496 ui_task_runner_, worker_task_runner_)); | 497 ui_task_runner_.get(), |
| 498 worker_task_runner_.get())); |
497 | 499 |
498 worker_task_runner_->PostTask( | 500 worker_task_runner_->PostTask( |
499 FROM_HERE, | 501 FROM_HERE, |
500 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, | 502 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, |
501 base::Unretained(sync_worker_.get()), | 503 base::Unretained(sync_worker_.get()), |
502 remote_change_processor_on_worker_.get())); | 504 remote_change_processor_on_worker_.get())); |
503 } | 505 } |
504 | 506 |
505 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { | 507 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
506 return this; | 508 return this; |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
541 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); | 543 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); |
542 | 544 |
543 if (!sync_worker_) { | 545 if (!sync_worker_) { |
544 abort_closure.Run(); | 546 abort_closure.Run(); |
545 return; | 547 return; |
546 } | 548 } |
547 | 549 |
548 ListCallback tracked_callback = | 550 ListCallback tracked_callback = |
549 callback_tracker_.Register(abort_closure, callback); | 551 callback_tracker_.Register(abort_closure, callback); |
550 | 552 |
551 PostTaskAndReplyWithResult( | 553 PostTaskAndReplyWithResult(worker_task_runner_.get(), |
552 worker_task_runner_, | 554 FROM_HERE, |
553 FROM_HERE, | 555 base::Bind(&SyncWorkerInterface::DumpFiles, |
554 base::Bind(&SyncWorkerInterface::DumpFiles, | 556 base::Unretained(sync_worker_.get()), |
555 base::Unretained(sync_worker_.get()), | 557 origin), |
556 origin), | 558 tracked_callback); |
557 tracked_callback); | |
558 } | 559 } |
559 | 560 |
560 void SyncEngine::DumpDatabase(const ListCallback& callback) { | 561 void SyncEngine::DumpDatabase(const ListCallback& callback) { |
561 base::Closure abort_closure = | 562 base::Closure abort_closure = |
562 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); | 563 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())); |
563 | 564 |
564 if (!sync_worker_) { | 565 if (!sync_worker_) { |
565 abort_closure.Run(); | 566 abort_closure.Run(); |
566 return; | 567 return; |
567 } | 568 } |
568 | 569 |
569 ListCallback tracked_callback = | 570 ListCallback tracked_callback = |
570 callback_tracker_.Register(abort_closure, callback); | 571 callback_tracker_.Register(abort_closure, callback); |
571 | 572 |
572 PostTaskAndReplyWithResult( | 573 PostTaskAndReplyWithResult(worker_task_runner_.get(), |
573 worker_task_runner_, | 574 FROM_HERE, |
574 FROM_HERE, | 575 base::Bind(&SyncWorkerInterface::DumpDatabase, |
575 base::Bind(&SyncWorkerInterface::DumpDatabase, | 576 base::Unretained(sync_worker_.get())), |
576 base::Unretained(sync_worker_.get())), | 577 tracked_callback); |
577 tracked_callback); | |
578 } | 578 } |
579 | 579 |
580 void SyncEngine::SetSyncEnabled(bool sync_enabled) { | 580 void SyncEngine::SetSyncEnabled(bool sync_enabled) { |
581 sync_enabled_ = sync_enabled; | 581 sync_enabled_ = sync_enabled; |
582 | 582 |
583 if (!sync_worker_) | 583 if (!sync_worker_) |
584 return; | 584 return; |
585 | 585 |
586 worker_task_runner_->PostTask( | 586 worker_task_runner_->PostTask( |
587 FROM_HERE, | 587 FROM_HERE, |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 | 782 |
783 SyncStatusCallback SyncEngine::TrackCallback( | 783 SyncStatusCallback SyncEngine::TrackCallback( |
784 const SyncStatusCallback& callback) { | 784 const SyncStatusCallback& callback) { |
785 return callback_tracker_.Register( | 785 return callback_tracker_.Register( |
786 base::Bind(callback, SYNC_STATUS_ABORT), | 786 base::Bind(callback, SYNC_STATUS_ABORT), |
787 callback); | 787 callback); |
788 } | 788 } |
789 | 789 |
790 } // namespace drive_backend | 790 } // namespace drive_backend |
791 } // namespace sync_file_system | 791 } // namespace sync_file_system |
OLD | NEW |