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

Side by Side Diff: content/browser/download/download_item_impl.cc

Issue 11640007: Make the UI an observer of downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Android clang build Created 7 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 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 // File method ordering: Methods in this file are in the same order as 5 // File method ordering: Methods in this file are in the same order as
6 // in download_item_impl.h, with the following exception: The public 6 // in download_item_impl.h, with the following exception: The public
7 // interface Start is placed in chronological order with the other 7 // interface Start is placed in chronological order with the other
8 // (private) routines that together define a DownloadItem's state 8 // (private) routines that together define a DownloadItem's state
9 // transitions as the download progresses. See "Download progression 9 // transitions as the download progresses. See "Download progression
10 // cascade" later in this file. 10 // cascade" later in this file.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 namespace { 58 namespace {
59 59
60 void DeleteDownloadedFile(const base::FilePath& path) { 60 void DeleteDownloadedFile(const base::FilePath& path) {
61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
62 62
63 // Make sure we only delete files. 63 // Make sure we only delete files.
64 if (!file_util::DirectoryExists(path)) 64 if (!file_util::DirectoryExists(path))
65 file_util::Delete(path, false); 65 file_util::Delete(path, false);
66 } 66 }
67 67
68 // Classes to null out request handle calls (for SavePage DownloadItems, which
69 // may have, e.g., Cancel() called on them without it doing anything)
70 // and to DCHECK on them (for history DownloadItems, which should never have
71 // any operation that implies an off-thread component, since they don't
72 // have any).
73 class NullDownloadRequestHandle : public DownloadRequestHandleInterface {
74 public:
75 NullDownloadRequestHandle() {}
76
77 // DownloadRequestHandleInterface calls
78 virtual WebContents* GetWebContents() const OVERRIDE {
79 return NULL;
80 }
81 virtual DownloadManager* GetDownloadManager() const OVERRIDE {
82 return NULL;
83 }
84 virtual void PauseRequest() const OVERRIDE {}
85 virtual void ResumeRequest() const OVERRIDE {}
86 virtual void CancelRequest() const OVERRIDE {}
87 virtual std::string DebugString() const OVERRIDE {
88 return "Null DownloadRequestHandle";
89 }
90 };
91
92 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that 68 // Wrapper around DownloadFile::Detach and DownloadFile::Cancel that
93 // takes ownership of the DownloadFile and hence implicitly destroys it 69 // takes ownership of the DownloadFile and hence implicitly destroys it
94 // at the end of the function. 70 // at the end of the function.
95 static void DownloadFileDetach(scoped_ptr<DownloadFile> download_file) { 71 static void DownloadFileDetach(scoped_ptr<DownloadFile> download_file) {
96 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 72 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
97 download_file->Detach(); 73 download_file->Detach();
98 } 74 }
99 75
100 static void DownloadFileCancel(scoped_ptr<DownloadFile> download_file) { 76 static void DownloadFileCancel(scoped_ptr<DownloadFile> download_file) {
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 77 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 bound_net_log_.AddEvent( 186 bound_net_log_.AddEvent(
211 net::NetLog::TYPE_DOWNLOAD_URL_REQUEST, 187 net::NetLog::TYPE_DOWNLOAD_URL_REQUEST,
212 info.request_bound_net_log.source().ToEventParametersCallback()); 188 info.request_bound_net_log.source().ToEventParametersCallback());
213 189
214 info.request_bound_net_log.AddEvent( 190 info.request_bound_net_log.AddEvent(
215 net::NetLog::TYPE_DOWNLOAD_STARTED, 191 net::NetLog::TYPE_DOWNLOAD_STARTED,
216 bound_net_log_.source().ToEventParametersCallback()); 192 bound_net_log_.source().ToEventParametersCallback());
217 } 193 }
218 194
219 // Constructing for the "Save Page As..." feature: 195 // Constructing for the "Save Page As..." feature:
220 DownloadItemImpl::DownloadItemImpl(DownloadItemImplDelegate* delegate, 196 DownloadItemImpl::DownloadItemImpl(
221 const base::FilePath& path, 197 DownloadItemImplDelegate* delegate,
222 const GURL& url, 198 const base::FilePath& path,
223 DownloadId download_id, 199 const GURL& url,
224 const std::string& mime_type, 200 DownloadId download_id,
225 const net::BoundNetLog& bound_net_log) 201 const std::string& mime_type,
202 scoped_ptr<DownloadRequestHandleInterface> request_handle,
203 const net::BoundNetLog& bound_net_log)
226 : is_save_package_download_(true), 204 : is_save_package_download_(true),
227 request_handle_(new NullDownloadRequestHandle()), 205 request_handle_(request_handle.Pass()),
228 download_id_(download_id), 206 download_id_(download_id),
229 current_path_(path), 207 current_path_(path),
230 target_path_(path), 208 target_path_(path),
231 target_disposition_(TARGET_DISPOSITION_OVERWRITE), 209 target_disposition_(TARGET_DISPOSITION_OVERWRITE),
232 url_chain_(1, url), 210 url_chain_(1, url),
233 referrer_url_(GURL()), 211 referrer_url_(GURL()),
234 transition_type_(PAGE_TRANSITION_LINK), 212 transition_type_(PAGE_TRANSITION_LINK),
235 has_user_gesture_(false), 213 has_user_gesture_(false),
236 mime_type_(mime_type), 214 mime_type_(mime_type),
237 original_mime_type_(mime_type), 215 original_mime_type_(mime_type),
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 // fails isn't a good one. Can we hack up a name based on the 1097 // fails isn't a good one. Can we hack up a name based on the
1120 // URLRequest? We'll need to make sure that initialization happens 1098 // URLRequest? We'll need to make sure that initialization happens
1121 // properly. Possibly the right thing is to have the UI handle 1099 // properly. Possibly the right thing is to have the UI handle
1122 // this case specially. 1100 // this case specially.
1123 return; 1101 return;
1124 } 1102 }
1125 1103
1126 // If we're resuming an interrupted download, we may already know 1104 // If we're resuming an interrupted download, we may already know
1127 // the download target so we can skip target name determination. 1105 // the download target so we can skip target name determination.
1128 if (!GetTargetFilePath().empty() && !GetFullPath().empty()) { 1106 if (!GetTargetFilePath().empty() && !GetFullPath().empty()) {
1129 delegate_->ShowDownloadInBrowser(this);
1130 MaybeCompleteDownload(); 1107 MaybeCompleteDownload();
1131 return; 1108 return;
1132 } 1109 }
1133 1110
1134 // The target path might be set and the full path empty if we failed 1111 // The target path might be set and the full path empty if we failed
1135 // the intermediate rename--re-do file name determination in this case. 1112 // the intermediate rename--re-do file name determination in this case.
1136 // TODO(rdsmith,asanka): Clean up this logic. 1113 // TODO(rdsmith,asanka): Clean up this logic.
1137 target_path_ = base::FilePath(); 1114 target_path_ = base::FilePath();
1138 1115
1139 delegate_->DetermineDownloadTarget( 1116 delegate_->DetermineDownloadTarget(
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 intermediate_path, callback)); 1173 intermediate_path, callback));
1197 } 1174 }
1198 1175
1199 void DownloadItemImpl::OnDownloadRenamedToIntermediateName( 1176 void DownloadItemImpl::OnDownloadRenamedToIntermediateName(
1200 DownloadInterruptReason reason, 1177 DownloadInterruptReason reason,
1201 const base::FilePath& full_path) { 1178 const base::FilePath& full_path) {
1202 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1203 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true); 1180 VLOG(20) << __FUNCTION__ << " download=" << DebugString(true);
1204 if (DOWNLOAD_INTERRUPT_REASON_NONE != reason) { 1181 if (DOWNLOAD_INTERRUPT_REASON_NONE != reason) {
1205 Interrupt(reason); 1182 Interrupt(reason);
1206 // MaybeCompleteDownload() is a no-op if we've been interrupted,
1207 // so it's safe to fall through.
1208 } else { 1183 } else {
1209 SetFullPath(full_path); 1184 SetFullPath(full_path);
1185 MaybeCompleteDownload();
1210 } 1186 }
1211 delegate_->ShowDownloadInBrowser(this);
1212
1213 MaybeCompleteDownload();
1214 } 1187 }
1215 1188
1216 // When SavePackage downloads MHTML to GData (see 1189 // When SavePackage downloads MHTML to GData (see
1217 // SavePackageFilePickerChromeOS), GData calls MaybeCompleteDownload() like it 1190 // SavePackageFilePickerChromeOS), GData calls MaybeCompleteDownload() like it
1218 // does for non-SavePackage downloads, but SavePackage downloads never satisfy 1191 // does for non-SavePackage downloads, but SavePackage downloads never satisfy
1219 // IsDownloadReadyForCompletion(). GDataDownloadObserver manually calls 1192 // IsDownloadReadyForCompletion(). GDataDownloadObserver manually calls
1220 // DownloadItem::UpdateObservers() when the upload completes so that SavePackage 1193 // DownloadItem::UpdateObservers() when the upload completes so that SavePackage
1221 // notices that the upload has completed and runs its normal Finish() pathway. 1194 // notices that the upload has completed and runs its normal Finish() pathway.
1222 // MaybeCompleteDownload() is never the mechanism by which SavePackage completes 1195 // MaybeCompleteDownload() is never the mechanism by which SavePackage completes
1223 // downloads. SavePackage always uses its own Finish() to mark downloads 1196 // downloads. SavePackage always uses its own Finish() to mark downloads
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1635 case RESUME_MODE_USER_CONTINUE: 1608 case RESUME_MODE_USER_CONTINUE:
1636 return "USER_CONTINUE"; 1609 return "USER_CONTINUE";
1637 case RESUME_MODE_USER_RESTART: 1610 case RESUME_MODE_USER_RESTART:
1638 return "USER_RESTART"; 1611 return "USER_RESTART";
1639 } 1612 }
1640 NOTREACHED() << "Unknown resume mode " << mode; 1613 NOTREACHED() << "Unknown resume mode " << mode;
1641 return "unknown"; 1614 return "unknown";
1642 } 1615 }
1643 1616
1644 } // namespace content 1617 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_item_impl.h ('k') | content/browser/download/download_item_impl_delegate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698