OLD | NEW |
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" |
11 #include "base/android/jni_android.h" | 11 #include "base/android/jni_android.h" |
12 #include "base/android/jni_string.h" | 12 #include "base/android/jni_string.h" |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
15 #include "base/logging.h" | 15 #include "base/logging.h" |
16 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
17 #include "base/synchronization/lock.h" | 17 #include "base/synchronization/lock.h" |
18 #include "chrome/browser/android/download/chrome_download_delegate.h" | 18 #include "chrome/browser/android/download/chrome_download_delegate.h" |
19 #include "chrome/browser/android/download/dangerous_download_infobar_delegate.h" | 19 #include "chrome/browser/android/download/dangerous_download_infobar_delegate.h" |
20 #include "chrome/browser/android/download/download_manager_service.h" | 20 #include "chrome/browser/android/download/download_manager_service.h" |
| 21 #include "chrome/browser/android/tab_android.h" |
21 #include "chrome/browser/infobars/infobar_service.h" | 22 #include "chrome/browser/infobars/infobar_service.h" |
22 #include "chrome/browser/permissions/permission_update_infobar_delegate_android.
h" | 23 #include "chrome/browser/permissions/permission_update_infobar_delegate_android.
h" |
23 #include "chrome/browser/ui/android/view_android_helper.h" | 24 #include "chrome/browser/ui/android/view_android_helper.h" |
24 #include "chrome/grit/chromium_strings.h" | 25 #include "chrome/grit/chromium_strings.h" |
25 #include "content/public/browser/browser_context.h" | 26 #include "content/public/browser/browser_context.h" |
26 #include "content/public/browser/browser_thread.h" | 27 #include "content/public/browser/browser_thread.h" |
27 #include "content/public/browser/download_manager.h" | 28 #include "content/public/browser/download_manager.h" |
28 #include "content/public/browser/download_url_parameters.h" | 29 #include "content/public/browser/download_url_parameters.h" |
29 #include "content/public/browser/render_process_host.h" | 30 #include "content/public/browser/render_process_host.h" |
30 #include "content/public/browser/render_view_host.h" | 31 #include "content/public/browser/render_view_host.h" |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 287 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
287 | 288 |
288 JNIEnv* env = base::android::AttachCurrentThread(); | 289 JNIEnv* env = base::android::AttachCurrentThread(); |
289 return Java_DownloadController_hasFileAccess( | 290 return Java_DownloadController_hasFileAccess( |
290 env, GetJavaObject()->Controller(env)); | 291 env, GetJavaObject()->Controller(env)); |
291 } | 292 } |
292 | 293 |
293 void DownloadController::OnDownloadStarted( | 294 void DownloadController::OnDownloadStarted( |
294 DownloadItem* download_item) { | 295 DownloadItem* download_item) { |
295 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 296 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
296 WebContents* web_contents = download_item->GetWebContents(); | |
297 if (!web_contents) | |
298 return; | |
299 | 297 |
300 // Register for updates to the DownloadItem. | 298 // Register for updates to the DownloadItem. |
301 download_item->AddObserver(this); | 299 download_item->AddObserver(this); |
302 | 300 |
303 ChromeDownloadDelegate* delegate = | |
304 ChromeDownloadDelegate::FromWebContents(web_contents); | |
305 // For dangerous item, we need to show the dangerous infobar before the | 301 // For dangerous item, we need to show the dangerous infobar before the |
306 // download can start. | 302 // download can start. |
307 if (!download_item->IsDangerous() && delegate) { | 303 JNIEnv* env = base::android::AttachCurrentThread(); |
308 delegate->OnDownloadStarted( | 304 if (!download_item->IsDangerous()) { |
309 download_item->GetTargetFilePath().BaseName().value()); | 305 Java_DownloadController_onDownloadStarted( |
| 306 env, GetJavaObject()->Controller(env)); |
310 } | 307 } |
| 308 |
| 309 WebContents* web_contents = download_item->GetWebContents(); |
| 310 if (web_contents) { |
| 311 TabAndroid* tab = TabAndroid::FromWebContents(web_contents); |
| 312 if (tab && !tab->GetJavaObject().is_null()) { |
| 313 Java_DownloadController_closeTabIfBlank(env, tab->GetJavaObject()); |
| 314 } |
| 315 } |
| 316 |
311 OnDownloadUpdated(download_item); | 317 OnDownloadUpdated(download_item); |
312 } | 318 } |
313 | 319 |
314 void DownloadController::OnDownloadUpdated(DownloadItem* item) { | 320 void DownloadController::OnDownloadUpdated(DownloadItem* item) { |
315 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 321 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
316 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED)) { | 322 if (item->IsDangerous() && (item->GetState() != DownloadItem::CANCELLED)) { |
317 // Dont't show notification for a dangerous download, as user can resume | 323 // Dont't show notification for a dangerous download, as user can resume |
318 // the download after browser crash through notification. | 324 // the download after browser crash through notification. |
319 OnDangerousDownload(item); | 325 OnDangerousDownload(item); |
320 return; | 326 return; |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
392 int routing_id = web_contents->GetRenderViewHost()->GetRoutingID(); | 398 int routing_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
393 | 399 |
394 const content::ResourceRequestInfo::WebContentsGetter& wc_getter( | 400 const content::ResourceRequestInfo::WebContentsGetter& wc_getter( |
395 base::Bind(&GetWebContents, process_id, routing_id)); | 401 base::Bind(&GetWebContents, process_id, routing_id)); |
396 | 402 |
397 AcquireFileAccessPermission( | 403 AcquireFileAccessPermission( |
398 wc_getter, base::Bind(&CreateContextMenuDownload, wc_getter, params, | 404 wc_getter, base::Bind(&CreateContextMenuDownload, wc_getter, params, |
399 is_link, extra_headers)); | 405 is_link, extra_headers)); |
400 } | 406 } |
401 | 407 |
OLD | NEW |