Index: chrome/browser/chromeos/gdata/gdata_download_observer.cc |
diff --git a/chrome/browser/chromeos/gdata/gdata_download_observer.cc b/chrome/browser/chromeos/gdata/gdata_download_observer.cc |
index b566a009a4a64278e5de1fce5b393a4291bebe61..2497b4f0df1bae835bec95739cc7e2d474019277 100644 |
--- a/chrome/browser/chromeos/gdata/gdata_download_observer.cc |
+++ b/chrome/browser/chromeos/gdata/gdata_download_observer.cc |
@@ -5,9 +5,10 @@ |
#include "chrome/browser/chromeos/gdata/gdata_download_observer.h" |
#include "base/file_util.h" |
-#include "chrome/browser/chromeos/gdata/gdata_uploader.h" |
#include "chrome/browser/chromeos/gdata/gdata_upload_file_info.h" |
+#include "chrome/browser/chromeos/gdata/gdata_uploader.h" |
#include "chrome/browser/chromeos/gdata/gdata_util.h" |
+#include "chrome/browser/download/download_completion_blocker.h" |
#include "net/base/net_util.h" |
using content::BrowserThread; |
@@ -25,25 +26,22 @@ const char kUploadingKey[] = "Uploading"; |
const char kGDataPathKey[] = "GDataPath"; |
// External Data stored in DownloadItem for ongoing uploads. |
-class UploadingExternalData : public DownloadItem::ExternalData { |
+class UploadingExternalData : public DownloadCompletionBlocker { |
public: |
UploadingExternalData(GDataUploader* uploader, int upload_id) |
: uploader_(uploader), |
- upload_id_(upload_id), |
- is_complete_(false) { |
+ upload_id_(upload_id) { |
} |
virtual ~UploadingExternalData() {} |
- void MarkAsComplete() { is_complete_ = true; } |
- |
int upload_id() const { return upload_id_; } |
- bool is_complete() const { return is_complete_; } |
GDataUploader* uploader() { return uploader_; } |
private: |
GDataUploader* uploader_; |
int upload_id_; |
- bool is_complete_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(UploadingExternalData); |
}; |
// External Data stored in DownloadItem for gdata path. |
@@ -126,14 +124,21 @@ bool GDataDownloadObserver::IsGDataDownload(DownloadItem* download) { |
} |
// static |
-bool GDataDownloadObserver::IsReadyToComplete(DownloadItem* download) { |
+bool GDataDownloadObserver::IsReadyToComplete( |
+ DownloadItem* download, |
+ const base::Closure& complete_callback) { |
// |download| is ready for completion (as far as GData is concerned) if: |
// 1. It's not a GData download. |
// - or - |
// 2. The upload has completed. |
+ if (!IsGDataDownload(download)) |
+ return true; |
UploadingExternalData* upload_data = GetUploadingExternalData(download); |
- return !IsGDataDownload(download) || |
- (upload_data && upload_data->is_complete()); |
+ DCHECK(upload_data); |
+ if (upload_data->is_complete()) |
+ return true; |
+ upload_data->set_callback(complete_callback); |
+ return false; |
} |
// static |
@@ -335,19 +340,10 @@ void GDataDownloadObserver::OnUploadComplete(int32 download_id, |
return; |
} |
DVLOG(1) << "Completing upload for download ID " << download_id; |
- DownloadItem* download = iter->second; |
- UploadingExternalData* upload_data = GetUploadingExternalData(download); |
+ DownloadItem* download_item = iter->second; |
+ UploadingExternalData* upload_data = GetUploadingExternalData(download_item); |
DCHECK(upload_data); |
- upload_data->MarkAsComplete(); |
- download->MaybeCompleteDownload(); |
- // MaybeCompleteDownload() only works for non-SavePackage downloads. |
- // SavePackage::Finish() is the SavePackage equivalent of |
- // MaybeCompleteDownload(). MHTML SavePackages may upload to GData (see |
- // SavePackageFilePickerChromeOS), so MHTML SavePackages use |
- // OnDownloadUpdated() to wait for the upload to complete before calling |
- // Finish(). Call UpdateObservers() manually now in case this download is an |
- // MHTML SavePackage. |
- download->UpdateObservers(); |
+ upload_data->CompleteDownload(); |
} |
} // namespace gdata |