| 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 458 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 469 sync_action_ = SYNC_ACTION_DELETED; | 469 sync_action_ = SYNC_ACTION_DELETED; |
| 470 drive_service()->DeleteResource( | 470 drive_service()->DeleteResource( |
| 471 remote_file_tracker_->file_id(), | 471 remote_file_tracker_->file_id(), |
| 472 remote_file_tracker_->synced_details().etag(), | 472 remote_file_tracker_->synced_details().etag(), |
| 473 base::Bind(&LocalToRemoteSyncer::DidDeleteRemoteFile, | 473 base::Bind(&LocalToRemoteSyncer::DidDeleteRemoteFile, |
| 474 weak_ptr_factory_.GetWeakPtr(), base::Passed(&token))); | 474 weak_ptr_factory_.GetWeakPtr(), base::Passed(&token))); |
| 475 } | 475 } |
| 476 | 476 |
| 477 void LocalToRemoteSyncer::DidDeleteRemoteFile( | 477 void LocalToRemoteSyncer::DidDeleteRemoteFile( |
| 478 scoped_ptr<SyncTaskToken> token, | 478 scoped_ptr<SyncTaskToken> token, |
| 479 google_apis::GDataErrorCode error) { | 479 google_apis::DriveApiErrorCode error) { |
| 480 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 480 SyncStatusCode status = DriveApiErrorCodeToSyncStatusCode(error); |
| 481 if (status != SYNC_STATUS_OK && | 481 if (status != SYNC_STATUS_OK && |
| 482 error != google_apis::HTTP_NOT_FOUND && | 482 error != google_apis::HTTP_NOT_FOUND && |
| 483 error != google_apis::HTTP_PRECONDITION && | 483 error != google_apis::HTTP_PRECONDITION && |
| 484 error != google_apis::HTTP_CONFLICT) { | 484 error != google_apis::HTTP_CONFLICT) { |
| 485 SyncCompleted(token.Pass(), status); | 485 SyncCompleted(token.Pass(), status); |
| 486 return; | 486 return; |
| 487 } | 487 } |
| 488 | 488 |
| 489 // Handle NOT_FOUND case as SUCCESS case. | 489 // Handle NOT_FOUND case as SUCCESS case. |
| 490 // For PRECONDITION / CONFLICT case, the remote file is modified since the | 490 // For PRECONDITION / CONFLICT case, the remote file is modified since the |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 local_path_, | 523 local_path_, |
| 524 "application/octet_stream", | 524 "application/octet_stream", |
| 525 options, | 525 options, |
| 526 base::Bind(&LocalToRemoteSyncer::DidUploadExistingFile, | 526 base::Bind(&LocalToRemoteSyncer::DidUploadExistingFile, |
| 527 weak_ptr_factory_.GetWeakPtr(), base::Passed(&token)), | 527 weak_ptr_factory_.GetWeakPtr(), base::Passed(&token)), |
| 528 google_apis::ProgressCallback()); | 528 google_apis::ProgressCallback()); |
| 529 } | 529 } |
| 530 | 530 |
| 531 void LocalToRemoteSyncer::DidUploadExistingFile( | 531 void LocalToRemoteSyncer::DidUploadExistingFile( |
| 532 scoped_ptr<SyncTaskToken> token, | 532 scoped_ptr<SyncTaskToken> token, |
| 533 google_apis::GDataErrorCode error, | 533 google_apis::DriveApiErrorCode error, |
| 534 const GURL&, | 534 const GURL&, |
| 535 scoped_ptr<google_apis::FileResource> entry) { | 535 scoped_ptr<google_apis::FileResource> entry) { |
| 536 if (error == google_apis::HTTP_PRECONDITION || | 536 if (error == google_apis::HTTP_PRECONDITION || |
| 537 error == google_apis::HTTP_CONFLICT || | 537 error == google_apis::HTTP_CONFLICT || |
| 538 error == google_apis::HTTP_NOT_FOUND) { | 538 error == google_apis::HTTP_NOT_FOUND) { |
| 539 // The remote file has unfetched remote change. Fetch latest metadata and | 539 // The remote file has unfetched remote change. Fetch latest metadata and |
| 540 // update database with it. | 540 // update database with it. |
| 541 // TODO(tzik): Consider adding local side low-priority dirtiness handling to | 541 // TODO(tzik): Consider adding local side low-priority dirtiness handling to |
| 542 // handle this as ListChangesTask. | 542 // handle this as ListChangesTask. |
| 543 | 543 |
| 544 needs_remote_change_listing_ = true; | 544 needs_remote_change_listing_ = true; |
| 545 UpdateRemoteMetadata( | 545 UpdateRemoteMetadata( |
| 546 remote_file_tracker_->file_id(), | 546 remote_file_tracker_->file_id(), |
| 547 token.Pass()); | 547 token.Pass()); |
| 548 return; | 548 return; |
| 549 } | 549 } |
| 550 | 550 |
| 551 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 551 SyncStatusCode status = DriveApiErrorCodeToSyncStatusCode(error); |
| 552 if (status != SYNC_STATUS_OK) { | 552 if (status != SYNC_STATUS_OK) { |
| 553 SyncCompleted(token.Pass(), status); | 553 SyncCompleted(token.Pass(), status); |
| 554 return; | 554 return; |
| 555 } | 555 } |
| 556 | 556 |
| 557 if (!entry) { | 557 if (!entry) { |
| 558 NOTREACHED(); | 558 NOTREACHED(); |
| 559 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); | 559 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); |
| 560 return; | 560 return; |
| 561 } | 561 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 drive_service()->GetFileResource( | 599 drive_service()->GetFileResource( |
| 600 file_id, | 600 file_id, |
| 601 base::Bind(&LocalToRemoteSyncer::DidGetRemoteMetadata, | 601 base::Bind(&LocalToRemoteSyncer::DidGetRemoteMetadata, |
| 602 weak_ptr_factory_.GetWeakPtr(), | 602 weak_ptr_factory_.GetWeakPtr(), |
| 603 file_id, base::Passed(&token))); | 603 file_id, base::Passed(&token))); |
| 604 } | 604 } |
| 605 | 605 |
| 606 void LocalToRemoteSyncer::DidGetRemoteMetadata( | 606 void LocalToRemoteSyncer::DidGetRemoteMetadata( |
| 607 const std::string& file_id, | 607 const std::string& file_id, |
| 608 scoped_ptr<SyncTaskToken> token, | 608 scoped_ptr<SyncTaskToken> token, |
| 609 google_apis::GDataErrorCode error, | 609 google_apis::DriveApiErrorCode error, |
| 610 scoped_ptr<google_apis::FileResource> entry) { | 610 scoped_ptr<google_apis::FileResource> entry) { |
| 611 DCHECK(sync_context_->GetWorkerTaskRunner()->RunsTasksOnCurrentThread()); | 611 DCHECK(sync_context_->GetWorkerTaskRunner()->RunsTasksOnCurrentThread()); |
| 612 | 612 |
| 613 if (error == google_apis::HTTP_NOT_FOUND) { | 613 if (error == google_apis::HTTP_NOT_FOUND) { |
| 614 retry_on_success_ = true; | 614 retry_on_success_ = true; |
| 615 SyncStatusCode status = | 615 SyncStatusCode status = |
| 616 metadata_database()->UpdateByDeletedRemoteFile(file_id); | 616 metadata_database()->UpdateByDeletedRemoteFile(file_id); |
| 617 SyncCompleted(token.Pass(), status); | 617 SyncCompleted(token.Pass(), status); |
| 618 return; | 618 return; |
| 619 } | 619 } |
| 620 | 620 |
| 621 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 621 SyncStatusCode status = DriveApiErrorCodeToSyncStatusCode(error); |
| 622 if (status != SYNC_STATUS_OK) { | 622 if (status != SYNC_STATUS_OK) { |
| 623 SyncCompleted(token.Pass(), status); | 623 SyncCompleted(token.Pass(), status); |
| 624 return; | 624 return; |
| 625 } | 625 } |
| 626 | 626 |
| 627 if (!entry) { | 627 if (!entry) { |
| 628 NOTREACHED(); | 628 NOTREACHED(); |
| 629 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); | 629 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); |
| 630 return; | 630 return; |
| 631 } | 631 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 648 GetMimeTypeFromTitle(title), | 648 GetMimeTypeFromTitle(title), |
| 649 drive::DriveUploader::UploadNewFileOptions(), | 649 drive::DriveUploader::UploadNewFileOptions(), |
| 650 base::Bind(&LocalToRemoteSyncer::DidUploadNewFile, | 650 base::Bind(&LocalToRemoteSyncer::DidUploadNewFile, |
| 651 weak_ptr_factory_.GetWeakPtr(), | 651 weak_ptr_factory_.GetWeakPtr(), |
| 652 base::Passed(&token)), | 652 base::Passed(&token)), |
| 653 google_apis::ProgressCallback()); | 653 google_apis::ProgressCallback()); |
| 654 } | 654 } |
| 655 | 655 |
| 656 void LocalToRemoteSyncer::DidUploadNewFile( | 656 void LocalToRemoteSyncer::DidUploadNewFile( |
| 657 scoped_ptr<SyncTaskToken> token, | 657 scoped_ptr<SyncTaskToken> token, |
| 658 google_apis::GDataErrorCode error, | 658 google_apis::DriveApiErrorCode error, |
| 659 const GURL& upload_location, | 659 const GURL& upload_location, |
| 660 scoped_ptr<google_apis::FileResource> entry) { | 660 scoped_ptr<google_apis::FileResource> entry) { |
| 661 if (error == google_apis::HTTP_NOT_FOUND) | 661 if (error == google_apis::HTTP_NOT_FOUND) |
| 662 needs_remote_change_listing_ = true; | 662 needs_remote_change_listing_ = true; |
| 663 | 663 |
| 664 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 664 SyncStatusCode status = DriveApiErrorCodeToSyncStatusCode(error); |
| 665 if (status != SYNC_STATUS_OK) { | 665 if (status != SYNC_STATUS_OK) { |
| 666 SyncCompleted(token.Pass(), status); | 666 SyncCompleted(token.Pass(), status); |
| 667 return; | 667 return; |
| 668 } | 668 } |
| 669 | 669 |
| 670 if (!entry) { | 670 if (!entry) { |
| 671 NOTREACHED(); | 671 NOTREACHED(); |
| 672 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); | 672 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); |
| 673 return; | 673 return; |
| 674 } | 674 } |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 729 return; | 729 return; |
| 730 } | 730 } |
| 731 | 731 |
| 732 NOTREACHED(); | 732 NOTREACHED(); |
| 733 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); | 733 SyncCompleted(token.Pass(), SYNC_STATUS_FAILED); |
| 734 return; | 734 return; |
| 735 } | 735 } |
| 736 | 736 |
| 737 void LocalToRemoteSyncer::DidDetachResourceForCreationConflict( | 737 void LocalToRemoteSyncer::DidDetachResourceForCreationConflict( |
| 738 scoped_ptr<SyncTaskToken> token, | 738 scoped_ptr<SyncTaskToken> token, |
| 739 google_apis::GDataErrorCode error) { | 739 google_apis::DriveApiErrorCode error) { |
| 740 SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); | 740 SyncStatusCode status = DriveApiErrorCodeToSyncStatusCode(error); |
| 741 if (status != SYNC_STATUS_OK) { | 741 if (status != SYNC_STATUS_OK) { |
| 742 SyncCompleted(token.Pass(), status); | 742 SyncCompleted(token.Pass(), status); |
| 743 return; | 743 return; |
| 744 } | 744 } |
| 745 | 745 |
| 746 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); | 746 SyncCompleted(token.Pass(), SYNC_STATUS_RETRY); |
| 747 } | 747 } |
| 748 | 748 |
| 749 bool LocalToRemoteSyncer::IsContextReady() { | 749 bool LocalToRemoteSyncer::IsContextReady() { |
| 750 return sync_context_->GetDriveService() && | 750 return sync_context_->GetDriveService() && |
| (...skipping 10 matching lines...) Expand all Loading... |
| 761 set_used_network(true); | 761 set_used_network(true); |
| 762 return sync_context_->GetDriveUploader(); | 762 return sync_context_->GetDriveUploader(); |
| 763 } | 763 } |
| 764 | 764 |
| 765 MetadataDatabase* LocalToRemoteSyncer::metadata_database() { | 765 MetadataDatabase* LocalToRemoteSyncer::metadata_database() { |
| 766 return sync_context_->GetMetadataDatabase(); | 766 return sync_context_->GetMetadataDatabase(); |
| 767 } | 767 } |
| 768 | 768 |
| 769 } // namespace drive_backend | 769 } // namespace drive_backend |
| 770 } // namespace sync_file_system | 770 } // namespace sync_file_system |
| OLD | NEW |