| 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 |