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

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: ChromeDownloadDelegate.nativeInit 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"
19 #include "chrome/browser/android/download/android_download_manager_overwrite_inf obar_delegate.h" 18 #include "chrome/browser/android/download/android_download_manager_overwrite_inf obar_delegate.h"
19 #include "chrome/browser/android/download/download_controller_base.h"
20 #include "chrome/browser/android/tab_android.h" 20 #include "chrome/browser/android/tab_android.h"
21 #include "chrome/browser/infobars/infobar_service.h" 21 #include "chrome/browser/infobars/infobar_service.h"
22 #include "chrome/browser/permissions/permission_update_infobar_delegate_android. h" 22 #include "chrome/browser/permissions/permission_update_infobar_delegate_android. h"
23 #include "chrome/common/safe_browsing/file_type_policies.h" 23 #include "chrome/common/safe_browsing/file_type_policies.h"
24 #include "chrome/grit/chromium_strings.h" 24 #include "chrome/grit/chromium_strings.h"
25 #include "chrome/grit/generated_resources.h" 25 #include "chrome/grit/generated_resources.h"
26 #include "content/public/browser/android/download_controller_android.h"
27 #include "jni/ChromeDownloadDelegate_jni.h" 26 #include "jni/ChromeDownloadDelegate_jni.h"
28 #include "ui/base/l10n/l10n_util.h" 27 #include "ui/base/l10n/l10n_util.h"
29 28
30 using content::DownloadControllerAndroid; 29 using base::android::ConvertUTF8ToJavaString;
30 using base::android::ScopedJavaLocalRef;
31 using content::WebContents;
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 WebContents* web_contents) {}
134
135 ChromeDownloadDelegate::~ChromeDownloadDelegate() {
136 JNIEnv* env = base::android::AttachCurrentThread();
137 env->DeleteGlobalRef(java_ref_);
138 }
139
140 void ChromeDownloadDelegate::Init(JNIEnv* env, jobject jobj) {
Ted C 2016/06/17 20:29:37 let's name this something different to avoid the n
Jinsuk Kim 2016/06/20 02:00:52 Done.
141 java_ref_ = env->NewGlobalRef(jobj);
142 }
143
144 void ChromeDownloadDelegate::RequestHTTPGetDownload(
145 const std::string& url,
146 const std::string& user_agent,
147 const std::string& content_disposition,
148 const std::string& mime_type,
149 const std::string& cookie,
150 const std::string& referer,
151 const base::string16& file_name,
152 int64_t content_length,
153 bool has_user_gesture,
154 bool must_download) {
155 JNIEnv* env = base::android::AttachCurrentThread();
156 ScopedJavaLocalRef<jstring> jurl =
157 ConvertUTF8ToJavaString(env, url);
158 ScopedJavaLocalRef<jstring> juser_agent =
159 ConvertUTF8ToJavaString(env, user_agent);
160 ScopedJavaLocalRef<jstring> jcontent_disposition =
161 ConvertUTF8ToJavaString(env, content_disposition);
162 ScopedJavaLocalRef<jstring> jmime_type =
163 ConvertUTF8ToJavaString(env, mime_type);
164 ScopedJavaLocalRef<jstring> jcookie =
165 ConvertUTF8ToJavaString(env, cookie);
166 ScopedJavaLocalRef<jstring> jreferer =
167 ConvertUTF8ToJavaString(env, referer);
168
169 // net::GetSuggestedFilename will fallback to "download" as filename.
170 ScopedJavaLocalRef<jstring> jfilename =
171 base::android::ConvertUTF16ToJavaString(env, file_name);
172 Java_ChromeDownloadDelegate_requestHttpGetDownload(
173 env, java_ref_,
174 jurl.obj(), juser_agent.obj(), jcontent_disposition.obj(),
175 jmime_type.obj(), jcookie.obj(), jreferer.obj(), has_user_gesture,
176 jfilename.obj(), content_length, must_download);
177 }
178
179 void ChromeDownloadDelegate::OnDownloadStarted(const std::string& filename,
180 const std::string& mime_type) {
181 JNIEnv* env = base::android::AttachCurrentThread();
182 ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
183 env, filename);
184 ScopedJavaLocalRef<jstring> jmime_type =
185 ConvertUTF8ToJavaString(env, mime_type);
186 Java_ChromeDownloadDelegate_onDownloadStarted(
187 env, java_ref_, jfilename.obj(), jmime_type.obj());
188 }
189
190 void ChromeDownloadDelegate::OnDangerousDownload(const std::string& filename,
191 const std::string& guid) {
192 JNIEnv* env = base::android::AttachCurrentThread();
193 ScopedJavaLocalRef<jstring> jfilename = ConvertUTF8ToJavaString(
194 env, filename);
195 ScopedJavaLocalRef<jstring> jguid = ConvertUTF8ToJavaString(env, guid);
196 Java_ChromeDownloadDelegate_onDangerousDownload(
197 env, java_ref_, jfilename.obj(), jguid.obj());
198 }
199
200 void ChromeDownloadDelegate::RequestFileAccess(intptr_t callback_id) {
201 JNIEnv* env = base::android::AttachCurrentThread();
202 Java_ChromeDownloadDelegate_requestFileAccess(
203 env, java_ref_, callback_id);
204 }
205
206 void Init(JNIEnv* env,
Ted C 2016/06/17 20:29:37 this is a static right? the chrome convention wou
Jinsuk Kim 2016/06/20 02:00:53 It's meant to be non-static. nativeInit() comes do
207 const JavaParamRef<jobject>& obj,
208 const JavaParamRef<jobject>& jweb_contents) {
209 auto web_contents = WebContents::FromJavaWebContents(jweb_contents);
210 ChromeDownloadDelegate::CreateForWebContents(web_contents);
211 ChromeDownloadDelegate::FromWebContents(web_contents)->Init(env, obj);
212 }
213
131 bool RegisterChromeDownloadDelegate(JNIEnv* env) { 214 bool RegisterChromeDownloadDelegate(JNIEnv* env) {
132 return RegisterNativesImpl(env); 215 return RegisterNativesImpl(env);
133 } 216 }
217
218 DEFINE_WEB_CONTENTS_USER_DATA_KEY(ChromeDownloadDelegate);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698