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/gdata/gdata_file_system.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 735 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 FeedToFileResourceMapUmaStats() | 746 FeedToFileResourceMapUmaStats() |
747 : num_regular_files(0), | 747 : num_regular_files(0), |
748 num_hosted_documents(0) {} | 748 num_hosted_documents(0) {} |
749 | 749 |
750 typedef std::map<DocumentEntry::EntryKind, int> EntryKindToCountMap; | 750 typedef std::map<DocumentEntry::EntryKind, int> EntryKindToCountMap; |
751 int num_regular_files; | 751 int num_regular_files; |
752 int num_hosted_documents; | 752 int num_hosted_documents; |
753 EntryKindToCountMap num_files_with_entry_kind; | 753 EntryKindToCountMap num_files_with_entry_kind; |
754 }; | 754 }; |
755 | 755 |
| 756 // GDataFileSystem::StartFileUploadParams implementation. |
| 757 struct GDataFileSystem::StartFileUploadParams { |
| 758 StartFileUploadParams(const FilePath& in_local_file_path, |
| 759 const FilePath& in_remote_file_path, |
| 760 const FileOperationCallback& in_callback) |
| 761 : local_file_path(in_local_file_path), |
| 762 remote_file_path(in_remote_file_path), |
| 763 callback(in_callback) {} |
| 764 |
| 765 const FilePath local_file_path; |
| 766 const FilePath remote_file_path; |
| 767 const FileOperationCallback callback; |
| 768 }; |
756 | 769 |
757 // GDataFileSystem class implementation. | 770 // GDataFileSystem class implementation. |
758 | 771 |
759 GDataFileSystem::GDataFileSystem( | 772 GDataFileSystem::GDataFileSystem( |
760 Profile* profile, | 773 Profile* profile, |
761 GDataCache* cache, | 774 GDataCache* cache, |
762 DocumentsServiceInterface* documents_service, | 775 DocumentsServiceInterface* documents_service, |
763 GDataUploaderInterface* uploader, | 776 GDataUploaderInterface* uploader, |
764 DriveWebAppsRegistryInterface* webapps_registry, | 777 DriveWebAppsRegistryInterface* webapps_registry, |
765 base::SequencedTaskRunner* blocking_task_runner) | 778 base::SequencedTaskRunner* blocking_task_runner) |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1222 PostBlockingPoolSequencedTaskAndReply( | 1235 PostBlockingPoolSequencedTaskAndReply( |
1223 FROM_HERE, | 1236 FROM_HERE, |
1224 blocking_task_runner_, | 1237 blocking_task_runner_, |
1225 base::Bind(&GetLocalFileInfoOnBlockingPool, | 1238 base::Bind(&GetLocalFileInfoOnBlockingPool, |
1226 local_file_path, | 1239 local_file_path, |
1227 error, | 1240 error, |
1228 file_size, | 1241 file_size, |
1229 content_type), | 1242 content_type), |
1230 base::Bind(&GDataFileSystem::StartFileUploadOnUIThread, | 1243 base::Bind(&GDataFileSystem::StartFileUploadOnUIThread, |
1231 ui_weak_ptr_, | 1244 ui_weak_ptr_, |
1232 local_file_path, | 1245 StartFileUploadParams(local_file_path, |
1233 remote_dest_file_path, | 1246 remote_dest_file_path, |
1234 callback, | 1247 callback), |
1235 base::Owned(error), | 1248 base::Owned(error), |
1236 base::Owned(file_size), | 1249 base::Owned(file_size), |
1237 base::Owned(content_type))); | 1250 base::Owned(content_type))); |
1238 } | 1251 } |
1239 | 1252 |
1240 void GDataFileSystem::StartFileUploadOnUIThread( | 1253 void GDataFileSystem::StartFileUploadOnUIThread( |
1241 const FilePath& local_file, | 1254 const StartFileUploadParams& params, |
1242 const FilePath& remote_dest_file, | |
1243 const FileOperationCallback& callback, | |
1244 GDataFileError* error, | 1255 GDataFileError* error, |
1245 int64* file_size, | 1256 int64* file_size, |
1246 std::string* content_type) { | 1257 std::string* content_type) { |
1247 // This method needs to run on the UI thread as required by | 1258 // This method needs to run on the UI thread as required by |
1248 // GDataUploader::UploadNewFile(). | 1259 // GDataUploader::UploadNewFile(). |
1249 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1250 DCHECK(error); | 1261 DCHECK(error); |
1251 DCHECK(file_size); | 1262 DCHECK(file_size); |
1252 DCHECK(content_type); | 1263 DCHECK(content_type); |
1253 | 1264 |
1254 if (*error != GDATA_FILE_OK) { | 1265 if (*error != GDATA_FILE_OK) { |
1255 if (!callback.is_null()) | 1266 if (!params.callback.is_null()) |
1256 callback.Run(*error); | 1267 params.callback.Run(*error); |
1257 | 1268 |
1258 return; | 1269 return; |
1259 } | 1270 } |
1260 | 1271 |
1261 // Make sure the destination directory exists. | 1272 // Make sure the destination directory exists. |
1262 GDataEntry* dest_dir = GetGDataEntryByPath(remote_dest_file.DirName()); | 1273 GetEntryInfoByPath( |
1263 if (!dest_dir || !dest_dir->AsGDataDirectory()) { | 1274 params.remote_file_path.DirName(), |
1264 if (!callback.is_null()) | 1275 base::Bind( |
1265 callback.Run(GDATA_FILE_ERROR_NOT_FOUND); | 1276 &GDataFileSystem::StartFileUploadOnUIThreadAfterGetEntryInfo, |
1266 NOTREACHED(); | 1277 ui_weak_ptr_, |
| 1278 params, |
| 1279 *file_size, |
| 1280 *content_type)); |
| 1281 } |
| 1282 |
| 1283 void GDataFileSystem::StartFileUploadOnUIThreadAfterGetEntryInfo( |
| 1284 const StartFileUploadParams& params, |
| 1285 int64 file_size, |
| 1286 std::string content_type, |
| 1287 GDataFileError error, |
| 1288 scoped_ptr<GDataEntryProto> entry_proto) { |
| 1289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 1290 |
| 1291 if (entry_proto.get() && !entry_proto->file_info().is_directory()) |
| 1292 error = GDATA_FILE_ERROR_NOT_A_DIRECTORY; |
| 1293 |
| 1294 if (error != GDATA_FILE_OK) { |
| 1295 if (!params.callback.is_null()) |
| 1296 params.callback.Run(error); |
1267 return; | 1297 return; |
1268 } | 1298 } |
| 1299 DCHECK(entry_proto.get()); |
1269 | 1300 |
1270 // Fill in values of UploadFileInfo. | 1301 // Fill in values of UploadFileInfo. |
1271 scoped_ptr<UploadFileInfo> upload_file_info(new UploadFileInfo); | 1302 scoped_ptr<UploadFileInfo> upload_file_info(new UploadFileInfo); |
1272 upload_file_info->file_path = local_file; | 1303 upload_file_info->file_path = params.local_file_path; |
1273 upload_file_info->file_size = *file_size; | 1304 upload_file_info->file_size = file_size; |
1274 upload_file_info->gdata_path = remote_dest_file; | 1305 upload_file_info->gdata_path = params.remote_file_path; |
1275 // Use the file name as the title. | 1306 // Use the file name as the title. |
1276 upload_file_info->title = remote_dest_file.BaseName().value(); | 1307 upload_file_info->title = params.remote_file_path.BaseName().value(); |
1277 upload_file_info->content_length = *file_size; | 1308 upload_file_info->content_length = file_size; |
1278 upload_file_info->all_bytes_present = true; | 1309 upload_file_info->all_bytes_present = true; |
1279 upload_file_info->content_type = *content_type; | 1310 upload_file_info->content_type = content_type; |
1280 upload_file_info->initial_upload_location = | 1311 upload_file_info->initial_upload_location = GURL(entry_proto->upload_url()); |
1281 dest_dir->AsGDataDirectory()->upload_url(); | |
1282 | 1312 |
1283 upload_file_info->completion_callback = | 1313 upload_file_info->completion_callback = |
1284 base::Bind(&GDataFileSystem::OnTransferCompleted, | 1314 base::Bind(&GDataFileSystem::OnTransferCompleted, |
1285 ui_weak_ptr_, | 1315 ui_weak_ptr_, |
1286 callback); | 1316 params.callback); |
1287 | 1317 |
1288 uploader_->UploadNewFile(upload_file_info.Pass()); | 1318 uploader_->UploadNewFile(upload_file_info.Pass()); |
1289 } | 1319 } |
1290 | 1320 |
1291 void GDataFileSystem::OnTransferCompleted( | 1321 void GDataFileSystem::OnTransferCompleted( |
1292 const FileOperationCallback& callback, | 1322 const FileOperationCallback& callback, |
1293 GDataFileError error, | 1323 GDataFileError error, |
1294 scoped_ptr<UploadFileInfo> upload_file_info) { | 1324 scoped_ptr<UploadFileInfo> upload_file_info) { |
1295 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
1296 DCHECK(upload_file_info.get()); | 1326 DCHECK(upload_file_info.get()); |
(...skipping 2766 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4063 // must go through here. Removes the |file_path| from the remembered set so | 4093 // must go through here. Removes the |file_path| from the remembered set so |
4064 // that subsequent operations can open the file again. | 4094 // that subsequent operations can open the file again. |
4065 open_files_.erase(file_path); | 4095 open_files_.erase(file_path); |
4066 | 4096 |
4067 // Then invokes the user-supplied callback function. | 4097 // Then invokes the user-supplied callback function. |
4068 if (!callback.is_null()) | 4098 if (!callback.is_null()) |
4069 callback.Run(result); | 4099 callback.Run(result); |
4070 } | 4100 } |
4071 | 4101 |
4072 } // namespace gdata | 4102 } // namespace gdata |
OLD | NEW |