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

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

Issue 2058593002: Add UMA for studying download cancellation reasons (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressing comments 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 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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