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 |