| 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 "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/threading/sequenced_worker_pool.h" | 8 #include "base/threading/sequenced_worker_pool.h" |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/drive/drive_api_service.h" | 10 #include "chrome/browser/drive/drive_api_service.h" |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 drive::DriveNotificationManager* notification_manager, | 389 drive::DriveNotificationManager* notification_manager, |
| 390 ExtensionServiceInterface* extension_service) | 390 ExtensionServiceInterface* extension_service) |
| 391 : base_dir_(base_dir), | 391 : base_dir_(base_dir), |
| 392 task_runner_(task_runner), | 392 task_runner_(task_runner), |
| 393 drive_service_(drive_service.Pass()), | 393 drive_service_(drive_service.Pass()), |
| 394 drive_uploader_(drive_uploader.Pass()), | 394 drive_uploader_(drive_uploader.Pass()), |
| 395 notification_manager_(notification_manager), | 395 notification_manager_(notification_manager), |
| 396 extension_service_(extension_service), | 396 extension_service_(extension_service), |
| 397 remote_change_processor_(NULL), | 397 remote_change_processor_(NULL), |
| 398 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), | 398 service_state_(REMOTE_SERVICE_TEMPORARY_UNAVAILABLE), |
| 399 should_check_conflict_(true), |
| 399 should_check_remote_change_(true), | 400 should_check_remote_change_(true), |
| 400 sync_enabled_(false), | 401 sync_enabled_(false), |
| 401 conflict_resolution_policy_(CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), | 402 conflict_resolution_policy_(CONFLICT_RESOLUTION_POLICY_LAST_WRITE_WIN), |
| 402 network_available_(false), | 403 network_available_(false), |
| 403 weak_ptr_factory_(this) { | 404 weak_ptr_factory_(this) { |
| 404 } | 405 } |
| 405 | 406 |
| 406 void SyncEngine::DoDisableApp(const std::string& app_id, | 407 void SyncEngine::DoDisableApp(const std::string& app_id, |
| 407 const SyncStatusCallback& callback) { | 408 const SyncStatusCallback& callback) { |
| 408 metadata_database_->DisableApp(app_id, callback); | 409 metadata_database_->DisableApp(app_id, callback); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 427 | 428 |
| 428 if (syncer->url().is_valid() && syncer->sync_action() != SYNC_ACTION_NONE) { | 429 if (syncer->url().is_valid() && syncer->sync_action() != SYNC_ACTION_NONE) { |
| 429 FOR_EACH_OBSERVER(FileStatusObserver, | 430 FOR_EACH_OBSERVER(FileStatusObserver, |
| 430 file_status_observers_, | 431 file_status_observers_, |
| 431 OnFileStatusChanged(syncer->url(), | 432 OnFileStatusChanged(syncer->url(), |
| 432 SYNC_FILE_STATUS_SYNCED, | 433 SYNC_FILE_STATUS_SYNCED, |
| 433 syncer->sync_action(), | 434 syncer->sync_action(), |
| 434 SYNC_DIRECTION_REMOTE_TO_LOCAL)); | 435 SYNC_DIRECTION_REMOTE_TO_LOCAL)); |
| 435 } | 436 } |
| 436 | 437 |
| 438 if (status == SYNC_STATUS_OK) |
| 439 should_check_conflict_ = true; |
| 437 callback.Run(status, syncer->url()); | 440 callback.Run(status, syncer->url()); |
| 438 } | 441 } |
| 439 | 442 |
| 440 void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer, | 443 void SyncEngine::DidApplyLocalChange(LocalToRemoteSyncer* syncer, |
| 441 const SyncStatusCallback& callback, | 444 const SyncStatusCallback& callback, |
| 442 SyncStatusCode status) { | 445 SyncStatusCode status) { |
| 443 util::Log(logging::LOG_VERBOSE, FROM_HERE, | 446 util::Log(logging::LOG_VERBOSE, FROM_HERE, |
| 444 "[Local->Remote] ApplyLocalChange finished --> %s", | 447 "[Local->Remote] ApplyLocalChange finished --> %s", |
| 445 SyncStatusCodeToString(status)); | 448 SyncStatusCodeToString(status)); |
| 446 | 449 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 462 | 465 |
| 463 if (status != SYNC_STATUS_OK && | 466 if (status != SYNC_STATUS_OK && |
| 464 status != SYNC_STATUS_NO_CHANGE_TO_SYNC) { | 467 status != SYNC_STATUS_NO_CHANGE_TO_SYNC) { |
| 465 callback.Run(status); | 468 callback.Run(status); |
| 466 return; | 469 return; |
| 467 } | 470 } |
| 468 | 471 |
| 469 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC) | 472 if (status == SYNC_STATUS_NO_CHANGE_TO_SYNC) |
| 470 metadata_database_->PromoteLowerPriorityTrackersToNormal(); | 473 metadata_database_->PromoteLowerPriorityTrackersToNormal(); |
| 471 | 474 |
| 475 if (status == SYNC_STATUS_OK) |
| 476 should_check_conflict_ = true; |
| 472 callback.Run(status); | 477 callback.Run(status); |
| 473 } | 478 } |
| 474 | 479 |
| 475 void SyncEngine::MaybeStartFetchChanges() { | 480 void SyncEngine::MaybeStartFetchChanges() { |
| 476 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) | 481 if (GetCurrentState() == REMOTE_SERVICE_DISABLED) |
| 477 return; | 482 return; |
| 478 | 483 |
| 479 if (!metadata_database_) | 484 if (!metadata_database_) |
| 480 return; | 485 return; |
| 481 | 486 |
| 482 base::TimeTicks now = base::TimeTicks::Now(); | 487 base::TimeTicks now = base::TimeTicks::Now(); |
| 483 if (!should_check_remote_change_ && now < time_to_check_changes_) { | 488 if (!should_check_remote_change_ && now < time_to_check_changes_) { |
| 484 if (!metadata_database_->HasDirtyTracker()) { | 489 if (!metadata_database_->HasDirtyTracker() && should_check_conflict_) { |
| 485 task_manager_->ScheduleSyncTaskIfIdle( | 490 task_manager_->ScheduleSyncTaskIfIdle( |
| 486 scoped_ptr<SyncTask>(new ConflictResolver(this)), | 491 scoped_ptr<SyncTask>(new ConflictResolver(this)), |
| 487 SyncStatusCallback()); | 492 base::Bind(&SyncEngine::DidResolveConflict, |
| 493 weak_ptr_factory_.GetWeakPtr())); |
| 488 } | 494 } |
| 489 return; | 495 return; |
| 490 } | 496 } |
| 491 | 497 |
| 492 if (task_manager_->ScheduleSyncTaskIfIdle( | 498 if (task_manager_->ScheduleSyncTaskIfIdle( |
| 493 scoped_ptr<SyncTask>(new ListChangesTask(this)), | 499 scoped_ptr<SyncTask>(new ListChangesTask(this)), |
| 494 SyncStatusCallback())) { | 500 base::Bind(&SyncEngine::DidFetchChanges, |
| 501 weak_ptr_factory_.GetWeakPtr()))) { |
| 495 should_check_remote_change_ = false; | 502 should_check_remote_change_ = false; |
| 496 time_to_check_changes_ = | 503 time_to_check_changes_ = |
| 497 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); | 504 now + base::TimeDelta::FromSeconds(kListChangesRetryDelaySeconds); |
| 498 } | 505 } |
| 499 } | 506 } |
| 500 | 507 |
| 508 void SyncEngine::DidResolveConflict(SyncStatusCode status) { |
| 509 if (status == SYNC_STATUS_NO_CONFLICT) |
| 510 should_check_conflict_ = false; |
| 511 } |
| 512 |
| 513 void SyncEngine::DidFetchChanges(SyncStatusCode status) { |
| 514 if (status == SYNC_STATUS_OK) |
| 515 should_check_conflict_ = true; |
| 516 } |
| 517 |
| 501 void SyncEngine::UpdateServiceStateFromSyncStatusCode( | 518 void SyncEngine::UpdateServiceStateFromSyncStatusCode( |
| 502 SyncStatusCode status, | 519 SyncStatusCode status, |
| 503 bool used_network) { | 520 bool used_network) { |
| 504 switch (status) { | 521 switch (status) { |
| 505 case SYNC_STATUS_OK: | 522 case SYNC_STATUS_OK: |
| 506 if (used_network) | 523 if (used_network) |
| 507 UpdateServiceState(REMOTE_SERVICE_OK, std::string()); | 524 UpdateServiceState(REMOTE_SERVICE_OK, std::string()); |
| 508 break; | 525 break; |
| 509 | 526 |
| 510 // Authentication error. | 527 // Authentication error. |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 590 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT; | 607 tracker.tracker_kind() == TRACKER_KIND_APP_ROOT; |
| 591 if (is_app_enabled && !is_app_root_tracker_enabled) | 608 if (is_app_enabled && !is_app_root_tracker_enabled) |
| 592 EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); | 609 EnableOrigin(origin, base::Bind(&EmptyStatusCallback)); |
| 593 else if (!is_app_enabled && is_app_root_tracker_enabled) | 610 else if (!is_app_enabled && is_app_root_tracker_enabled) |
| 594 DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); | 611 DisableOrigin(origin, base::Bind(&EmptyStatusCallback)); |
| 595 } | 612 } |
| 596 } | 613 } |
| 597 | 614 |
| 598 } // namespace drive_backend | 615 } // namespace drive_backend |
| 599 } // namespace sync_file_system | 616 } // namespace sync_file_system |
| OLD | NEW |