OLD | NEW |
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/chromeos/drive/file_system.h" | 5 #include "chrome/browser/chromeos/drive/file_system.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/file_util.h" | 8 #include "base/file_util.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 9 #include "base/message_loop/message_loop_proxy.h" |
10 #include "base/platform_file.h" | 10 #include "base/platform_file.h" |
(...skipping 699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
710 options, | 710 options, |
711 at_most_num_matches, | 711 at_most_num_matches, |
712 callback); | 712 callback); |
713 } | 713 } |
714 | 714 |
715 void FileSystem::OnDirectoryChangedByOperation( | 715 void FileSystem::OnDirectoryChangedByOperation( |
716 const base::FilePath& directory_path) { | 716 const base::FilePath& directory_path) { |
717 OnDirectoryChanged(directory_path); | 717 OnDirectoryChanged(directory_path); |
718 } | 718 } |
719 | 719 |
| 720 void FileSystem::OnCacheFileUploadNeededByOperation( |
| 721 const std::string& resource_id) { |
| 722 sync_client_->AddUploadTask(resource_id); |
| 723 } |
| 724 |
720 void FileSystem::OnDirectoryChanged(const base::FilePath& directory_path) { | 725 void FileSystem::OnDirectoryChanged(const base::FilePath& directory_path) { |
721 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 726 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
722 | 727 |
723 FOR_EACH_OBSERVER(FileSystemObserver, observers_, | 728 FOR_EACH_OBSERVER(FileSystemObserver, observers_, |
724 OnDirectoryChanged(directory_path)); | 729 OnDirectoryChanged(directory_path)); |
725 } | 730 } |
726 | 731 |
727 void FileSystem::OnLoadFromServerComplete() { | 732 void FileSystem::OnLoadFromServerComplete() { |
728 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 733 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
729 | 734 |
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
949 base::Bind(callback, FILE_ERROR_NOT_FOUND)); | 954 base::Bind(callback, FILE_ERROR_NOT_FOUND)); |
950 return; | 955 return; |
951 } | 956 } |
952 | 957 |
953 // Step 1 of CloseFile: Get resource_id and md5 for |file_path|. | 958 // Step 1 of CloseFile: Get resource_id and md5 for |file_path|. |
954 resource_metadata_->GetResourceEntryByPathOnUIThread( | 959 resource_metadata_->GetResourceEntryByPathOnUIThread( |
955 file_path, | 960 file_path, |
956 base::Bind(&FileSystem::CloseFileAfterGetResourceEntry, | 961 base::Bind(&FileSystem::CloseFileAfterGetResourceEntry, |
957 weak_ptr_factory_.GetWeakPtr(), | 962 weak_ptr_factory_.GetWeakPtr(), |
958 file_path, | 963 file_path, |
959 base::Bind(&FileSystem::CloseFileFinalize, | 964 callback)); |
960 weak_ptr_factory_.GetWeakPtr(), | |
961 file_path, | |
962 callback))); | |
963 } | 965 } |
964 | 966 |
965 void FileSystem::CloseFileAfterGetResourceEntry( | 967 void FileSystem::CloseFileAfterGetResourceEntry( |
966 const base::FilePath& file_path, | 968 const base::FilePath& file_path, |
967 const FileOperationCallback& callback, | 969 const FileOperationCallback& callback, |
968 FileError error, | 970 FileError error, |
969 scoped_ptr<ResourceEntry> entry) { | 971 scoped_ptr<ResourceEntry> entry) { |
970 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 972 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
971 DCHECK(!callback.is_null()); | 973 DCHECK(!callback.is_null()); |
972 | 974 |
973 if (entry.get() && !entry->has_file_specific_info()) | 975 if (entry.get() && !entry->has_file_specific_info()) |
974 error = FILE_ERROR_NOT_FOUND; | 976 error = FILE_ERROR_NOT_FOUND; |
975 | 977 |
976 if (error != FILE_ERROR_OK) { | 978 // Step 2 of CloseFile: Trigger upload. |
977 callback.Run(error); | 979 // TODO(benchan,kinaba): Call ClearDirtyInCache if the file has not been |
978 return; | 980 // modified. Come up with a way to detect the intactness effectively, or |
979 } | 981 // provide a method for user to declare it when calling CloseFile(). |
980 | 982 if (error == FILE_ERROR_OK) |
981 // Step 2 of CloseFile: Commit the modification in cache. This will trigger | 983 sync_client_->AddUploadTask(entry->resource_id()); |
982 // background upload. | |
983 // TODO(benchan,kinaba): Call ClearDirtyInCache instead of CommitDirtyInCache | |
984 // if the file has not been modified. Come up with a way to detect the | |
985 // intactness effectively, or provide a method for user to declare it when | |
986 // calling CloseFile(). | |
987 cache_->CommitDirtyOnUIThread(entry->resource_id(), | |
988 entry->file_specific_info().md5(), | |
989 callback); | |
990 } | |
991 | |
992 void FileSystem::CloseFileFinalize(const base::FilePath& file_path, | |
993 const FileOperationCallback& callback, | |
994 FileError result) { | |
995 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
996 DCHECK(!callback.is_null()); | |
997 | 984 |
998 // Step 3 of CloseFile. | 985 // Step 3 of CloseFile. |
999 // All the invocation of |callback| from operations initiated from CloseFile | 986 // All the invocation of |callback| from operations initiated from CloseFile |
1000 // must go through here. Removes the |file_path| from the remembered set so | 987 // must go through here. Removes the |file_path| from the remembered set so |
1001 // that subsequent operations can open the file again. | 988 // that subsequent operations can open the file again. |
1002 open_files_.erase(file_path); | 989 open_files_.erase(file_path); |
1003 | 990 |
1004 // Then invokes the user-supplied callback function. | 991 // Then invokes the user-supplied callback function. |
1005 callback.Run(result); | 992 callback.Run(error); |
1006 } | 993 } |
1007 | 994 |
1008 void FileSystem::CheckLocalModificationAndRun( | 995 void FileSystem::CheckLocalModificationAndRun( |
1009 scoped_ptr<ResourceEntry> entry, | 996 scoped_ptr<ResourceEntry> entry, |
1010 const GetResourceEntryCallback& callback) { | 997 const GetResourceEntryCallback& callback) { |
1011 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 998 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1012 DCHECK(entry.get()); | 999 DCHECK(entry.get()); |
1013 DCHECK(!callback.is_null()); | 1000 DCHECK(!callback.is_null()); |
1014 | 1001 |
1015 // For entries that will never be cached, use the original resource entry | 1002 // For entries that will never be cached, use the original resource entry |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1102 return; | 1089 return; |
1103 } | 1090 } |
1104 | 1091 |
1105 PlatformFileInfoProto entry_file_info; | 1092 PlatformFileInfoProto entry_file_info; |
1106 util::ConvertPlatformFileInfoToResourceEntry(*file_info, &entry_file_info); | 1093 util::ConvertPlatformFileInfoToResourceEntry(*file_info, &entry_file_info); |
1107 *entry->mutable_file_info() = entry_file_info; | 1094 *entry->mutable_file_info() = entry_file_info; |
1108 callback.Run(FILE_ERROR_OK, entry.Pass()); | 1095 callback.Run(FILE_ERROR_OK, entry.Pass()); |
1109 } | 1096 } |
1110 | 1097 |
1111 } // namespace drive | 1098 } // namespace drive |
OLD | NEW |