| 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 jboolean granted) { | 126 jboolean granted) { |
| 126 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 127 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 127 DCHECK(callback_id); | 128 DCHECK(callback_id); |
| 128 | 129 |
| 129 // Convert java long long int to c++ pointer, take ownership. | 130 // Convert java long long int to c++ pointer, take ownership. |
| 130 std::unique_ptr< | 131 std::unique_ptr< |
| 131 DownloadControllerAndroid::AcquireFileAccessPermissionCallback> | 132 DownloadControllerAndroid::AcquireFileAccessPermissionCallback> |
| 132 cb(reinterpret_cast< | 133 cb(reinterpret_cast< |
| 133 DownloadControllerAndroid::AcquireFileAccessPermissionCallback*>( | 134 DownloadControllerAndroid::AcquireFileAccessPermissionCallback*>( |
| 134 callback_id)); | 135 callback_id)); |
| 136 if (!granted) { |
| 137 DownloadControllerAndroid::RecordDownloadCancelReason( |
| 138 DownloadControllerAndroid::CANCEL_REASON_NO_STORAGE_PERMISSION); |
| 139 } |
| 135 cb->Run(granted); | 140 cb->Run(granted); |
| 136 } | 141 } |
| 137 | 142 |
| 138 struct DownloadControllerAndroidImpl::JavaObject { | 143 struct DownloadControllerAndroidImpl::JavaObject { |
| 139 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { | 144 ScopedJavaLocalRef<jobject> Controller(JNIEnv* env) { |
| 140 return GetRealObject(env, obj); | 145 return GetRealObject(env, obj); |
| 141 } | 146 } |
| 142 jweak obj; | 147 jweak obj; |
| 143 }; | 148 }; |
| 144 | 149 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 156 } | 161 } |
| 157 | 162 |
| 158 //static | 163 //static |
| 159 void DownloadControllerAndroid::SetDownloadControllerAndroid( | 164 void DownloadControllerAndroid::SetDownloadControllerAndroid( |
| 160 DownloadControllerAndroid* download_controller) { | 165 DownloadControllerAndroid* download_controller) { |
| 161 base::AutoLock lock(g_download_controller_lock_.Get()); | 166 base::AutoLock lock(g_download_controller_lock_.Get()); |
| 162 DownloadControllerAndroid::download_controller_ = download_controller; | 167 DownloadControllerAndroid::download_controller_ = download_controller; |
| 163 } | 168 } |
| 164 | 169 |
| 165 // static | 170 // static |
| 171 void DownloadControllerAndroid::RecordDownloadCancelReason( |
| 172 DownloadCancelReason reason) { |
| 173 UMA_HISTOGRAM_ENUMERATION( |
| 174 "MobileDownload.CancelReason", reason, CANCEL_REASON_MAX); |
| 175 } |
| 176 |
| 177 // static |
| 166 DownloadControllerAndroidImpl* DownloadControllerAndroidImpl::GetInstance() { | 178 DownloadControllerAndroidImpl* DownloadControllerAndroidImpl::GetInstance() { |
| 167 return base::Singleton<DownloadControllerAndroidImpl>::get(); | 179 return base::Singleton<DownloadControllerAndroidImpl>::get(); |
| 168 } | 180 } |
| 169 | 181 |
| 170 DownloadControllerAndroidImpl::DownloadControllerAndroidImpl() | 182 DownloadControllerAndroidImpl::DownloadControllerAndroidImpl() |
| 171 : java_object_(NULL) { | 183 : java_object_(NULL) { |
| 172 } | 184 } |
| 173 | 185 |
| 174 DownloadControllerAndroidImpl::~DownloadControllerAndroidImpl() { | 186 DownloadControllerAndroidImpl::~DownloadControllerAndroidImpl() { |
| 175 if (java_object_) { | 187 if (java_object_) { |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 // Multiple OnDownloadUpdated() notifications may be issued while the | 500 // Multiple OnDownloadUpdated() notifications may be issued while the |
| 489 // download is in the COMPLETE state. Only handle one. | 501 // download is in the COMPLETE state. Only handle one. |
| 490 item->RemoveObserver(this); | 502 item->RemoveObserver(this); |
| 491 | 503 |
| 492 // Call onDownloadCompleted | 504 // Call onDownloadCompleted |
| 493 Java_DownloadController_onDownloadCompleted( | 505 Java_DownloadController_onDownloadCompleted( |
| 494 env, GetJavaObject()->Controller(env).obj(), jurl.obj(), | 506 env, GetJavaObject()->Controller(env).obj(), jurl.obj(), |
| 495 jmime_type.obj(), jfilename.obj(), jpath.obj(), | 507 jmime_type.obj(), jfilename.obj(), jpath.obj(), |
| 496 item->GetReceivedBytes(), jguid.obj(), | 508 item->GetReceivedBytes(), jguid.obj(), |
| 497 joriginal_url.obj(), jreferrer_url.obj(), item->HasUserGesture()); | 509 joriginal_url.obj(), jreferrer_url.obj(), item->HasUserGesture()); |
| 510 DownloadControllerAndroid::RecordDownloadCancelReason( |
| 511 DownloadControllerAndroid::CANCEL_REASON_NOT_CANCELED); |
| 498 break; | 512 break; |
| 499 case DownloadItem::CANCELLED: | 513 case DownloadItem::CANCELLED: |
| 500 Java_DownloadController_onDownloadCancelled( | 514 Java_DownloadController_onDownloadCancelled( |
| 501 env, GetJavaObject()->Controller(env).obj(), jguid.obj()); | 515 env, GetJavaObject()->Controller(env).obj(), 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. |
| 507 Java_DownloadController_onDownloadInterrupted( | 521 Java_DownloadController_onDownloadInterrupted( |
| (...skipping 100 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 |