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 |