Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: chrome/browser/sync_file_system/drive_file_sync_service.cc

Issue 11416279: Return AUTHENTICATION_FAILED error if Drive operation has failed and user is not signed in (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync_file_system/drive_file_sync_service.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_file_sync_service.h" 5 #include "chrome/browser/sync_file_system/drive_file_sync_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
655 sync_client_->GetDriveDirectoryForSyncRoot( 655 sync_client_->GetDriveDirectoryForSyncRoot(
656 base::Bind(&DriveFileSyncService::DidGetSyncRootDirectory, 656 base::Bind(&DriveFileSyncService::DidGetSyncRootDirectory,
657 AsWeakPtr(), base::Passed(&token), callback)); 657 AsWeakPtr(), base::Passed(&token), callback));
658 } 658 }
659 659
660 void DriveFileSyncService::DidGetSyncRootDirectory( 660 void DriveFileSyncService::DidGetSyncRootDirectory(
661 scoped_ptr<TaskToken> token, 661 scoped_ptr<TaskToken> token,
662 const fileapi::SyncStatusCallback& callback, 662 const fileapi::SyncStatusCallback& callback,
663 google_apis::GDataErrorCode error, 663 google_apis::GDataErrorCode error,
664 const std::string& resource_id) { 664 const std::string& resource_id) {
665 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 665 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error);
666 if (error != google_apis::HTTP_SUCCESS && 666 if (error != google_apis::HTTP_SUCCESS &&
667 error != google_apis::HTTP_CREATED) { 667 error != google_apis::HTTP_CREATED) {
668 NotifyTaskDone(status, token.Pass()); 668 NotifyTaskDone(status, token.Pass());
669 callback.Run(status); 669 callback.Run(status);
670 return; 670 return;
671 } 671 }
672 672
673 metadata_store_->SetSyncRootDirectory(resource_id); 673 metadata_store_->SetSyncRootDirectory(resource_id);
674 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); 674 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass());
675 callback.Run(status); 675 callback.Run(status);
(...skipping 28 matching lines...) Expand all
704 } 704 }
705 705
706 void DriveFileSyncService::DidGetDirectoryForOrigin( 706 void DriveFileSyncService::DidGetDirectoryForOrigin(
707 scoped_ptr<TaskToken> token, 707 scoped_ptr<TaskToken> token,
708 const GURL& origin, 708 const GURL& origin,
709 const fileapi::SyncStatusCallback& callback, 709 const fileapi::SyncStatusCallback& callback,
710 google_apis::GDataErrorCode error, 710 google_apis::GDataErrorCode error,
711 const std::string& resource_id) { 711 const std::string& resource_id) {
712 if (error != google_apis::HTTP_SUCCESS && 712 if (error != google_apis::HTTP_SUCCESS &&
713 error != google_apis::HTTP_CREATED) { 713 error != google_apis::HTTP_CREATED) {
714 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 714 fileapi::SyncStatusCode status =
715 GDataErrorCodeToSyncStatusCodeWrapper(error);
715 NotifyTaskDone(status, token.Pass()); 716 NotifyTaskDone(status, token.Pass());
716 callback.Run(status); 717 callback.Run(status);
717 return; 718 return;
718 } 719 }
719 720
720 metadata_store_->AddBatchSyncOrigin(origin, resource_id); 721 metadata_store_->AddBatchSyncOrigin(origin, resource_id);
721 722
722 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass()); 723 NotifyTaskDone(fileapi::SYNC_STATUS_OK, token.Pass());
723 callback.Run(fileapi::SYNC_STATUS_OK); 724 callback.Run(fileapi::SYNC_STATUS_OK);
724 725
725 StartBatchSyncForOrigin(origin, resource_id); 726 StartBatchSyncForOrigin(origin, resource_id);
726 } 727 }
727 728
728 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync( 729 void DriveFileSyncService::DidGetLargestChangeStampForBatchSync(
729 scoped_ptr<TaskToken> token, 730 scoped_ptr<TaskToken> token,
730 const GURL& origin, 731 const GURL& origin,
731 const std::string& resource_id, 732 const std::string& resource_id,
732 google_apis::GDataErrorCode error, 733 google_apis::GDataErrorCode error,
733 int64 largest_changestamp) { 734 int64 largest_changestamp) {
734 if (error != google_apis::HTTP_SUCCESS) { 735 if (error != google_apis::HTTP_SUCCESS) {
735 pending_batch_sync_origins_.insert(origin); 736 pending_batch_sync_origins_.insert(origin);
736 // TODO(tzik): Refine this error code. 737 // TODO(tzik): Refine this error code.
737 NotifyTaskDone(GDataErrorCodeToSyncStatusCode(error), token.Pass()); 738 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass());
738 return; 739 return;
739 } 740 }
740 741
741 DCHECK(token); 742 DCHECK(token);
742 token->UpdateTask(FROM_HERE, TASK_TYPE_DRIVE, "Retrieving remote files"); 743 token->UpdateTask(FROM_HERE, TASK_TYPE_DRIVE, "Retrieving remote files");
743 sync_client_->ListFiles( 744 sync_client_->ListFiles(
744 resource_id, 745 resource_id,
745 base::Bind( 746 base::Bind(
746 &DriveFileSyncService::DidGetDirectoryContentForBatchSync, 747 &DriveFileSyncService::DidGetDirectoryContentForBatchSync,
747 AsWeakPtr(), base::Passed(&token), origin, largest_changestamp)); 748 AsWeakPtr(), base::Passed(&token), origin, largest_changestamp));
748 } 749 }
749 750
750 void DriveFileSyncService::DidGetDirectoryContentForBatchSync( 751 void DriveFileSyncService::DidGetDirectoryContentForBatchSync(
751 scoped_ptr<TaskToken> token, 752 scoped_ptr<TaskToken> token,
752 const GURL& origin, 753 const GURL& origin,
753 int64 largest_changestamp, 754 int64 largest_changestamp,
754 google_apis::GDataErrorCode error, 755 google_apis::GDataErrorCode error,
755 scoped_ptr<google_apis::DocumentFeed> feed) { 756 scoped_ptr<google_apis::DocumentFeed> feed) {
756 if (error != google_apis::HTTP_SUCCESS) { 757 if (error != google_apis::HTTP_SUCCESS) {
757 pending_batch_sync_origins_.insert(origin); 758 pending_batch_sync_origins_.insert(origin);
758 // TODO(tzik): Refine this error code. 759 // TODO(tzik): Refine this error code.
759 NotifyTaskDone(GDataErrorCodeToSyncStatusCode(error), token.Pass()); 760 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass());
760 return; 761 return;
761 } 762 }
762 763
763 typedef ScopedVector<google_apis::DocumentEntry>::const_iterator iterator; 764 typedef ScopedVector<google_apis::DocumentEntry>::const_iterator iterator;
764 for (iterator itr = feed->entries().begin(); 765 for (iterator itr = feed->entries().begin();
765 itr != feed->entries().end(); ++itr) { 766 itr != feed->entries().end(); ++itr) {
766 AppendNewRemoteChange(origin, *itr, largest_changestamp, 767 AppendNewRemoteChange(origin, *itr, largest_changestamp,
767 REMOTE_SYNC_TYPE_BATCH); 768 REMOTE_SYNC_TYPE_BATCH);
768 } 769 }
769 770
(...skipping 20 matching lines...) Expand all
790 791
791 void DriveFileSyncService::DidGetRemoteFileMetadata( 792 void DriveFileSyncService::DidGetRemoteFileMetadata(
792 const fileapi::SyncFileMetadataCallback& callback, 793 const fileapi::SyncFileMetadataCallback& callback,
793 google_apis::GDataErrorCode error, 794 google_apis::GDataErrorCode error,
794 scoped_ptr<google_apis::DocumentEntry> entry) { 795 scoped_ptr<google_apis::DocumentEntry> entry) {
795 fileapi::SyncFileType file_type = fileapi::SYNC_FILE_TYPE_UNKNOWN; 796 fileapi::SyncFileType file_type = fileapi::SYNC_FILE_TYPE_UNKNOWN;
796 if (entry->is_file()) 797 if (entry->is_file())
797 file_type = fileapi::SYNC_FILE_TYPE_FILE; 798 file_type = fileapi::SYNC_FILE_TYPE_FILE;
798 else if (entry->is_folder()) 799 else if (entry->is_folder())
799 file_type = fileapi::SYNC_FILE_TYPE_DIRECTORY; 800 file_type = fileapi::SYNC_FILE_TYPE_DIRECTORY;
800 callback.Run(GDataErrorCodeToSyncStatusCode(error), 801 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error),
801 fileapi::SyncFileMetadata(file_type, 802 fileapi::SyncFileMetadata(file_type,
802 entry->file_size(), 803 entry->file_size(),
803 entry->updated_time())); 804 entry->updated_time()));
804 } 805 }
805 806
806 DriveFileSyncService::SyncOperationType 807 DriveFileSyncService::SyncOperationType
807 DriveFileSyncService::ResolveSyncOperationType( 808 DriveFileSyncService::ResolveSyncOperationType(
808 const fileapi::FileChange& local_file_change, 809 const fileapi::FileChange& local_file_change,
809 const fileapi::FileSystemURL& url) { 810 const fileapi::FileSystemURL& url) {
810 // TODO(nhiroki): check metadata.conflicted() flag before checking the pending 811 // TODO(nhiroki): check metadata.conflicted() flag before checking the pending
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 } 863 }
863 864
864 void DriveFileSyncService::DidApplyLocalChange( 865 void DriveFileSyncService::DidApplyLocalChange(
865 scoped_ptr<TaskToken> token, 866 scoped_ptr<TaskToken> token,
866 const fileapi::FileSystemURL& url, 867 const fileapi::FileSystemURL& url,
867 const google_apis::GDataErrorCode error, 868 const google_apis::GDataErrorCode error,
868 const fileapi::SyncStatusCallback& callback, 869 const fileapi::SyncStatusCallback& callback,
869 fileapi::SyncStatusCode status) { 870 fileapi::SyncStatusCode status) {
870 if (status == fileapi::SYNC_STATUS_OK) { 871 if (status == fileapi::SYNC_STATUS_OK) {
871 CancelRemoteChange(url); 872 CancelRemoteChange(url);
872 NotifyTaskDone(GDataErrorCodeToSyncStatusCode(error), token.Pass()); 873 NotifyTaskDone(GDataErrorCodeToSyncStatusCodeWrapper(error), token.Pass());
873 callback.Run(GDataErrorCodeToSyncStatusCode(error)); 874 callback.Run(GDataErrorCodeToSyncStatusCodeWrapper(error));
874 return; 875 return;
875 } 876 }
876 NotifyTaskDone(status, token.Pass()); 877 NotifyTaskDone(status, token.Pass());
877 callback.Run(status); 878 callback.Run(status);
878 } 879 }
879 880
880 void DriveFileSyncService::DidUploadNewFile( 881 void DriveFileSyncService::DidUploadNewFile(
881 scoped_ptr<TaskToken> token, 882 scoped_ptr<TaskToken> token,
882 const fileapi::FileSystemURL& url, 883 const fileapi::FileSystemURL& url,
883 const fileapi::SyncStatusCallback& callback, 884 const fileapi::SyncStatusCallback& callback,
884 google_apis::GDataErrorCode error, 885 google_apis::GDataErrorCode error,
885 const std::string& resource_id, 886 const std::string& resource_id,
886 const std::string& file_md5) { 887 const std::string& file_md5) {
887 if (error == google_apis::HTTP_SUCCESS) { 888 if (error == google_apis::HTTP_SUCCESS) {
888 DriveMetadata metadata; 889 DriveMetadata metadata;
889 metadata_store_->ReadEntry(url, &metadata); 890 metadata_store_->ReadEntry(url, &metadata);
890 metadata.set_resource_id(resource_id); 891 metadata.set_resource_id(resource_id);
891 metadata.set_md5_checksum(file_md5); 892 metadata.set_md5_checksum(file_md5);
892 metadata.set_conflicted(false); 893 metadata.set_conflicted(false);
893 metadata_store_->UpdateEntry( 894 metadata_store_->UpdateEntry(
894 url, metadata, 895 url, metadata,
895 base::Bind(&DriveFileSyncService::DidApplyLocalChange, 896 base::Bind(&DriveFileSyncService::DidApplyLocalChange,
896 AsWeakPtr(), base::Passed(&token), url, error, callback)); 897 AsWeakPtr(), base::Passed(&token), url, error, callback));
897 return; 898 return;
898 } 899 }
899 const fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 900 const fileapi::SyncStatusCode status =
901 GDataErrorCodeToSyncStatusCodeWrapper(error);
900 NotifyTaskDone(status, token.Pass()); 902 NotifyTaskDone(status, token.Pass());
901 callback.Run(status); 903 callback.Run(status);
902 } 904 }
903 905
904 void DriveFileSyncService::DidUploadExistingFile( 906 void DriveFileSyncService::DidUploadExistingFile(
905 scoped_ptr<TaskToken> token, 907 scoped_ptr<TaskToken> token,
906 const fileapi::FileSystemURL& url, 908 const fileapi::FileSystemURL& url,
907 const fileapi::SyncStatusCallback& callback, 909 const fileapi::SyncStatusCallback& callback,
908 google_apis::GDataErrorCode error, 910 google_apis::GDataErrorCode error,
909 const std::string& resource_id, 911 const std::string& resource_id,
(...skipping 22 matching lines...) Expand all
932 AsWeakPtr(), base::Passed(&token), url, error, callback)); 934 AsWeakPtr(), base::Passed(&token), url, error, callback));
933 return; 935 return;
934 } 936 }
935 case google_apis::HTTP_NOT_MODIFIED: { 937 case google_apis::HTTP_NOT_MODIFIED: {
936 DidApplyLocalChange(token.Pass(), url, google_apis::HTTP_SUCCESS, 938 DidApplyLocalChange(token.Pass(), url, google_apis::HTTP_SUCCESS,
937 callback, fileapi::SYNC_STATUS_OK); 939 callback, fileapi::SYNC_STATUS_OK);
938 return; 940 return;
939 } 941 }
940 default: { 942 default: {
941 const fileapi::SyncStatusCode status = 943 const fileapi::SyncStatusCode status =
942 GDataErrorCodeToSyncStatusCode(error); 944 GDataErrorCodeToSyncStatusCodeWrapper(error);
943 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); 945 DCHECK_NE(fileapi::SYNC_STATUS_OK, status);
944 DidApplyLocalChange(token.Pass(), url, error, callback, status); 946 DidApplyLocalChange(token.Pass(), url, error, callback, status);
945 return; 947 return;
946 } 948 }
947 } 949 }
948 } 950 }
949 951
950 void DriveFileSyncService::DidDeleteFile( 952 void DriveFileSyncService::DidDeleteFile(
951 scoped_ptr<TaskToken> token, 953 scoped_ptr<TaskToken> token,
952 const fileapi::FileSystemURL& url, 954 const fileapi::FileSystemURL& url,
(...skipping 13 matching lines...) Expand all
966 metadata_store_->ReadEntry(url, &metadata); 968 metadata_store_->ReadEntry(url, &metadata);
967 metadata.set_conflicted(true); 969 metadata.set_conflicted(true);
968 metadata_store_->UpdateEntry( 970 metadata_store_->UpdateEntry(
969 url, metadata, 971 url, metadata,
970 base::Bind(&DriveFileSyncService::DidApplyLocalChange, 972 base::Bind(&DriveFileSyncService::DidApplyLocalChange,
971 AsWeakPtr(), base::Passed(&token), url, error, callback)); 973 AsWeakPtr(), base::Passed(&token), url, error, callback));
972 return; 974 return;
973 } 975 }
974 default: { 976 default: {
975 const fileapi::SyncStatusCode status = 977 const fileapi::SyncStatusCode status =
976 GDataErrorCodeToSyncStatusCode(error); 978 GDataErrorCodeToSyncStatusCodeWrapper(error);
977 DCHECK_NE(fileapi::SYNC_STATUS_OK, status); 979 DCHECK_NE(fileapi::SYNC_STATUS_OK, status);
978 DidApplyLocalChange(token.Pass(), url, error, callback, status); 980 DidApplyLocalChange(token.Pass(), url, error, callback, status);
979 return; 981 return;
980 } 982 }
981 } 983 }
982 } 984 }
983 985
984 void DriveFileSyncService::DidPrepareForProcessRemoteChange( 986 void DriveFileSyncService::DidPrepareForProcessRemoteChange(
985 scoped_ptr<ProcessRemoteChangeParam> param, 987 scoped_ptr<ProcessRemoteChangeParam> param,
986 fileapi::SyncStatusCode status, 988 fileapi::SyncStatusCode status,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 void DriveFileSyncService::DidDownloadFile( 1138 void DriveFileSyncService::DidDownloadFile(
1137 scoped_ptr<ProcessRemoteChangeParam> param, 1139 scoped_ptr<ProcessRemoteChangeParam> param,
1138 google_apis::GDataErrorCode error, 1140 google_apis::GDataErrorCode error,
1139 const std::string& md5_checksum) { 1141 const std::string& md5_checksum) {
1140 if (error == google_apis::HTTP_NOT_MODIFIED) { 1142 if (error == google_apis::HTTP_NOT_MODIFIED) {
1141 param->operation_type = fileapi::SYNC_OPERATION_NONE; 1143 param->operation_type = fileapi::SYNC_OPERATION_NONE;
1142 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK); 1144 CompleteRemoteSync(param.Pass(), fileapi::SYNC_STATUS_OK);
1143 return; 1145 return;
1144 } 1146 }
1145 1147
1146 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error); 1148 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCodeWrapper(error);
1147 if (status != fileapi::SYNC_STATUS_OK) { 1149 if (status != fileapi::SYNC_STATUS_OK) {
1148 AbortRemoteSync(param.Pass(), status); 1150 AbortRemoteSync(param.Pass(), status);
1149 return; 1151 return;
1150 } 1152 }
1151 1153
1152 param->md5_checksum = md5_checksum; 1154 param->md5_checksum = md5_checksum;
1153 const fileapi::FileChange& change = param->remote_change.change; 1155 const fileapi::FileChange& change = param->remote_change.change;
1154 const FilePath& temporary_file_path = param->temporary_file_path; 1156 const FilePath& temporary_file_path = param->temporary_file_path;
1155 const fileapi::FileSystemURL& url = param->remote_change.url; 1157 const fileapi::FileSystemURL& url = param->remote_change.url;
1156 param->processor->ApplyRemoteChange( 1158 param->processor->ApplyRemoteChange(
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 if (found_url == url_to_change_.end()) 1319 if (found_url == url_to_change_.end())
1318 return false; 1320 return false;
1319 const PathToChange& path_to_change = found_url->second; 1321 const PathToChange& path_to_change = found_url->second;
1320 PathToChange::const_iterator found_path = path_to_change.find(url.path()); 1322 PathToChange::const_iterator found_path = path_to_change.find(url.path());
1321 if (found_path == path_to_change.end()) 1323 if (found_path == path_to_change.end())
1322 return false; 1324 return false;
1323 *change = found_path->second; 1325 *change = found_path->second;
1324 return true; 1326 return true;
1325 } 1327 }
1326 1328
1329 fileapi::SyncStatusCode
1330 DriveFileSyncService::GDataErrorCodeToSyncStatusCodeWrapper(
1331 google_apis::GDataErrorCode error) const {
1332 fileapi::SyncStatusCode status = GDataErrorCodeToSyncStatusCode(error);
1333 if (status != fileapi::SYNC_STATUS_OK && !sync_client_->IsAuthenticated())
1334 return fileapi::SYNC_STATUS_AUTHENTICATION_FAILED;
1335 return status;
1336 }
1337
1327 } // namespace sync_file_system 1338 } // namespace sync_file_system
OLDNEW
« no previous file with comments | « chrome/browser/sync_file_system/drive_file_sync_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698