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

Unified Diff: chrome/browser/chromeos/gdata/gdata_uploader.cc

Issue 10540132: gdata: Convert GDataFileSystem::AddUploadFile() to asynchronous. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Get rid of the lock as suggested by Satoru. Created 8 years, 6 months 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698