| 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 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 worker_task_runner_, | 310 worker_task_runner_, |
| 311 file_task_runner_)); | 311 file_task_runner_)); |
| 312 | 312 |
| 313 worker_observer_.reset( | 313 worker_observer_.reset( |
| 314 new WorkerObserver(ui_task_runner_, weak_ptr_factory_.GetWeakPtr())); | 314 new WorkerObserver(ui_task_runner_, weak_ptr_factory_.GetWeakPtr())); |
| 315 | 315 |
| 316 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; | 316 base::WeakPtr<ExtensionServiceInterface> extension_service_weak_ptr; |
| 317 if (extension_service_) | 317 if (extension_service_) |
| 318 extension_service_weak_ptr = extension_service_->AsWeakPtr(); | 318 extension_service_weak_ptr = extension_service_->AsWeakPtr(); |
| 319 | 319 |
| 320 sync_worker_.reset(new SyncWorker( | 320 scoped_ptr<SyncWorker> worker(new SyncWorker( |
| 321 sync_file_system_dir_, | 321 sync_file_system_dir_, |
| 322 extension_service_weak_ptr, | 322 extension_service_weak_ptr, |
| 323 sync_engine_context.Pass(), | 323 sync_engine_context.Pass(), |
| 324 env_override_)); | 324 env_override_)); |
| 325 | 325 |
| 326 sync_worker_->AddObserver(worker_observer_.get()); | 326 worker->AddObserver(worker_observer_.get()); |
| 327 sync_worker_ = worker.PassAs<SyncWorkerInterface>(); |
| 328 |
| 327 if (remote_change_processor_) | 329 if (remote_change_processor_) |
| 328 SetRemoteChangeProcessor(remote_change_processor_); | 330 SetRemoteChangeProcessor(remote_change_processor_); |
| 329 | 331 |
| 330 worker_task_runner_->PostTask( | 332 worker_task_runner_->PostTask( |
| 331 FROM_HERE, | 333 FROM_HERE, |
| 332 base::Bind(&SyncWorker::Initialize, | 334 base::Bind(&SyncWorkerInterface::Initialize, |
| 333 base::Unretained(sync_worker_.get()))); | 335 base::Unretained(sync_worker_.get()))); |
| 334 | 336 |
| 335 if (notification_manager_) | 337 if (notification_manager_) |
| 336 notification_manager_->AddObserver(this); | 338 notification_manager_->AddObserver(this); |
| 337 drive_service_->AddObserver(this); | 339 drive_service_->AddObserver(this); |
| 338 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); | 340 net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
| 339 | 341 |
| 340 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; | 342 service_state_ = REMOTE_SERVICE_TEMPORARY_UNAVAILABLE; |
| 341 SetSyncEnabled(sync_enabled_); | 343 SetSyncEnabled(sync_enabled_); |
| 342 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); | 344 OnNetworkChanged(net::NetworkChangeNotifier::GetConnectionType()); |
| 343 } | 345 } |
| 344 | 346 |
| 345 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { | 347 void SyncEngine::AddServiceObserver(SyncServiceObserver* observer) { |
| 346 service_observers_.AddObserver(observer); | 348 service_observers_.AddObserver(observer); |
| 347 } | 349 } |
| 348 | 350 |
| 349 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { | 351 void SyncEngine::AddFileStatusObserver(FileStatusObserver* observer) { |
| 350 file_status_observers_.AddObserver(observer); | 352 file_status_observers_.AddObserver(observer); |
| 351 } | 353 } |
| 352 | 354 |
| 353 void SyncEngine::RegisterOrigin(const GURL& origin, | 355 void SyncEngine::RegisterOrigin(const GURL& origin, |
| 354 const SyncStatusCallback& callback) { | 356 const SyncStatusCallback& callback) { |
| 355 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 357 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 356 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), | 358 FROM_HERE, base::Bind(&DidRegisterOrigin, base::TimeTicks::Now(), |
| 357 TrackCallback(callback))); | 359 TrackCallback(callback))); |
| 358 | 360 |
| 359 worker_task_runner_->PostTask( | 361 worker_task_runner_->PostTask( |
| 360 FROM_HERE, | 362 FROM_HERE, |
| 361 base::Bind(&SyncWorker::RegisterOrigin, | 363 base::Bind(&SyncWorkerInterface::RegisterOrigin, |
| 362 base::Unretained(sync_worker_.get()), | 364 base::Unretained(sync_worker_.get()), |
| 363 origin, relayed_callback)); | 365 origin, relayed_callback)); |
| 364 } | 366 } |
| 365 | 367 |
| 366 void SyncEngine::EnableOrigin( | 368 void SyncEngine::EnableOrigin( |
| 367 const GURL& origin, const SyncStatusCallback& callback) { | 369 const GURL& origin, const SyncStatusCallback& callback) { |
| 368 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 370 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 369 FROM_HERE, TrackCallback(callback)); | 371 FROM_HERE, TrackCallback(callback)); |
| 370 | 372 |
| 371 worker_task_runner_->PostTask( | 373 worker_task_runner_->PostTask( |
| 372 FROM_HERE, | 374 FROM_HERE, |
| 373 base::Bind(&SyncWorker::EnableOrigin, | 375 base::Bind(&SyncWorkerInterface::EnableOrigin, |
| 374 base::Unretained(sync_worker_.get()), | 376 base::Unretained(sync_worker_.get()), |
| 375 origin, relayed_callback)); | 377 origin, relayed_callback)); |
| 376 } | 378 } |
| 377 | 379 |
| 378 void SyncEngine::DisableOrigin( | 380 void SyncEngine::DisableOrigin( |
| 379 const GURL& origin, const SyncStatusCallback& callback) { | 381 const GURL& origin, const SyncStatusCallback& callback) { |
| 380 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 382 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 381 FROM_HERE, TrackCallback(callback)); | 383 FROM_HERE, TrackCallback(callback)); |
| 382 | 384 |
| 383 worker_task_runner_->PostTask( | 385 worker_task_runner_->PostTask( |
| 384 FROM_HERE, | 386 FROM_HERE, |
| 385 base::Bind(&SyncWorker::DisableOrigin, | 387 base::Bind(&SyncWorkerInterface::DisableOrigin, |
| 386 base::Unretained(sync_worker_.get()), | 388 base::Unretained(sync_worker_.get()), |
| 387 origin, | 389 origin, |
| 388 relayed_callback)); | 390 relayed_callback)); |
| 389 } | 391 } |
| 390 | 392 |
| 391 void SyncEngine::UninstallOrigin( | 393 void SyncEngine::UninstallOrigin( |
| 392 const GURL& origin, | 394 const GURL& origin, |
| 393 UninstallFlag flag, | 395 UninstallFlag flag, |
| 394 const SyncStatusCallback& callback) { | 396 const SyncStatusCallback& callback) { |
| 395 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 397 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 396 FROM_HERE, TrackCallback(callback)); | 398 FROM_HERE, TrackCallback(callback)); |
| 397 worker_task_runner_->PostTask( | 399 worker_task_runner_->PostTask( |
| 398 FROM_HERE, | 400 FROM_HERE, |
| 399 base::Bind(&SyncWorker::UninstallOrigin, | 401 base::Bind(&SyncWorkerInterface::UninstallOrigin, |
| 400 base::Unretained(sync_worker_.get()), | 402 base::Unretained(sync_worker_.get()), |
| 401 origin, flag, relayed_callback)); | 403 origin, flag, relayed_callback)); |
| 402 } | 404 } |
| 403 | 405 |
| 404 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { | 406 void SyncEngine::ProcessRemoteChange(const SyncFileCallback& callback) { |
| 405 SyncFileCallback tracked_callback = callback_tracker_.Register( | 407 SyncFileCallback tracked_callback = callback_tracker_.Register( |
| 406 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), | 408 base::Bind(callback, SYNC_STATUS_ABORT, fileapi::FileSystemURL()), |
| 407 callback); | 409 callback); |
| 408 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( | 410 SyncFileCallback relayed_callback = RelayCallbackToCurrentThread( |
| 409 FROM_HERE, tracked_callback); | 411 FROM_HERE, tracked_callback); |
| 410 worker_task_runner_->PostTask( | 412 worker_task_runner_->PostTask( |
| 411 FROM_HERE, | 413 FROM_HERE, |
| 412 base::Bind(&SyncWorker::ProcessRemoteChange, | 414 base::Bind(&SyncWorkerInterface::ProcessRemoteChange, |
| 413 base::Unretained(sync_worker_.get()), | 415 base::Unretained(sync_worker_.get()), |
| 414 relayed_callback)); | 416 relayed_callback)); |
| 415 } | 417 } |
| 416 | 418 |
| 417 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { | 419 void SyncEngine::SetRemoteChangeProcessor(RemoteChangeProcessor* processor) { |
| 418 remote_change_processor_ = processor; | 420 remote_change_processor_ = processor; |
| 419 remote_change_processor_wrapper_.reset( | 421 remote_change_processor_wrapper_.reset( |
| 420 new RemoteChangeProcessorWrapper(processor)); | 422 new RemoteChangeProcessorWrapper(processor)); |
| 421 | 423 |
| 422 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( | 424 remote_change_processor_on_worker_.reset(new RemoteChangeProcessorOnWorker( |
| 423 remote_change_processor_wrapper_->AsWeakPtr(), | 425 remote_change_processor_wrapper_->AsWeakPtr(), |
| 424 ui_task_runner_, worker_task_runner_)); | 426 ui_task_runner_, worker_task_runner_)); |
| 425 | 427 |
| 426 worker_task_runner_->PostTask( | 428 worker_task_runner_->PostTask( |
| 427 FROM_HERE, | 429 FROM_HERE, |
| 428 base::Bind(&SyncWorker::SetRemoteChangeProcessor, | 430 base::Bind(&SyncWorkerInterface::SetRemoteChangeProcessor, |
| 429 base::Unretained(sync_worker_.get()), | 431 base::Unretained(sync_worker_.get()), |
| 430 remote_change_processor_on_worker_.get())); | 432 remote_change_processor_on_worker_.get())); |
| 431 } | 433 } |
| 432 | 434 |
| 433 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { | 435 LocalChangeProcessor* SyncEngine::GetLocalChangeProcessor() { |
| 434 return this; | 436 return this; |
| 435 } | 437 } |
| 436 | 438 |
| 437 RemoteServiceState SyncEngine::GetCurrentState() const { | 439 RemoteServiceState SyncEngine::GetCurrentState() const { |
| 438 return service_state_; | 440 return service_state_; |
| 439 } | 441 } |
| 440 | 442 |
| 441 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { | 443 void SyncEngine::GetOriginStatusMap(const StatusMapCallback& callback) { |
| 442 StatusMapCallback tracked_callback = | 444 StatusMapCallback tracked_callback = |
| 443 callback_tracker_.Register( | 445 callback_tracker_.Register( |
| 444 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), | 446 base::Bind(callback, base::Passed(scoped_ptr<OriginStatusMap>())), |
| 445 callback); | 447 callback); |
| 446 | 448 |
| 447 StatusMapCallback relayed_callback = | 449 StatusMapCallback relayed_callback = |
| 448 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); | 450 RelayCallbackToCurrentThread(FROM_HERE, tracked_callback); |
| 449 | 451 |
| 450 worker_task_runner_->PostTask( | 452 worker_task_runner_->PostTask( |
| 451 FROM_HERE, | 453 FROM_HERE, |
| 452 base::Bind(&SyncWorker::GetOriginStatusMap, | 454 base::Bind(&SyncWorkerInterface::GetOriginStatusMap, |
| 453 base::Unretained(sync_worker_.get()), | 455 base::Unretained(sync_worker_.get()), |
| 454 relayed_callback)); | 456 relayed_callback)); |
| 455 } | 457 } |
| 456 | 458 |
| 457 void SyncEngine::DumpFiles(const GURL& origin, | 459 void SyncEngine::DumpFiles(const GURL& origin, |
| 458 const ListCallback& callback) { | 460 const ListCallback& callback) { |
| 459 ListCallback tracked_callback = | 461 ListCallback tracked_callback = |
| 460 callback_tracker_.Register( | 462 callback_tracker_.Register( |
| 461 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 463 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
| 462 callback); | 464 callback); |
| 463 | 465 |
| 464 PostTaskAndReplyWithResult( | 466 PostTaskAndReplyWithResult( |
| 465 worker_task_runner_, | 467 worker_task_runner_, |
| 466 FROM_HERE, | 468 FROM_HERE, |
| 467 base::Bind(&SyncWorker::DumpFiles, | 469 base::Bind(&SyncWorkerInterface::DumpFiles, |
| 468 base::Unretained(sync_worker_.get()), | 470 base::Unretained(sync_worker_.get()), |
| 469 origin), | 471 origin), |
| 470 tracked_callback); | 472 tracked_callback); |
| 471 } | 473 } |
| 472 | 474 |
| 473 void SyncEngine::DumpDatabase(const ListCallback& callback) { | 475 void SyncEngine::DumpDatabase(const ListCallback& callback) { |
| 474 ListCallback tracked_callback = | 476 ListCallback tracked_callback = |
| 475 callback_tracker_.Register( | 477 callback_tracker_.Register( |
| 476 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), | 478 base::Bind(callback, base::Passed(scoped_ptr<base::ListValue>())), |
| 477 callback); | 479 callback); |
| 478 | 480 |
| 479 PostTaskAndReplyWithResult( | 481 PostTaskAndReplyWithResult( |
| 480 worker_task_runner_, | 482 worker_task_runner_, |
| 481 FROM_HERE, | 483 FROM_HERE, |
| 482 base::Bind(&SyncWorker::DumpDatabase, | 484 base::Bind(&SyncWorkerInterface::DumpDatabase, |
| 483 base::Unretained(sync_worker_.get())), | 485 base::Unretained(sync_worker_.get())), |
| 484 tracked_callback); | 486 tracked_callback); |
| 485 } | 487 } |
| 486 | 488 |
| 487 void SyncEngine::SetSyncEnabled(bool sync_enabled) { | 489 void SyncEngine::SetSyncEnabled(bool sync_enabled) { |
| 488 sync_enabled_ = sync_enabled; | 490 sync_enabled_ = sync_enabled; |
| 489 worker_task_runner_->PostTask( | 491 worker_task_runner_->PostTask( |
| 490 FROM_HERE, | 492 FROM_HERE, |
| 491 base::Bind(&SyncWorker::SetSyncEnabled, | 493 base::Bind(&SyncWorkerInterface::SetSyncEnabled, |
| 492 base::Unretained(sync_worker_.get()), | 494 base::Unretained(sync_worker_.get()), |
| 493 sync_enabled)); | 495 sync_enabled)); |
| 494 } | 496 } |
| 495 | 497 |
| 496 void SyncEngine::PromoteDemotedChanges() { | 498 void SyncEngine::PromoteDemotedChanges() { |
| 497 worker_task_runner_->PostTask( | 499 worker_task_runner_->PostTask( |
| 498 FROM_HERE, | 500 FROM_HERE, |
| 499 base::Bind(&SyncWorker::PromoteDemotedChanges, | 501 base::Bind(&SyncWorkerInterface::PromoteDemotedChanges, |
| 500 base::Unretained(sync_worker_.get()))); | 502 base::Unretained(sync_worker_.get()))); |
| 501 } | 503 } |
| 502 | 504 |
| 503 void SyncEngine::ApplyLocalChange( | 505 void SyncEngine::ApplyLocalChange( |
| 504 const FileChange& local_change, | 506 const FileChange& local_change, |
| 505 const base::FilePath& local_path, | 507 const base::FilePath& local_path, |
| 506 const SyncFileMetadata& local_metadata, | 508 const SyncFileMetadata& local_metadata, |
| 507 const fileapi::FileSystemURL& url, | 509 const fileapi::FileSystemURL& url, |
| 508 const SyncStatusCallback& callback) { | 510 const SyncStatusCallback& callback) { |
| 509 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( | 511 SyncStatusCallback relayed_callback = RelayCallbackToCurrentThread( |
| 510 FROM_HERE, TrackCallback(callback)); | 512 FROM_HERE, TrackCallback(callback)); |
| 511 worker_task_runner_->PostTask( | 513 worker_task_runner_->PostTask( |
| 512 FROM_HERE, | 514 FROM_HERE, |
| 513 base::Bind(&SyncWorker::ApplyLocalChange, | 515 base::Bind(&SyncWorkerInterface::ApplyLocalChange, |
| 514 base::Unretained(sync_worker_.get()), | 516 base::Unretained(sync_worker_.get()), |
| 515 local_change, | 517 local_change, |
| 516 local_path, | 518 local_path, |
| 517 local_metadata, | 519 local_metadata, |
| 518 url, | 520 url, |
| 519 relayed_callback)); | 521 relayed_callback)); |
| 520 } | 522 } |
| 521 | 523 |
| 522 void SyncEngine::OnNotificationReceived() { | 524 void SyncEngine::OnNotificationReceived() { |
| 523 worker_task_runner_->PostTask( | 525 worker_task_runner_->PostTask( |
| 524 FROM_HERE, | 526 FROM_HERE, |
| 525 base::Bind(&SyncWorker::OnNotificationReceived, | 527 base::Bind(&SyncWorkerInterface::OnNotificationReceived, |
| 526 base::Unretained(sync_worker_.get()))); | 528 base::Unretained(sync_worker_.get()))); |
| 527 } | 529 } |
| 528 | 530 |
| 529 void SyncEngine::OnPushNotificationEnabled(bool) {} | 531 void SyncEngine::OnPushNotificationEnabled(bool) {} |
| 530 | 532 |
| 531 void SyncEngine::OnReadyToSendRequests() { | 533 void SyncEngine::OnReadyToSendRequests() { |
| 532 // TODO(tzik): Drop current Syncworker and replace with new one. | 534 // TODO(tzik): Drop current Syncworker and replace with new one. |
| 533 | 535 |
| 534 const std::string account_id = | 536 const std::string account_id = |
| 535 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; | 537 signin_manager_ ? signin_manager_->GetAuthenticatedAccountId() : ""; |
| 536 | 538 |
| 537 worker_task_runner_->PostTask( | 539 worker_task_runner_->PostTask( |
| 538 FROM_HERE, | 540 FROM_HERE, |
| 539 base::Bind(&SyncWorker::OnReadyToSendRequests, | 541 base::Bind(&SyncWorkerInterface::OnReadyToSendRequests, |
| 540 base::Unretained(sync_worker_.get()), | 542 base::Unretained(sync_worker_.get()), |
| 541 account_id)); | 543 account_id)); |
| 542 } | 544 } |
| 543 | 545 |
| 544 void SyncEngine::OnRefreshTokenInvalid() { | 546 void SyncEngine::OnRefreshTokenInvalid() { |
| 545 worker_task_runner_->PostTask( | 547 worker_task_runner_->PostTask( |
| 546 FROM_HERE, | 548 FROM_HERE, |
| 547 base::Bind(&SyncWorker::OnRefreshTokenInvalid, | 549 base::Bind(&SyncWorkerInterface::OnRefreshTokenInvalid, |
| 548 base::Unretained(sync_worker_.get()))); | 550 base::Unretained(sync_worker_.get()))); |
| 549 } | 551 } |
| 550 | 552 |
| 551 void SyncEngine::OnNetworkChanged( | 553 void SyncEngine::OnNetworkChanged( |
| 552 net::NetworkChangeNotifier::ConnectionType type) { | 554 net::NetworkChangeNotifier::ConnectionType type) { |
| 553 worker_task_runner_->PostTask( | 555 worker_task_runner_->PostTask( |
| 554 FROM_HERE, | 556 FROM_HERE, |
| 555 base::Bind(&SyncWorker::OnNetworkChanged, | 557 base::Bind(&SyncWorkerInterface::OnNetworkChanged, |
| 556 base::Unretained(sync_worker_.get()), | 558 base::Unretained(sync_worker_.get()), |
| 557 type)); | 559 type)); |
| 558 } | 560 } |
| 559 | 561 |
| 560 SyncEngine::SyncEngine( | 562 SyncEngine::SyncEngine( |
| 561 base::SingleThreadTaskRunner* ui_task_runner, | 563 base::SingleThreadTaskRunner* ui_task_runner, |
| 562 base::SequencedTaskRunner* worker_task_runner, | 564 base::SequencedTaskRunner* worker_task_runner, |
| 563 base::SequencedTaskRunner* file_task_runner, | 565 base::SequencedTaskRunner* file_task_runner, |
| 564 base::SequencedTaskRunner* drive_task_runner, | 566 base::SequencedTaskRunner* drive_task_runner, |
| 565 const base::FilePath& sync_file_system_dir, | 567 const base::FilePath& sync_file_system_dir, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 | 616 |
| 615 SyncStatusCallback SyncEngine::TrackCallback( | 617 SyncStatusCallback SyncEngine::TrackCallback( |
| 616 const SyncStatusCallback& callback) { | 618 const SyncStatusCallback& callback) { |
| 617 return callback_tracker_.Register( | 619 return callback_tracker_.Register( |
| 618 base::Bind(callback, SYNC_STATUS_ABORT), | 620 base::Bind(callback, SYNC_STATUS_ABORT), |
| 619 callback); | 621 callback); |
| 620 } | 622 } |
| 621 | 623 |
| 622 } // namespace drive_backend | 624 } // namespace drive_backend |
| 623 } // namespace sync_file_system | 625 } // namespace sync_file_system |
| OLD | NEW |