| 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/local_to_remote_syncer.h
" | 5 #include "chrome/browser/sync_file_system/drive_backend/local_to_remote_syncer.h
" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 return; | 179 return; |
| 180 } | 180 } |
| 181 | 181 |
| 182 DCHECK(active_ancestor_details.file_kind() == FILE_KIND_FILE); | 182 DCHECK(active_ancestor_details.file_kind() == FILE_KIND_FILE); |
| 183 remote_parent_folder_tracker_ = | 183 remote_parent_folder_tracker_ = |
| 184 FindTrackerByID(metadata_database(), | 184 FindTrackerByID(metadata_database(), |
| 185 active_ancestor_tracker->parent_tracker_id()); | 185 active_ancestor_tracker->parent_tracker_id()); |
| 186 remote_file_tracker_ = active_ancestor_tracker.Pass(); | 186 remote_file_tracker_ = active_ancestor_tracker.Pass(); |
| 187 target_path_ = active_ancestor_path; | 187 target_path_ = active_ancestor_path; |
| 188 token->RecordLog("Detected non-folder file in its path."); | 188 token->RecordLog("Detected non-folder file in its path."); |
| 189 DeleteRemoteFile(base::Bind( | 189 DeleteRemoteFile(base::Bind(&LocalToRemoteSyncer::DidDeleteForCreateFolder, |
| 190 &LocalToRemoteSyncer::DidDeleteForCreateFolder, | 190 weak_ptr_factory_.GetWeakPtr(), |
| 191 weak_ptr_factory_.GetWeakPtr(), | 191 base::Passed(&token))); |
| 192 base::Bind(&LocalToRemoteSyncer::SyncCompleted, | |
| 193 weak_ptr_factory_.GetWeakPtr(), base::Passed(&token)))); | |
| 194 return; | 192 return; |
| 195 } | 193 } |
| 196 | 194 |
| 197 if (missing_components.empty()) { | 195 if (missing_components.empty()) { |
| 198 // The original target has remote active file/folder. | 196 // The original target has remote active file/folder. |
| 199 remote_parent_folder_tracker_ = | 197 remote_parent_folder_tracker_ = |
| 200 FindTrackerByID(metadata_database(), | 198 FindTrackerByID(metadata_database(), |
| 201 active_ancestor_tracker->parent_tracker_id()); | 199 active_ancestor_tracker->parent_tracker_id()); |
| 202 remote_file_tracker_ = active_ancestor_tracker.Pass(); | 200 remote_file_tracker_ = active_ancestor_tracker.Pass(); |
| 203 target_path_ = url_.path(); | 201 target_path_ = url_.path(); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 return; | 348 return; |
| 351 } | 349 } |
| 352 | 350 |
| 353 DCHECK(local_change_.IsDirectory()); | 351 DCHECK(local_change_.IsDirectory()); |
| 354 if (synced_details.file_kind() == FILE_KIND_FILE) { | 352 if (synced_details.file_kind() == FILE_KIND_FILE) { |
| 355 // Non-conflicting local folder creation to existing remote *file*. | 353 // Non-conflicting local folder creation to existing remote *file*. |
| 356 // Assuming this case as local file deletion + local folder creation, delete | 354 // Assuming this case as local file deletion + local folder creation, delete |
| 357 // the remote file and create a remote folder. | 355 // the remote file and create a remote folder. |
| 358 DeleteRemoteFile(base::Bind(&LocalToRemoteSyncer::DidDeleteForCreateFolder, | 356 DeleteRemoteFile(base::Bind(&LocalToRemoteSyncer::DidDeleteForCreateFolder, |
| 359 weak_ptr_factory_.GetWeakPtr(), | 357 weak_ptr_factory_.GetWeakPtr(), |
| 360 base::Bind(&LocalToRemoteSyncer::SyncCompleted, | 358 base::Passed(&token))); |
| 361 weak_ptr_factory_.GetWeakPtr(), | |
| 362 base::Passed(&token)))); | |
| 363 return; | 359 return; |
| 364 } | 360 } |
| 365 | 361 |
| 366 // Non-conflicting local folder creation to existing remote folder. | 362 // Non-conflicting local folder creation to existing remote folder. |
| 367 DCHECK_EQ(FILE_KIND_FOLDER, synced_details.file_kind()); | 363 DCHECK_EQ(FILE_KIND_FOLDER, synced_details.file_kind()); |
| 368 SyncCompleted(token.Pass(), SYNC_STATUS_OK); | 364 SyncCompleted(token.Pass(), SYNC_STATUS_OK); |
| 369 } | 365 } |
| 370 | 366 |
| 371 void LocalToRemoteSyncer::DeleteRemoteFile( | 367 void LocalToRemoteSyncer::DeleteRemoteFile( |
| 372 const SyncStatusCallback& callback) { | 368 const SyncStatusCallback& callback) { |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 | 567 |
| 572 if (status != SYNC_STATUS_OK) { | 568 if (status != SYNC_STATUS_OK) { |
| 573 callback.Run(status); | 569 callback.Run(status); |
| 574 return; | 570 return; |
| 575 } | 571 } |
| 576 | 572 |
| 577 UploadNewFile(callback); | 573 UploadNewFile(callback); |
| 578 } | 574 } |
| 579 | 575 |
| 580 void LocalToRemoteSyncer::DidDeleteForCreateFolder( | 576 void LocalToRemoteSyncer::DidDeleteForCreateFolder( |
| 581 const SyncStatusCallback& callback, | 577 scoped_ptr<SyncTaskToken> token, |
| 582 SyncStatusCode status) { | 578 SyncStatusCode status) { |
| 583 if (status == SYNC_STATUS_HAS_CONFLICT) { | 579 if (status == SYNC_STATUS_HAS_CONFLICT) { |
| 584 UpdateRemoteMetadata(remote_file_tracker_->file_id(), | 580 UpdateRemoteMetadata( |
| 585 base::Bind(&ReturnRetryOnSuccess, callback)); | 581 remote_file_tracker_->file_id(), |
| 582 base::Bind(&ReturnRetryOnSuccess, |
| 583 base::Bind(&LocalToRemoteSyncer::SyncCompleted, |
| 584 weak_ptr_factory_.GetWeakPtr(), |
| 585 base::Passed(&token)))); |
| 586 return; | 586 return; |
| 587 } | 587 } |
| 588 | 588 |
| 589 if (status != SYNC_STATUS_OK) { | 589 if (status != SYNC_STATUS_OK) { |
| 590 callback.Run(status); | 590 SyncCompleted(token.Pass(), status); |
| 591 return; | 591 return; |
| 592 } | 592 } |
| 593 | 593 |
| 594 CreateRemoteFolder(callback); | 594 CreateRemoteFolder(base::Bind(&LocalToRemoteSyncer::SyncCompleted, |
| 595 weak_ptr_factory_.GetWeakPtr(), |
| 596 base::Passed(&token))); |
| 595 } | 597 } |
| 596 | 598 |
| 597 void LocalToRemoteSyncer::UploadNewFile(const SyncStatusCallback& callback) { | 599 void LocalToRemoteSyncer::UploadNewFile(const SyncStatusCallback& callback) { |
| 598 DCHECK(remote_parent_folder_tracker_); | 600 DCHECK(remote_parent_folder_tracker_); |
| 599 | 601 |
| 600 sync_action_ = SYNC_ACTION_ADDED; | 602 sync_action_ = SYNC_ACTION_ADDED; |
| 601 base::FilePath title = fileapi::VirtualPath::BaseName(target_path_); | 603 base::FilePath title = fileapi::VirtualPath::BaseName(target_path_); |
| 602 drive_uploader()->UploadNewFile( | 604 drive_uploader()->UploadNewFile( |
| 603 remote_parent_folder_tracker_->file_id(), | 605 remote_parent_folder_tracker_->file_id(), |
| 604 local_path_, | 606 local_path_, |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 set_used_network(true); | 720 set_used_network(true); |
| 719 return sync_context_->GetDriveUploader(); | 721 return sync_context_->GetDriveUploader(); |
| 720 } | 722 } |
| 721 | 723 |
| 722 MetadataDatabase* LocalToRemoteSyncer::metadata_database() { | 724 MetadataDatabase* LocalToRemoteSyncer::metadata_database() { |
| 723 return sync_context_->GetMetadataDatabase(); | 725 return sync_context_->GetMetadataDatabase(); |
| 724 } | 726 } |
| 725 | 727 |
| 726 } // namespace drive_backend | 728 } // namespace drive_backend |
| 727 } // namespace sync_file_system | 729 } // namespace sync_file_system |
| OLD | NEW |