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

Side by Side Diff: content/browser/android/download_controller_android_impl.cc

Issue 2061063002: Add UMA for studying download cancellation reasons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
Patch Set: Created 4 years, 6 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 (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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698