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

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: Add comments to explain why Patch Set #11 is necesary. 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..297362c91349ac55878fcbd19d61814ff1fa5cb9 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;
@@ -178,7 +180,8 @@ void GDataUploader::OpenCompletionCallback(int upload_id, int result) {
upload_file_info->num_file_open_tries >= kMaxFileOpenTries;
upload_file_info->should_retry_file_open = !exceeded_max_attempts;
if (exceeded_max_attempts)
- UploadFailed(upload_file_info, base::PLATFORM_FILE_ERROR_NOT_FOUND);
+ UploadFailed(scoped_ptr<UploadFileInfo>(upload_file_info),
+ base::PLATFORM_FILE_ERROR_NOT_FOUND);
return;
}
@@ -188,7 +191,8 @@ void GDataUploader::OpenCompletionCallback(int upload_id, int result) {
const GURL destination_directory_url = file_system_->GetUploadUrlForDirectory(
upload_file_info->gdata_path.DirName());
if (destination_directory_url.is_empty()) {
- UploadFailed(upload_file_info, base::PLATFORM_FILE_ERROR_ABORT);
+ UploadFailed(scoped_ptr<UploadFileInfo>(upload_file_info),
+ base::PLATFORM_FILE_ERROR_ABORT);
return;
}
@@ -218,7 +222,8 @@ void GDataUploader::OnUploadLocationReceived(
if (code != HTTP_SUCCESS) {
// TODO(achuith): Handle error codes from Google Docs server.
- UploadFailed(upload_file_info, base::PLATFORM_FILE_ERROR_ABORT);
+ UploadFailed(scoped_ptr<UploadFileInfo>(upload_file_info),
+ base::PLATFORM_FILE_ERROR_ABORT);
return;
}
@@ -313,14 +318,17 @@ void GDataUploader::OnResumeUploadResponseReceived(
DVLOG(1) << "Successfully created uploaded file=["
<< upload_file_info->title;
+ // Remove |upload_id| from the UploadFileInfoMap. The UploadFileInfo object
+ // will be deleted upon completion of completion_callback.
+ RemoveUpload(upload_id);
+
// Done uploading.
upload_file_info->entry = entry.Pass();
if (!upload_file_info->completion_callback.is_null()) {
- upload_file_info->completion_callback.Run(base::PLATFORM_FILE_OK,
- upload_file_info);
+ upload_file_info->completion_callback.Run(
+ base::PLATFORM_FILE_OK,
+ scoped_ptr<UploadFileInfo>(upload_file_info));
}
- // TODO(achuith): DeleteUpload() here and let clients call
- // GDataFileSystem::AddUploadedFile.
return;
}
@@ -337,7 +345,8 @@ void GDataUploader::OnResumeUploadResponseReceived(
<< ", start_range_received=" << response.start_range_received
<< ", end_range_received=" << response.end_range_received
<< ", expected end range=" << upload_file_info->end_range;
- UploadFailed(upload_file_info,
+ UploadFailed(
+ scoped_ptr<UploadFileInfo>(upload_file_info),
response.code == HTTP_FORBIDDEN ?
base::PLATFORM_FILE_ERROR_NO_SPACE :
base::PLATFORM_FILE_ERROR_ABORT);
@@ -357,35 +366,36 @@ void GDataUploader::MoveFileToCache(UploadFileInfo* upload_file_info) {
if (upload_file_info->entry == NULL)
return;
+ // Remove |upload_id| from the UploadFileInfoMap. The UploadFileInfo object
+ // will be deleted upon completion of AddUploadedFile.
+ RemoveUpload(upload_file_info->upload_id);
+
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(&base::DeletePointer<UploadFileInfo>,
+ upload_file_info));
}
-void GDataUploader::UploadFailed(UploadFileInfo* upload_file_info,
+void GDataUploader::UploadFailed(scoped_ptr<UploadFileInfo> upload_file_info,
base::PlatformFileError error) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ RemoveUpload(upload_file_info->upload_id);
+
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);
+ upload_file_info.Pass());
}
- DeleteUpload(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
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_uploader.h ('k') | chrome/browser/chromeos/gdata/mock_gdata_file_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698