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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_download_observer.cc

Issue 10263019: DownloadManagerDelegate::ShouldCompleteDownload(callback) (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: merge Created 8 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/gdata/gdata_download_observer.h" 5 #include "chrome/browser/chromeos/gdata/gdata_download_observer.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "chrome/browser/chromeos/gdata/gdata_upload_file_info.h"
8 #include "chrome/browser/chromeos/gdata/gdata_uploader.h" 9 #include "chrome/browser/chromeos/gdata/gdata_uploader.h"
9 #include "chrome/browser/chromeos/gdata/gdata_upload_file_info.h"
10 #include "chrome/browser/chromeos/gdata/gdata_util.h" 10 #include "chrome/browser/chromeos/gdata/gdata_util.h"
11 #include "chrome/browser/download/download_completion_blocker.h"
11 #include "net/base/net_util.h" 12 #include "net/base/net_util.h"
12 13
13 using content::BrowserThread; 14 using content::BrowserThread;
14 using content::DownloadManager; 15 using content::DownloadManager;
15 using content::DownloadItem; 16 using content::DownloadItem;
16 17
17 namespace gdata { 18 namespace gdata {
18 namespace { 19 namespace {
19 20
20 // Threshold file size after which we stream the file. 21 // Threshold file size after which we stream the file.
21 const int64 kStreamingFileSize = 1 << 20; // 1MB 22 const int64 kStreamingFileSize = 1 << 20; // 1MB
22 23
23 // Keys for DownloadItem::ExternalData. 24 // Keys for DownloadItem::ExternalData.
24 const char kUploadingKey[] = "Uploading"; 25 const char kUploadingKey[] = "Uploading";
25 const char kGDataPathKey[] = "GDataPath"; 26 const char kGDataPathKey[] = "GDataPath";
26 27
27 // External Data stored in DownloadItem for ongoing uploads. 28 // External Data stored in DownloadItem for ongoing uploads.
28 class UploadingExternalData : public DownloadItem::ExternalData { 29 class UploadingExternalData : public DownloadCompletionBlocker {
29 public: 30 public:
30 UploadingExternalData(GDataUploader* uploader, int upload_id) 31 UploadingExternalData(GDataUploader* uploader, int upload_id)
31 : uploader_(uploader), 32 : uploader_(uploader),
32 upload_id_(upload_id), 33 upload_id_(upload_id) {
33 is_complete_(false) {
34 } 34 }
35 virtual ~UploadingExternalData() {} 35 virtual ~UploadingExternalData() {}
36 36
37 void MarkAsComplete() { is_complete_ = true; }
38
39 int upload_id() const { return upload_id_; } 37 int upload_id() const { return upload_id_; }
40 bool is_complete() const { return is_complete_; }
41 GDataUploader* uploader() { return uploader_; } 38 GDataUploader* uploader() { return uploader_; }
42 39
43 private: 40 private:
44 GDataUploader* uploader_; 41 GDataUploader* uploader_;
45 int upload_id_; 42 int upload_id_;
46 bool is_complete_; 43
44 DISALLOW_COPY_AND_ASSIGN(UploadingExternalData);
47 }; 45 };
48 46
49 // External Data stored in DownloadItem for gdata path. 47 // External Data stored in DownloadItem for gdata path.
50 class GDataExternalData : public DownloadItem::ExternalData { 48 class GDataExternalData : public DownloadItem::ExternalData {
51 public: 49 public:
52 explicit GDataExternalData(const FilePath& path) : file_path_(path) {} 50 explicit GDataExternalData(const FilePath& path) : file_path_(path) {}
53 virtual ~GDataExternalData() {} 51 virtual ~GDataExternalData() {}
54 52
55 const FilePath& file_path() const { return file_path_; } 53 const FilePath& file_path() const { return file_path_; }
56 54
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 } 117 }
120 118
121 // static 119 // static
122 bool GDataDownloadObserver::IsGDataDownload(DownloadItem* download) { 120 bool GDataDownloadObserver::IsGDataDownload(DownloadItem* download) {
123 // We use the existence of the GDataExternalData object in download as a 121 // We use the existence of the GDataExternalData object in download as a
124 // signal that this is a GDataDownload. 122 // signal that this is a GDataDownload.
125 return !!GetGDataExternalData(download); 123 return !!GetGDataExternalData(download);
126 } 124 }
127 125
128 // static 126 // static
129 bool GDataDownloadObserver::IsReadyToComplete(DownloadItem* download) { 127 bool GDataDownloadObserver::IsReadyToComplete(
128 DownloadItem* download,
129 const base::Closure& complete_callback) {
130 // |download| is ready for completion (as far as GData is concerned) if: 130 // |download| is ready for completion (as far as GData is concerned) if:
131 // 1. It's not a GData download. 131 // 1. It's not a GData download.
132 // - or - 132 // - or -
133 // 2. The upload has completed. 133 // 2. The upload has completed.
134 if (!IsGDataDownload(download))
135 return true;
134 UploadingExternalData* upload_data = GetUploadingExternalData(download); 136 UploadingExternalData* upload_data = GetUploadingExternalData(download);
135 return !IsGDataDownload(download) || 137 DCHECK(upload_data);
136 (upload_data && upload_data->is_complete()); 138 if (upload_data->is_complete())
139 return true;
140 upload_data->set_callback(complete_callback);
141 return false;
137 } 142 }
138 143
139 // static 144 // static
140 int64 GDataDownloadObserver::GetUploadedBytes(DownloadItem* download) { 145 int64 GDataDownloadObserver::GetUploadedBytes(DownloadItem* download) {
141 UploadingExternalData* upload_data = GetUploadingExternalData(download); 146 UploadingExternalData* upload_data = GetUploadingExternalData(download);
142 if (!upload_data || !upload_data->uploader()) 147 if (!upload_data || !upload_data->uploader())
143 return 0; 148 return 0;
144 return upload_data->uploader()->GetUploadedBytes(upload_data->upload_id()); 149 return upload_data->uploader()->GetUploadedBytes(upload_data->upload_id());
145 } 150 }
146 151
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 void GDataDownloadObserver::OnUploadComplete(int32 download_id, 333 void GDataDownloadObserver::OnUploadComplete(int32 download_id,
329 base::PlatformFileError error, 334 base::PlatformFileError error,
330 UploadFileInfo* upload_file_info) { 335 UploadFileInfo* upload_file_info) {
331 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
332 DownloadMap::iterator iter = pending_downloads_.find(download_id); 337 DownloadMap::iterator iter = pending_downloads_.find(download_id);
333 if (iter == pending_downloads_.end()) { 338 if (iter == pending_downloads_.end()) {
334 DVLOG(1) << "Pending download not found" << download_id; 339 DVLOG(1) << "Pending download not found" << download_id;
335 return; 340 return;
336 } 341 }
337 DVLOG(1) << "Completing upload for download ID " << download_id; 342 DVLOG(1) << "Completing upload for download ID " << download_id;
338 DownloadItem* download = iter->second; 343 DownloadItem* download_item = iter->second;
339 UploadingExternalData* upload_data = GetUploadingExternalData(download); 344 UploadingExternalData* upload_data = GetUploadingExternalData(download_item);
340 DCHECK(upload_data); 345 DCHECK(upload_data);
341 upload_data->MarkAsComplete(); 346 upload_data->CompleteDownload();
342 download->MaybeCompleteDownload();
343 // MaybeCompleteDownload() only works for non-SavePackage downloads.
344 // SavePackage::Finish() is the SavePackage equivalent of
345 // MaybeCompleteDownload(). MHTML SavePackages may upload to GData (see
346 // SavePackageFilePickerChromeOS), so MHTML SavePackages use
347 // OnDownloadUpdated() to wait for the upload to complete before calling
348 // Finish(). Call UpdateObservers() manually now in case this download is an
349 // MHTML SavePackage.
350 download->UpdateObservers();
351 } 347 }
352 348
353 } // namespace gdata 349 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_download_observer.h ('k') | chrome/browser/download/chrome_download_manager_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698