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

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

Issue 9844006: GData downloads cleanup (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: asanka review feedback Created 8 years, 9 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
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_uploader.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/gdata/gdata_uploader.cc
===================================================================
--- chrome/browser/chromeos/gdata/gdata_uploader.cc (revision 129387)
+++ chrome/browser/chromeos/gdata/gdata_uploader.cc (working copy)
@@ -39,25 +39,33 @@
GDataUploader::~GDataUploader() {
}
-void GDataUploader::UploadFile(UploadFileInfo* upload_file_info) {
+int GDataUploader::UploadFile(scoped_ptr<UploadFileInfo> upload_file_info) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
- DCHECK(upload_file_info);
+ DCHECK(upload_file_info.get());
DCHECK_EQ(upload_file_info->upload_id, -1);
+ DCHECK(!upload_file_info->file_path.empty());
+ DCHECK_NE(upload_file_info->file_size, 0);
+ DCHECK(!upload_file_info->gdata_path.empty());
+ DCHECK(!upload_file_info->title.empty());
+ DCHECK(!upload_file_info->content_type.empty());
- upload_file_info->upload_id = next_upload_id_++;
+ const int upload_id = next_upload_id_++;
+ upload_file_info->upload_id = upload_id;
// Add upload_file_info to our internal map and take ownership.
- pending_uploads_[upload_file_info->upload_id] = upload_file_info;
- DVLOG(1) << "Uploading file: " << upload_file_info->DebugString();
+ pending_uploads_[upload_id] = upload_file_info.release();
+ UploadFileInfo* info = GetUploadFileInfo(upload_id);
+ DVLOG(1) << "Uploading file: " << info->DebugString();
+
// Create a FileStream to make sure the file can be opened successfully.
- upload_file_info->file_stream = new net::FileStream(NULL);
+ info->file_stream = new net::FileStream(NULL);
// Create buffer to hold upload data.
- upload_file_info->buf_len = std::min(upload_file_info->file_size,
- kUploadChunkSize);
- upload_file_info->buf = new net::IOBuffer(upload_file_info->buf_len);
+ info->buf_len = std::min(info->file_size, kUploadChunkSize);
+ info->buf = new net::IOBuffer(info->buf_len);
- OpenFile(upload_file_info);
+ OpenFile(info);
+ return upload_id;
}
void GDataUploader::UpdateUpload(int upload_id,
@@ -108,7 +116,7 @@
}
if (download->IsComplete())
- UploadComplete(upload_file_info);
+ MoveFileToCache(upload_file_info);
}
int64 GDataUploader::GetUploadedBytes(int upload_id) const {
@@ -130,22 +138,6 @@
return it != pending_uploads_.end() ? it->second : NULL;
}
-void GDataUploader::RemovePendingUpload(UploadFileInfo* upload_file_info) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
-
- pending_uploads_.erase(upload_file_info->upload_id);
- if (!upload_file_info->completion_callback.is_null()) {
- upload_file_info->completion_callback.Run(
- base::PLATFORM_FILE_ERROR_ABORT, NULL);
- }
-
- file_system_->CancelOperation(upload_file_info->gdata_path);
-
- // The file stream is closed by the destructor asynchronously.
- delete upload_file_info->file_stream;
- delete upload_file_info;
-}
-
void GDataUploader::OpenFile(UploadFileInfo* upload_file_info) {
// Open the file asynchronously.
const int rv = upload_file_info->file_stream->Open(
@@ -183,7 +175,7 @@
upload_file_info->num_file_open_tries >= kMaxFileOpenTries;
upload_file_info->should_retry_file_open = !exceeded_max_attempts;
if (exceeded_max_attempts)
- RemovePendingUpload(upload_file_info);
+ UploadFailed(upload_file_info);
return;
}
@@ -216,8 +208,7 @@
if (code != HTTP_SUCCESS) {
// TODO(achuith): Handle error codes from Google Docs server.
- RemovePendingUpload(upload_file_info);
- NOTREACHED();
+ UploadFailed(upload_file_info);
return;
}
@@ -315,11 +306,12 @@
// 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->entry.get());
+ upload_file_info->completion_callback.Run(base::PLATFORM_FILE_OK,
+ upload_file_info);
upload_file_info->completion_callback.Reset();
}
+ // TODO(achuith): DeleteUpload() here and let clients call
+ // GDataFileSystem::AddUploadedFile.
return;
}
@@ -344,7 +336,7 @@
<< ", end_range_received=" << response.end_range_received
<< ", expected end range=" << upload_file_info->end_range;
- RemovePendingUpload(upload_file_info);
+ UploadFailed(upload_file_info);
return;
}
@@ -356,13 +348,40 @@
UploadNextChunk(upload_file_info);
}
-void GDataUploader::UploadComplete(UploadFileInfo* upload_file_info) {
- DVLOG(1) << "UploadComplete " << 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,
- GDataFileSystemInterface::FILE_OPERATION_MOVE);
- RemovePendingUpload(upload_file_info);
+void GDataUploader::MoveFileToCache(UploadFileInfo* upload_file_info) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ if (upload_file_info->entry == NULL)
+ return;
+
+ 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,
+ GDataFileSystemInterface::FILE_OPERATION_MOVE);
+ DeleteUpload(upload_file_info);
}
+void GDataUploader::UploadFailed(UploadFileInfo* upload_file_info) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ LOG(ERROR) << "Upload failed " << upload_file_info->DebugString();
+ if (!upload_file_info->completion_callback.is_null()) {
+ upload_file_info->completion_callback.Run(base::PLATFORM_FILE_ERROR_ABORT,
+ upload_file_info);
+ }
+ file_system_->CancelOperation(upload_file_info->gdata_path);
+ DeleteUpload(upload_file_info);
+}
+
+void GDataUploader::DeleteUpload(UploadFileInfo* upload_file_info) {
+ 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;
+}
+
} // namespace gdata
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_uploader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698