Chromium Code Reviews| Index: chrome/browser/chromeos/gdata/gdata_uploader.cc |
| diff --git a/chrome/browser/chromeos/gdata/gdata_uploader.cc b/chrome/browser/chromeos/gdata/gdata_uploader.cc |
| index f9dc6604b6655da8362e6fcd4d25d025e615318c..4009105e2e5507ade5bbf852ab502713442fe768 100644 |
| --- a/chrome/browser/chromeos/gdata/gdata_uploader.cc |
| +++ b/chrome/browser/chromeos/gdata/gdata_uploader.cc |
| @@ -73,6 +73,8 @@ int GDataUploader::UploadFile(scoped_ptr<UploadFileInfo> upload_file_info) { |
| void GDataUploader::UpdateUpload(int upload_id, |
| content::DownloadItem* download) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| UploadFileInfo* upload_file_info = GetUploadFileInfo(upload_id); |
| if (!upload_file_info) |
| return; |
| @@ -319,8 +321,10 @@ void GDataUploader::OnResumeUploadResponseReceived( |
| upload_file_info->completion_callback.Run(base::PLATFORM_FILE_OK, |
| upload_file_info); |
| } |
| - // TODO(achuith): DeleteUpload() here and let clients call |
| - // GDataFileSystem::AddUploadedFile. |
| + |
| + // Remove |upload_id| from the UploadFileInfoMap. The UploadFileInfo object |
| + // will be deleted later upon transfer completion. |
| + RemoveUpload(upload_id); |
| return; |
| } |
| @@ -357,35 +361,45 @@ void GDataUploader::MoveFileToCache(UploadFileInfo* upload_file_info) { |
| if (upload_file_info->entry == NULL) |
| return; |
| + int upload_id = upload_file_info->upload_id; |
|
achuithb
2012/06/14 22:27:18
nit: could we make this const?
hshi1
2012/06/15 00:16:28
Done.
|
| DVLOG(1) << "MoveFileToCache " << upload_file_info->file_path.value(); |
| file_system_->AddUploadedFile( |
| upload_file_info->gdata_path.DirName(), |
| upload_file_info->entry.get(), |
| upload_file_info->file_path, |
| - GDataCache::FILE_OPERATION_MOVE); |
| - DeleteUpload(upload_file_info); |
| + GDataCache::FILE_OPERATION_MOVE, |
| + base::Bind(&GDataUploader::OnAddUploadFileComplete, |
| + uploader_factory_.GetWeakPtr(), |
| + upload_file_info)); |
| + |
| + // Remove |upload_id| from the UploadFileInfoMap. The UploadFileInfo object |
| + // will be deleted in OnAddUploadFileComplete. |
| + RemoveUpload(upload_id); |
| +} |
| + |
| +void GDataUploader::OnAddUploadFileComplete(UploadFileInfo* upload_file_info) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + delete upload_file_info; |
| } |
| void GDataUploader::UploadFailed(UploadFileInfo* upload_file_info, |
| base::PlatformFileError error) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + int upload_id = upload_file_info->upload_id; |
|
achuithb
2012/06/14 22:27:18
nit: make this const
hshi1
2012/06/15 00:16:28
Done.
|
| LOG(ERROR) << "Upload failed " << upload_file_info->DebugString(); |
| if (!upload_file_info->completion_callback.is_null()) { |
| upload_file_info->completion_callback.Run(error, |
| upload_file_info); |
| } |
| - DeleteUpload(upload_file_info); |
| + |
| + RemoveUpload(upload_id); |
| + delete upload_file_info; |
| } |
| -void GDataUploader::DeleteUpload(UploadFileInfo* upload_file_info) { |
| +void GDataUploader::RemoveUpload(int upload_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - |
| - DVLOG(1) << "Deleting upload " << upload_file_info->gdata_path.value(); |
| - pending_uploads_.erase(upload_file_info->upload_id); |
| - |
| - // The file stream is closed by the destructor asynchronously. |
| - delete upload_file_info->file_stream; |
| - delete upload_file_info; |
| + pending_uploads_.erase(upload_id); |
| } |
| } // namespace gdata |