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

Side by Side Diff: chrome/browser/android/download/download_controller.cc

Issue 2371773003: Clean up Android DownloadManager code as most download now go through Chrome Network stack (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/android/download/download_controller.h" 5 #include "chrome/browser/android/download/download_controller.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/android/context_utils.h" 10 #include "base/android/context_utils.h"
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 ScopedJavaLocalRef<jobject> jwindow_android = window_android->GetJavaObject(); 227 ScopedJavaLocalRef<jobject> jwindow_android = window_android->GetJavaObject();
228 228
229 DCHECK_CURRENTLY_ON(BrowserThread::UI); 229 DCHECK_CURRENTLY_ON(BrowserThread::UI);
230 DCHECK(!jwindow_android.is_null()); 230 DCHECK(!jwindow_android.is_null());
231 231
232 JNIEnv* env = base::android::AttachCurrentThread(); 232 JNIEnv* env = base::android::AttachCurrentThread();
233 return Java_DownloadController_hasFileAccess( 233 return Java_DownloadController_hasFileAccess(
234 env, GetJavaObject()->Controller(env), jwindow_android); 234 env, GetJavaObject()->Controller(env), jwindow_android);
235 } 235 }
236 236
237 void DownloadController::CreateGETDownload(
238 const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
239 bool must_download,
240 const DownloadInfo& info) {
241 DCHECK_CURRENTLY_ON(BrowserThread::IO);
242
243 // We are yielding the UI thread and render_view_host may go away by
244 // the time we come back. Pass along render_process_id and render_view_id
245 // to retrieve it later (if it still exists).
246 BrowserThread::PostTask(
247 BrowserThread::UI, FROM_HERE,
248 base::Bind(&DownloadController::StartAndroidDownload,
249 base::Unretained(this),
250 wc_getter, must_download, info));
251 }
252
253 void DownloadController::StartAndroidDownload(
254 const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
255 bool must_download, const DownloadInfo& info) {
256 DCHECK_CURRENTLY_ON(BrowserThread::UI);
257
258 WebContents* web_contents = wc_getter.Run();
259 if (!web_contents) {
260 // The view went away. Can't proceed.
261 LOG(ERROR) << "Download failed on URL:" << info.url.spec();
262 return;
263 }
264
265 AcquireFileAccessPermission(
266 web_contents,
267 base::Bind(&DownloadController::StartAndroidDownloadInternal,
268 base::Unretained(this), wc_getter, must_download, info));
269 }
270
271 void DownloadController::StartAndroidDownloadInternal(
272 const content::ResourceRequestInfo::WebContentsGetter& wc_getter,
273 bool must_download, const DownloadInfo& info, bool allowed) {
274 DCHECK_CURRENTLY_ON(BrowserThread::UI);
275 if (!allowed)
276 return;
277
278 WebContents* web_contents = wc_getter.Run();
279 // The view went away. Can't proceed.
280 if (!web_contents)
281 return;
282
283 base::string16 filename = net::GetSuggestedFilename(
284 info.url, info.content_disposition,
285 std::string(), // referrer_charset
286 std::string(), // suggested_name
287 info.original_mime_type,
288 default_file_name_);
289 ChromeDownloadDelegate::FromWebContents(web_contents)->RequestHTTPGetDownload(
290 info.url.spec(), info.user_agent,
291 info.content_disposition, info.original_mime_type,
292 info.cookie, info.referer, filename,
293 info.total_bytes, info.has_user_gesture,
294 must_download);
295 }
296
297 void DownloadController::OnDownloadStarted( 237 void DownloadController::OnDownloadStarted(
298 DownloadItem* download_item) { 238 DownloadItem* download_item) {
299 DCHECK_CURRENTLY_ON(BrowserThread::UI); 239 DCHECK_CURRENTLY_ON(BrowserThread::UI);
300 WebContents* web_contents = download_item->GetWebContents(); 240 WebContents* web_contents = download_item->GetWebContents();
301 if (!web_contents) 241 if (!web_contents)
302 return; 242 return;
303 243
304 // Register for updates to the DownloadItem. 244 // Register for updates to the DownloadItem.
305 download_item->AddObserver(this); 245 download_item->AddObserver(this);
306 246
307 ChromeDownloadDelegate::FromWebContents(web_contents)->OnDownloadStarted( 247 ChromeDownloadDelegate::FromWebContents(web_contents)->OnDownloadStarted(
308 download_item->GetTargetFilePath().BaseName().value(), 248 download_item->GetTargetFilePath().BaseName().value());
309 download_item->GetMimeType());
310 } 249 }
311 250
312 void DownloadController::OnDownloadUpdated(DownloadItem* item) { 251 void DownloadController::OnDownloadUpdated(DownloadItem* item) {
313 DCHECK_CURRENTLY_ON(BrowserThread::UI); 252 DCHECK_CURRENTLY_ON(BrowserThread::UI);
314 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED)) 253 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED))
315 OnDangerousDownload(item); 254 OnDangerousDownload(item);
316 255
317 JNIEnv* env = base::android::AttachCurrentThread(); 256 JNIEnv* env = base::android::AttachCurrentThread();
318 ScopedJavaLocalRef<jstring> jguid = 257 ScopedJavaLocalRef<jstring> jguid =
319 ConvertUTF8ToJavaString(env, item->GetGuid()); 258 ConvertUTF8ToJavaString(env, item->GetGuid());
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 if (!item) 367 if (!item)
429 return; 368 return;
430 if (accept) { 369 if (accept) {
431 item->ValidateDangerousDownload(); 370 item->ValidateDangerousDownload();
432 } else { 371 } else {
433 DownloadController::RecordDownloadCancelReason( 372 DownloadController::RecordDownloadCancelReason(
434 DownloadController::CANCEL_REASON_DANGEROUS_DOWNLOAD_INFOBAR_DISMISSED); 373 DownloadController::CANCEL_REASON_DANGEROUS_DOWNLOAD_INFOBAR_DISMISSED);
435 item->Remove(); 374 item->Remove();
436 } 375 }
437 } 376 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698