| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_worker.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/sync_worker.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 DCHECK(sequence_checker_.CalledOnValidSequence()); | 209 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 210 | 210 |
| 211 if (sync_enabled_ == enabled) | 211 if (sync_enabled_ == enabled) |
| 212 return; | 212 return; |
| 213 | 213 |
| 214 RemoteServiceState old_state = GetCurrentState(); | 214 RemoteServiceState old_state = GetCurrentState(); |
| 215 sync_enabled_ = enabled; | 215 sync_enabled_ = enabled; |
| 216 if (old_state == GetCurrentState()) | 216 if (old_state == GetCurrentState()) |
| 217 return; | 217 return; |
| 218 | 218 |
| 219 FOR_EACH_OBSERVER( | 219 for (auto& observer : observers_) { |
| 220 Observer, | 220 observer.UpdateServiceState( |
| 221 observers_, | 221 GetCurrentState(), enabled ? "Sync is enabled" : "Sync is disabled"); |
| 222 UpdateServiceState( | 222 } |
| 223 GetCurrentState(), | |
| 224 enabled ? "Sync is enabled" : "Sync is disabled")); | |
| 225 } | 223 } |
| 226 | 224 |
| 227 void SyncWorker::PromoteDemotedChanges(const base::Closure& callback) { | 225 void SyncWorker::PromoteDemotedChanges(const base::Closure& callback) { |
| 228 DCHECK(sequence_checker_.CalledOnValidSequence()); | 226 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 229 | 227 |
| 230 MetadataDatabase* metadata_db = GetMetadataDatabase(); | 228 MetadataDatabase* metadata_db = GetMetadataDatabase(); |
| 231 if (metadata_db && metadata_db->HasDemotedDirtyTracker()) { | 229 if (metadata_db && metadata_db->HasDemotedDirtyTracker()) { |
| 232 metadata_db->PromoteDemotedTrackers(); | 230 metadata_db->PromoteDemotedTrackers(); |
| 233 FOR_EACH_OBSERVER( | 231 for (auto& observer : observers_) |
| 234 Observer, | 232 observer.OnPendingFileListUpdated(metadata_db->CountDirtyTracker()); |
| 235 observers_, | |
| 236 OnPendingFileListUpdated(metadata_db->CountDirtyTracker())); | |
| 237 } | 233 } |
| 238 callback.Run(); | 234 callback.Run(); |
| 239 } | 235 } |
| 240 | 236 |
| 241 void SyncWorker::ApplyLocalChange(const FileChange& local_change, | 237 void SyncWorker::ApplyLocalChange(const FileChange& local_change, |
| 242 const base::FilePath& local_path, | 238 const base::FilePath& local_path, |
| 243 const SyncFileMetadata& local_metadata, | 239 const SyncFileMetadata& local_metadata, |
| 244 const storage::FileSystemURL& url, | 240 const storage::FileSystemURL& url, |
| 245 const SyncStatusCallback& callback) { | 241 const SyncStatusCallback& callback) { |
| 246 DCHECK(sequence_checker_.CalledOnValidSequence()); | 242 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 275 } | 271 } |
| 276 | 272 |
| 277 void SyncWorker::NotifyLastOperationStatus( | 273 void SyncWorker::NotifyLastOperationStatus( |
| 278 SyncStatusCode status, | 274 SyncStatusCode status, |
| 279 bool used_network) { | 275 bool used_network) { |
| 280 DCHECK(sequence_checker_.CalledOnValidSequence()); | 276 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 281 | 277 |
| 282 UpdateServiceStateFromSyncStatusCode(status, used_network); | 278 UpdateServiceStateFromSyncStatusCode(status, used_network); |
| 283 | 279 |
| 284 if (GetMetadataDatabase()) { | 280 if (GetMetadataDatabase()) { |
| 285 FOR_EACH_OBSERVER( | 281 for (auto& observer : observers_) { |
| 286 Observer, observers_, | 282 observer.OnPendingFileListUpdated( |
| 287 OnPendingFileListUpdated(GetMetadataDatabase()->CountDirtyTracker())); | 283 GetMetadataDatabase()->CountDirtyTracker()); |
| 284 } |
| 288 } | 285 } |
| 289 } | 286 } |
| 290 | 287 |
| 291 void SyncWorker::RecordTaskLog(std::unique_ptr<TaskLogger::TaskLog> task_log) { | 288 void SyncWorker::RecordTaskLog(std::unique_ptr<TaskLogger::TaskLog> task_log) { |
| 292 DCHECK(sequence_checker_.CalledOnValidSequence()); | 289 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 293 | 290 |
| 294 context_->GetUITaskRunner()->PostTask( | 291 context_->GetUITaskRunner()->PostTask( |
| 295 FROM_HERE, | 292 FROM_HERE, |
| 296 base::Bind(&TaskLogger::RecordLog, | 293 base::Bind(&TaskLogger::RecordLog, |
| 297 context_->GetTaskLogger(), | 294 context_->GetTaskLogger(), |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 493 if (syncer->is_sync_root_deletion()) { | 490 if (syncer->is_sync_root_deletion()) { |
| 494 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase()); | 491 MetadataDatabase::ClearDatabase(context_->PassMetadataDatabase()); |
| 495 PostInitializeTask(); | 492 PostInitializeTask(); |
| 496 callback.Run(status, syncer->url()); | 493 callback.Run(status, syncer->url()); |
| 497 return; | 494 return; |
| 498 } | 495 } |
| 499 | 496 |
| 500 if (status == SYNC_STATUS_OK) { | 497 if (status == SYNC_STATUS_OK) { |
| 501 if (syncer->sync_action() != SYNC_ACTION_NONE && | 498 if (syncer->sync_action() != SYNC_ACTION_NONE && |
| 502 syncer->url().is_valid()) { | 499 syncer->url().is_valid()) { |
| 503 FOR_EACH_OBSERVER( | 500 for (auto& observer : observers_) { |
| 504 Observer, observers_, | 501 observer.OnFileStatusChanged( |
| 505 OnFileStatusChanged( | 502 syncer->url(), syncer->file_type(), SYNC_FILE_STATUS_SYNCED, |
| 506 syncer->url(), | 503 syncer->sync_action(), SYNC_DIRECTION_REMOTE_TO_LOCAL); |
| 507 syncer->file_type(), | 504 } |
| 508 SYNC_FILE_STATUS_SYNCED, | |
| 509 syncer->sync_action(), | |
| 510 SYNC_DIRECTION_REMOTE_TO_LOCAL)); | |
| 511 } | 505 } |
| 512 | 506 |
| 513 if (syncer->sync_action() == SYNC_ACTION_DELETED && | 507 if (syncer->sync_action() == SYNC_ACTION_DELETED && |
| 514 syncer->url().is_valid() && | 508 syncer->url().is_valid() && |
| 515 storage::VirtualPath::IsRootPath(syncer->url().path())) { | 509 storage::VirtualPath::IsRootPath(syncer->url().path())) { |
| 516 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback)); | 510 RegisterOrigin(syncer->url().origin(), base::Bind(&EmptyStatusCallback)); |
| 517 } | 511 } |
| 518 should_check_conflict_ = true; | 512 should_check_conflict_ = true; |
| 519 } | 513 } |
| 520 callback.Run(status, syncer->url()); | 514 callback.Run(status, syncer->url()); |
| 521 } | 515 } |
| 522 | 516 |
| 523 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer, | 517 void SyncWorker::DidApplyLocalChange(LocalToRemoteSyncer* syncer, |
| 524 const SyncStatusCallback& callback, | 518 const SyncStatusCallback& callback, |
| 525 SyncStatusCode status) { | 519 SyncStatusCode status) { |
| 526 DCHECK(sequence_checker_.CalledOnValidSequence()); | 520 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 527 | 521 |
| 528 if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) && | 522 if ((status == SYNC_STATUS_OK || status == SYNC_STATUS_RETRY) && |
| 529 syncer->url().is_valid() && | 523 syncer->url().is_valid() && |
| 530 syncer->sync_action() != SYNC_ACTION_NONE) { | 524 syncer->sync_action() != SYNC_ACTION_NONE) { |
| 531 storage::FileSystemURL updated_url = syncer->url(); | 525 storage::FileSystemURL updated_url = syncer->url(); |
| 532 if (!syncer->target_path().empty()) { | 526 if (!syncer->target_path().empty()) { |
| 533 updated_url = CreateSyncableFileSystemURL(syncer->url().origin(), | 527 updated_url = CreateSyncableFileSystemURL(syncer->url().origin(), |
| 534 syncer->target_path()); | 528 syncer->target_path()); |
| 535 } | 529 } |
| 536 FOR_EACH_OBSERVER(Observer, observers_, | 530 for (auto& observer : observers_) { |
| 537 OnFileStatusChanged(updated_url, | 531 observer.OnFileStatusChanged( |
| 538 syncer->file_type(), | 532 updated_url, syncer->file_type(), SYNC_FILE_STATUS_SYNCED, |
| 539 SYNC_FILE_STATUS_SYNCED, | 533 syncer->sync_action(), SYNC_DIRECTION_LOCAL_TO_REMOTE); |
| 540 syncer->sync_action(), | 534 } |
| 541 SYNC_DIRECTION_LOCAL_TO_REMOTE)); | |
| 542 } | 535 } |
| 543 | 536 |
| 544 if (status == SYNC_STATUS_UNKNOWN_ORIGIN && syncer->url().is_valid()) { | 537 if (status == SYNC_STATUS_UNKNOWN_ORIGIN && syncer->url().is_valid()) { |
| 545 RegisterOrigin(syncer->url().origin(), | 538 RegisterOrigin(syncer->url().origin(), |
| 546 base::Bind(&EmptyStatusCallback)); | 539 base::Bind(&EmptyStatusCallback)); |
| 547 } | 540 } |
| 548 | 541 |
| 549 if (syncer->needs_remote_change_listing() && | 542 if (syncer->needs_remote_change_listing() && |
| 550 !listing_remote_changes_) { | 543 !listing_remote_changes_) { |
| 551 task_manager_->ScheduleSyncTask( | 544 task_manager_->ScheduleSyncTask( |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 RemoteServiceState old_state = GetCurrentState(); | 666 RemoteServiceState old_state = GetCurrentState(); |
| 674 service_state_ = state; | 667 service_state_ = state; |
| 675 | 668 |
| 676 if (old_state == GetCurrentState()) | 669 if (old_state == GetCurrentState()) |
| 677 return; | 670 return; |
| 678 | 671 |
| 679 util::Log(logging::LOG_VERBOSE, FROM_HERE, | 672 util::Log(logging::LOG_VERBOSE, FROM_HERE, |
| 680 "Service state changed: %d->%d: %s", | 673 "Service state changed: %d->%d: %s", |
| 681 old_state, GetCurrentState(), description.c_str()); | 674 old_state, GetCurrentState(), description.c_str()); |
| 682 | 675 |
| 683 FOR_EACH_OBSERVER( | 676 for (auto& observer : observers_) |
| 684 Observer, observers_, | 677 observer.UpdateServiceState(GetCurrentState(), description); |
| 685 UpdateServiceState(GetCurrentState(), description)); | |
| 686 } | 678 } |
| 687 | 679 |
| 688 void SyncWorker::CallOnIdleForTesting(const base::Closure& callback) { | 680 void SyncWorker::CallOnIdleForTesting(const base::Closure& callback) { |
| 689 if (task_manager_->ScheduleTaskIfIdle( | 681 if (task_manager_->ScheduleTaskIfIdle( |
| 690 FROM_HERE, | 682 FROM_HERE, |
| 691 base::Bind(&InvokeIdleCallback, callback), | 683 base::Bind(&InvokeIdleCallback, callback), |
| 692 base::Bind(&EmptyStatusCallback))) | 684 base::Bind(&EmptyStatusCallback))) |
| 693 return; | 685 return; |
| 694 call_on_idle_callback_ = base::Bind( | 686 call_on_idle_callback_ = base::Bind( |
| 695 &SyncWorker::CallOnIdleForTesting, | 687 &SyncWorker::CallOnIdleForTesting, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 707 return context_->GetDriveUploader(); | 699 return context_->GetDriveUploader(); |
| 708 } | 700 } |
| 709 | 701 |
| 710 MetadataDatabase* SyncWorker::GetMetadataDatabase() { | 702 MetadataDatabase* SyncWorker::GetMetadataDatabase() { |
| 711 DCHECK(sequence_checker_.CalledOnValidSequence()); | 703 DCHECK(sequence_checker_.CalledOnValidSequence()); |
| 712 return context_->GetMetadataDatabase(); | 704 return context_->GetMetadataDatabase(); |
| 713 } | 705 } |
| 714 | 706 |
| 715 } // namespace drive_backend | 707 } // namespace drive_backend |
| 716 } // namespace sync_file_system | 708 } // namespace sync_file_system |
| OLD | NEW |