| OLD | NEW |
| 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 "content/browser/android/download_controller_android_impl.h" | 5 #include "content/browser/android/download_controller_android_impl.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/synchronization/lock.h" | 17 #include "base/synchronization/lock.h" |
| 17 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 18 #include "content/browser/android/content_view_core_impl.h" | 19 #include "content/browser/android/content_view_core_impl.h" |
| 19 #include "content/browser/android/deferred_download_observer.h" | 20 #include "content/browser/android/deferred_download_observer.h" |
| 20 #include "content/browser/download/download_item_impl.h" | 21 #include "content/browser/download/download_item_impl.h" |
| 21 #include "content/browser/download/download_manager_impl.h" | 22 #include "content/browser/download/download_manager_impl.h" |
| 22 #include "content/browser/loader/resource_dispatcher_host_impl.h" | 23 #include "content/browser/loader/resource_dispatcher_host_impl.h" |
| 23 #include "content/browser/renderer_host/render_process_host_impl.h" | 24 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 24 #include "content/browser/renderer_host/render_view_host_delegate.h" | 25 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| 25 #include "content/browser/renderer_host/render_view_host_impl.h" | 26 #include "content/browser/renderer_host/render_view_host_impl.h" |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 jboolean granted) { | 125 jboolean granted) { |
| 125 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 126 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 126 DCHECK(callback_id); | 127 DCHECK(callback_id); |
| 127 | 128 |
| 128 // Convert java long long int to c++ pointer, take ownership. | 129 // Convert java long long int to c++ pointer, take ownership. |
| 129 std::unique_ptr< | 130 std::unique_ptr< |
| 130 DownloadControllerAndroid::AcquireFileAccessPermissionCallback> | 131 DownloadControllerAndroid::AcquireFileAccessPermissionCallback> |
| 131 cb(reinterpret_cast< | 132 cb(reinterpret_cast< |
| 132 DownloadControllerAndroid::AcquireFileAccessPermissionCallback*>( | 133 DownloadControllerAndroid::AcquireFileAccessPermissionCallback*>( |
| 133 callback_id)); | 134 callback_id)); |
| 135 if (!granted) { |
| 136 DownloadControllerAndroid::RecordDownloadCancelReason( |
| 137 DownloadControllerAndroid::CANCEL_REASON_NO_STORAGE_PERMISSION); |
| 138 } |
| 134 cb->Run(granted); | 139 cb->Run(granted); |
| 135 } | 140 } |
| 136 | 141 |
| 137 struct DownloadControllerAndroidImpl::JavaObject { | 142 struct DownloadControllerAndroidImpl::JavaObject { |
| 138 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { | 143 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { |
| 139 return GetRealObject(env, obj); | 144 return GetRealObject(env, obj); |
| 140 } | 145 } |
| 141 jweak obj; | 146 jweak obj; |
| 142 }; | 147 }; |
| 143 | 148 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 155 } | 160 } |
| 156 | 161 |
| 157 //static | 162 //static |
| 158 void DownloadControllerAndroid::SetDownloadControllerAndroid( | 163 void DownloadControllerAndroid::SetDownloadControllerAndroid( |
| 159 DownloadControllerAndroid* download_controller) { | 164 DownloadControllerAndroid* download_controller) { |
| 160 base::AutoLock lock(g_download_controller_lock_.Get()); | 165 base::AutoLock lock(g_download_controller_lock_.Get()); |
| 161 DownloadControllerAndroid::download_controller_ = download_controller; | 166 DownloadControllerAndroid::download_controller_ = download_controller; |
| 162 } | 167 } |
| 163 | 168 |
| 164 // static | 169 // static |
| 170 void DownloadControllerAndroid::RecordDownloadCancelReason( |
| 171 DownloadCancelReason reason) { |
| 172 UMA_HISTOGRAM_ENUMERATION( |
| 173 "MobileDownload.CancelReason", reason, CANCEL_REASON_MAX); |
| 174 } |
| 175 |
| 176 // static |
| 165 DownloadControllerAndroidImpl* DownloadControllerAndroidImpl::GetInstance() { | 177 DownloadControllerAndroidImpl* DownloadControllerAndroidImpl::GetInstance() { |
| 166 return base::Singleton<DownloadControllerAndroidImpl>::get(); | 178 return base::Singleton<DownloadControllerAndroidImpl>::get(); |
| 167 } | 179 } |
| 168 | 180 |
| 169 DownloadControllerAndroidImpl::DownloadControllerAndroidImpl() | 181 DownloadControllerAndroidImpl::DownloadControllerAndroidImpl() |
| 170 : java_object_(NULL) { | 182 : java_object_(NULL) { |
| 171 } | 183 } |
| 172 | 184 |
| 173 DownloadControllerAndroidImpl::~DownloadControllerAndroidImpl() { | 185 DownloadControllerAndroidImpl::~DownloadControllerAndroidImpl() { |
| 174 if (java_object_) { | 186 if (java_object_) { |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 487 // Multiple OnDownloadUpdated() notifications may be issued while the | 499 // Multiple OnDownloadUpdated() notifications may be issued while the |
| 488 // download is in the COMPLETE state. Only handle one. | 500 // download is in the COMPLETE state. Only handle one. |
| 489 item->RemoveObserver(this); | 501 item->RemoveObserver(this); |
| 490 | 502 |
| 491 // Call onDownloadCompleted | 503 // Call onDownloadCompleted |
| 492 Java_DownloadController_onDownloadCompleted( | 504 Java_DownloadController_onDownloadCompleted( |
| 493 env, GetJavaObject()->Controller(env).obj(), jurl.obj(), | 505 env, GetJavaObject()->Controller(env).obj(), jurl.obj(), |
| 494 jmime_type.obj(), jfilename.obj(), jpath.obj(), | 506 jmime_type.obj(), jfilename.obj(), jpath.obj(), |
| 495 item->GetReceivedBytes(), item->GetId(), jguid.obj(), | 507 item->GetReceivedBytes(), item->GetId(), jguid.obj(), |
| 496 joriginal_url.obj(), jreferrer_url.obj(), item->HasUserGesture()); | 508 joriginal_url.obj(), jreferrer_url.obj(), item->HasUserGesture()); |
| 509 DownloadControllerAndroid::RecordDownloadCancelReason( |
| 510 DownloadControllerAndroid::CANCEL_REASON_NOT_CANCELED); |
| 497 break; | 511 break; |
| 498 case DownloadItem::CANCELLED: | 512 case DownloadItem::CANCELLED: |
| 499 Java_DownloadController_onDownloadCancelled( | 513 Java_DownloadController_onDownloadCancelled( |
| 500 env, GetJavaObject()->Controller(env).obj(), item->GetId(), | 514 env, GetJavaObject()->Controller(env).obj(), item->GetId(), |
| 501 jguid.obj()); | 515 jguid.obj()); |
| 502 break; | 516 break; |
| 503 case DownloadItem::INTERRUPTED: | 517 case DownloadItem::INTERRUPTED: |
| 504 // When device loses/changes network, we get a NETWORK_TIMEOUT, | 518 // When device loses/changes network, we get a NETWORK_TIMEOUT, |
| 505 // NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto | 519 // NETWORK_FAILED or NETWORK_DISCONNECTED error. Download should auto |
| 506 // resume in this case. | 520 // resume in this case. |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 608 if (info) | 622 if (info) |
| 609 has_user_gesture = info->HasUserGesture(); | 623 has_user_gesture = info->HasUserGesture(); |
| 610 } | 624 } |
| 611 | 625 |
| 612 DownloadControllerAndroidImpl::DownloadInfoAndroid::DownloadInfoAndroid( | 626 DownloadControllerAndroidImpl::DownloadInfoAndroid::DownloadInfoAndroid( |
| 613 const DownloadInfoAndroid& other) = default; | 627 const DownloadInfoAndroid& other) = default; |
| 614 | 628 |
| 615 DownloadControllerAndroidImpl::DownloadInfoAndroid::~DownloadInfoAndroid() {} | 629 DownloadControllerAndroidImpl::DownloadInfoAndroid::~DownloadInfoAndroid() {} |
| 616 | 630 |
| 617 } // namespace content | 631 } // namespace content |
| OLD | NEW |