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

Side by Side Diff: chrome/browser/android/download/chrome_download_delegate.cc

Issue 2014803002: Move DownloadControllerAndroid from content/ to chrome/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/chrome_download_delegate.h" 5 #include "chrome/browser/android/download/chrome_download_delegate.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 8
9 #include <string> 9 #include <string>
10 #include <type_traits> 10 #include <type_traits>
11 11
12 #include "base/android/jni_android.h" 12 #include "base/android/jni_android.h"
13 #include "base/android/jni_string.h" 13 #include "base/android/jni_string.h"
14 #include "base/android/scoped_java_ref.h" 14 #include "base/android/scoped_java_ref.h"
15 #include "base/bind.h" 15 #include "base/bind.h"
16 #include "base/callback.h" 16 #include "base/callback.h"
17 #include "base/files/file_path.h" 17 #include "base/files/file_path.h"
18 #include "base/memory/weak_ptr.h" 18 #include "base/memory/weak_ptr.h"
19 #include "chrome/browser/android/download/android_download_manager_overwrite_inf obar_delegate.h" 19 #include "chrome/browser/android/download/android_download_manager_overwrite_inf obar_delegate.h"
20 #include "chrome/browser/android/download/download_controller_base.h"
20 #include "chrome/browser/android/tab_android.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/common/safe_browsing/file_type_policies.h" 24 #include "chrome/common/safe_browsing/file_type_policies.h"
24 #include "chrome/grit/chromium_strings.h" 25 #include "chrome/grit/chromium_strings.h"
25 #include "chrome/grit/generated_resources.h" 26 #include "chrome/grit/generated_resources.h"
26 #include "content/public/browser/android/download_controller_android.h"
27 #include "jni/ChromeDownloadDelegate_jni.h" 27 #include "jni/ChromeDownloadDelegate_jni.h"
28 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
29 29
30 using content::DownloadControllerAndroid; 30 using base::android::ConvertUTF8ToJavaString;
31 using base::android::ScopedJavaLocalRef;
31 32
32 // Gets the download warning text for the given file name. 33 // Gets the download warning text for the given file name.
33 static ScopedJavaLocalRef<jstring> GetDownloadWarningText( 34 static ScopedJavaLocalRef<jstring> GetDownloadWarningText(
34 JNIEnv* env, 35 JNIEnv* env,
35 const JavaParamRef<jclass>& clazz, 36 const JavaParamRef<jclass>& clazz,
36 const JavaParamRef<jstring>& filename) { 37 const JavaParamRef<jstring>& filename) {
37 return base::android::ConvertUTF8ToJavaString( 38 return base::android::ConvertUTF8ToJavaString(
38 env, l10n_util::GetStringFUTF8( 39 env, l10n_util::GetStringFUTF8(
39 IDS_PROMPT_DANGEROUS_DOWNLOAD, 40 IDS_PROMPT_DANGEROUS_DOWNLOAD,
40 base::android::ConvertJavaStringToUTF16(env, filename))); 41 base::android::ConvertJavaStringToUTF16(env, filename)));
(...skipping 11 matching lines...) Expand all
52 // Called when a dangerous download is validated. 53 // Called when a dangerous download is validated.
53 static void DangerousDownloadValidated( 54 static void DangerousDownloadValidated(
54 JNIEnv* env, 55 JNIEnv* env,
55 const JavaParamRef<jclass>& clazz, 56 const JavaParamRef<jclass>& clazz,
56 const JavaParamRef<jobject>& tab, 57 const JavaParamRef<jobject>& tab,
57 const JavaParamRef<jstring>& jdownload_guid, 58 const JavaParamRef<jstring>& jdownload_guid,
58 jboolean accept) { 59 jboolean accept) {
59 std::string download_guid = 60 std::string download_guid =
60 base::android::ConvertJavaStringToUTF8(env, jdownload_guid); 61 base::android::ConvertJavaStringToUTF8(env, jdownload_guid);
61 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 62 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
62 DownloadControllerAndroid::Get()->DangerousDownloadValidated( 63 DownloadControllerBase::Get()->DangerousDownloadValidated(
63 tab_android->web_contents(), download_guid, accept); 64 tab_android->web_contents(), download_guid, accept);
64 } 65 }
65 66
66 // static 67 // static
67 bool ChromeDownloadDelegate::EnqueueDownloadManagerRequest( 68 bool ChromeDownloadDelegate::EnqueueDownloadManagerRequest(
68 jobject chrome_download_delegate, 69 jobject chrome_download_delegate,
69 bool overwrite, 70 bool overwrite,
70 jobject download_info) { 71 jobject download_info) {
71 JNIEnv* env = base::android::AttachCurrentThread(); 72 JNIEnv* env = base::android::AttachCurrentThread();
72 73
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 const JavaParamRef<jstring>& jpermission, 106 const JavaParamRef<jstring>& jpermission,
106 jlong callback_id) { 107 jlong callback_id) {
107 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 108 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
108 109
109 std::string permission = 110 std::string permission =
110 base::android::ConvertJavaStringToUTF8(env, jpermission); 111 base::android::ConvertJavaStringToUTF8(env, jpermission);
111 112
112 // Convert java long long int to c++ pointer, take ownership. 113 // Convert java long long int to c++ pointer, take ownership.
113 static_assert( 114 static_assert(
114 std::is_same< 115 std::is_same<
115 DownloadControllerAndroid::AcquireFileAccessPermissionCallback, 116 DownloadControllerBase::AcquireFileAccessPermissionCallback,
116 base::Callback<void(bool)>>::value, 117 base::Callback<void(bool)>>::value,
117 "Callback types don't match!"); 118 "Callback types don't match!");
118 std::unique_ptr<base::Callback<void(bool)>> cb( 119 std::unique_ptr<base::Callback<void(bool)>> cb(
119 reinterpret_cast<base::Callback<void(bool)>*>(callback_id)); 120 reinterpret_cast<base::Callback<void(bool)>*>(callback_id));
120 121
121 std::vector<std::string> permissions; 122 std::vector<std::string> permissions;
122 permissions.push_back(permission); 123 permissions.push_back(permission);
123 124
124 PermissionUpdateInfoBarDelegate::Create( 125 PermissionUpdateInfoBarDelegate::Create(
125 tab_android->web_contents(), 126 tab_android->web_contents(),
126 permissions, 127 permissions,
127 IDS_MISSING_STORAGE_PERMISSION_DOWNLOAD_EDUCATION_TEXT, 128 IDS_MISSING_STORAGE_PERMISSION_DOWNLOAD_EDUCATION_TEXT,
128 *cb); 129 *cb);
129 } 130 }
130 131
132 ChromeDownloadDelegate::ChromeDownloadDelegate(
133 content::WebContents* web_contents) {}
Ted C 2016/06/15 17:44:11 why take web_contents if unused?
Jinsuk Kim 2016/06/15 21:05:30 This follows the pattern required for the classes
Ted C 2016/06/15 23:56:37 Acknowledged.
134
135 ChromeDownloadDelegate::~ChromeDownloadDelegate() {}
136
137 void ChromeDownloadDelegate::Init(JNIEnv* env, jobject jobj) {
138 weak_java_ref_ = JavaObjectWeakGlobalRef(env, jobj);
Ted C 2016/06/15 17:44:11 why a weak ref? And if we have to use it, we shou
no sievers 2016/06/15 18:17:28 I was thinking that it's a normal pattern for a De
no sievers 2016/06/15 18:34:06 Oh and this was my other thinking: This is really
Jinsuk Kim 2016/06/15 21:05:30 Referenced other cases (can't remember what it was
Ted C 2016/06/15 23:56:37 In general, the cases I've seen for weak refs in j
Jinsuk Kim 2016/06/16 05:34:12 Done. Did 1)
139 }
140
141 void ChromeDownloadDelegate::RequestHTTPGetDownload(
142 const std::string& url,
143 const std::string& user_agent,
144 const std::string& content_disposition,
145 const std::string& mime_type,
146 const std::string& cookie,
147 const std::string& referer,
148 const base::string16& file_name,
149 int64_t content_length,
150 bool has_user_gesture,
151 bool must_download) {
152 JNIEnv* env = base::android::AttachCurrentThread();
153 ScopedJavaLocalRef<jstring> jurl =
154 ConvertUTF8ToJavaString(env, url);
155 ScopedJavaLocalRef<jstring> juser_agent =
156 ConvertUTF8ToJavaString(env, user_agent);
157 ScopedJavaLocalRef<jstring> jcontent_disposition =
158 ConvertUTF8ToJavaString(env, content_disposition);
159 ScopedJavaLocalRef<jstring> jmime_type =
160 ConvertUTF8ToJavaString(env, mime_type);
161 ScopedJavaLocalRef<jstring> jcookie =
162 ConvertUTF8ToJavaString(env, cookie);
163 ScopedJavaLocalRef<jstring> jreferer =
164 ConvertUTF8ToJavaString(env, referer);
165
166 // net::GetSuggestedFilename will fallback to "download" as filename.
167 ScopedJavaLocalRef<jstring> jfilename =
168 base::android::ConvertUTF16ToJavaString(env, file_name);
169 Java_ChromeDownloadDelegate_requestHttpGetDownload(
170 env, weak_java_ref_.get(env).obj(),
171 jurl.obj(), juser_agent.obj(), jcontent_disposition.obj(),
172 jmime_type.obj(), jcookie.obj(), jreferer.obj(), has_user_gesture,
173 jfilename.obj(), content_length, must_download);
174 }
175
176 void ChromeDownloadDelegate::OnDownloadStarted(const std::string& filename,
177 const std::string& mime_type) {
178 JNIEnv* env = base::android::AttachCurrentThread();
179 ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
180 env, filename);
181 ScopedJavaLocalRef<jstring> jmime_type =
182 ConvertUTF8ToJavaString(env, mime_type);
183 Java_ChromeDownloadDelegate_onDownloadStarted(
184 env, weak_java_ref_.get(env).obj(), jfilename.obj(), jmime_type.obj());
185 }
186
187 void ChromeDownloadDelegate::OnDangerousDownload(const std::string& filename,
188 const std::string& guid) {
189
190 JNIEnv* env = base::android::AttachCurrentThread();
191 ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
192 env, filename);
193 ScopedJavaLocalRef<jstring> jguid = ConvertUTF8ToJavaString(env, guid);
194 Java_ChromeDownloadDelegate_onDangerousDownload(
195 env, weak_java_ref_.get(env).obj(), jfilename.obj(), jguid.obj());
196 }
197
198 void ChromeDownloadDelegate::RequestFileAccess(intptr_t callback_id) {
199 JNIEnv* env = base::android::AttachCurrentThread();
200 Java_ChromeDownloadDelegate_requestFileAccess(
201 env, weak_java_ref_.get(env).obj(), callback_id);
202 }
203
131 bool RegisterChromeDownloadDelegate(JNIEnv* env) { 204 bool RegisterChromeDownloadDelegate(JNIEnv* env) {
132 return RegisterNativesImpl(env); 205 return RegisterNativesImpl(env);
133 } 206 }
207
208 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeDownloadDelegate);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698