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

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

Issue 580043002: [Android] Prompt with infobar on filename conflict (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: avoided Java-only infobar Created 5 years, 10 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/download_overwrite_infobar_delegate_ja va_initiated.h>
Peter Kasting 2015/02/25 06:24:57 Both the location of this include and its use of a
Changwan Ryu 2015/03/02 14:46:36 Must be the result of eclipse auto refactoring. Do
5 #include "chrome/browser/android/download/chrome_download_delegate.h" 6 #include "chrome/browser/android/download/chrome_download_delegate.h"
6 7
7 #include <jni.h> 8 #include <jni.h>
8 9
9 #include "base/android/jni_android.h" 10 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 11 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h" 12 #include "base/android/scoped_java_ref.h"
13 #include "base/bind.h"
14 #include "base/callback.h"
12 #include "base/files/file_path.h" 15 #include "base/files/file_path.h"
16 #include "base/memory/weak_ptr.h"
17 #include "chrome/browser/android/download/download_overwrite_info.h"
13 #include "chrome/browser/android/tab_android.h" 18 #include "chrome/browser/android/tab_android.h"
14 #include "chrome/browser/download/download_extensions.h" 19 #include "chrome/browser/download/download_extensions.h"
20 #include "chrome/browser/infobars/infobar_service.h"
15 #include "chrome/grit/generated_resources.h" 21 #include "chrome/grit/generated_resources.h"
16 #include "content/public/browser/android/download_controller_android.h" 22 #include "content/public/browser/android/download_controller_android.h"
17 #include "jni/ChromeDownloadDelegate_jni.h" 23 #include "jni/ChromeDownloadDelegate_jni.h"
18 #include "ui/base/l10n/l10n_util.h" 24 #include "ui/base/l10n/l10n_util.h"
19 25
20 bool RegisterChromeDownloadDeleagte(JNIEnv* env) {
21 return RegisterNativesImpl(env);
22 }
23
24 // Gets the download warning text for the given file name. 26 // Gets the download warning text for the given file name.
25 static jstring GetDownloadWarningText( 27 static jstring GetDownloadWarningText(
26 JNIEnv* env, jclass clazz, jstring filename) { 28 JNIEnv* env, jclass clazz, jstring filename) {
27 return base::android::ConvertUTF8ToJavaString( 29 return base::android::ConvertUTF8ToJavaString(
28 env, l10n_util::GetStringFUTF8( 30 env, l10n_util::GetStringFUTF8(
29 IDS_PROMPT_DANGEROUS_DOWNLOAD, 31 IDS_PROMPT_DANGEROUS_DOWNLOAD,
30 base::android::ConvertJavaStringToUTF16(env, filename))).Release(); 32 base::android::ConvertJavaStringToUTF16(env, filename))).Release();
31 } 33 }
32 34
33 // Returns true if a file name is dangerous, or false otherwise. 35 // Returns true if a file name is dangerous, or false otherwise.
34 static jboolean IsDownloadDangerous( 36 static jboolean IsDownloadDangerous(
35 JNIEnv* env, jclass clazz, jstring filename) { 37 JNIEnv* env, jclass clazz, jstring filename) {
36 base::FilePath path(base::android::ConvertJavaStringToUTF8(env, filename)); 38 base::FilePath path(base::android::ConvertJavaStringToUTF8(env, filename));
37 return download_util::GetFileDangerLevel(path) != 39 return download_util::GetFileDangerLevel(path) !=
38 download_util::NOT_DANGEROUS; 40 download_util::NOT_DANGEROUS;
39 } 41 }
40 42
41 // Called when a dangerous download is validated. 43 // Called when a dangerous download is validated.
42 static void DangerousDownloadValidated( 44 static void DangerousDownloadValidated(
43 JNIEnv* env, jclass clazz, jobject tab, jint download_id, jboolean accept) { 45 JNIEnv* env, jclass clazz, jobject tab, jint download_id, jboolean accept) {
44 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 46 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
45 content::DownloadControllerAndroid::Get()->DangerousDownloadValidated( 47 content::DownloadControllerAndroid::Get()->DangerousDownloadValidated(
46 tab_android->web_contents(), download_id, accept); 48 tab_android->web_contents(), download_id, accept);
47 } 49 }
50
51 // A class for keeping track of Java ChromeDownloadDelegate object and handling
52 // PromptUserDone callback.
53 class PromptUserDoneCB {
54 public:
55 PromptUserDoneCB(JNIEnv* env, jobject obj) : weak_java_obj_(env, obj) {}
56
57 ~PromptUserDoneCB() {}
58
59 void PromptUserDone(
60 const chrome::android::DownloadOverwriteInfo& download_overwrite_info) {
61 JNIEnv* env = base::android::AttachCurrentThread();
62 ScopedJavaLocalRef<jobject> jobj = weak_java_obj_.get(env);
63 if (!jobj.obj())
64 return;
65
66 if (download_overwrite_info.dismissed)
67 return;
68
69 ScopedJavaLocalRef<jstring> jfile_name =
70 base::android::ConvertUTF8ToJavaString(
71 env, download_overwrite_info.file_name);
72 ScopedJavaLocalRef<jstring> jurl = base::android::ConvertUTF8ToJavaString(
73 env, download_overwrite_info.url);
74 ScopedJavaLocalRef<jstring> juser_agent =
75 base::android::ConvertUTF8ToJavaString(
76 env, download_overwrite_info.user_agent);
77 ScopedJavaLocalRef<jstring> jcontent_disposition =
78 base::android::ConvertUTF8ToJavaString(
79 env, download_overwrite_info.content_disposition);
80 ScopedJavaLocalRef<jstring> jmime_type =
81 base::android::ConvertUTF8ToJavaString(
82 env, download_overwrite_info.mime_type);
83 ScopedJavaLocalRef<jstring> jcookie =
84 base::android::ConvertUTF8ToJavaString(env,
85 download_overwrite_info.cookie);
86 ScopedJavaLocalRef<jstring> jreferer =
87 base::android::ConvertUTF8ToJavaString(env,
88 download_overwrite_info.referer);
89 Java_ChromeDownloadDelegate_enqueueDownloadManagerRequestFromNative(
Ted C 2015/02/26 00:57:55 and any reason the delegate of the new class can't
Changwan Ryu 2015/03/02 14:46:36 Hmm... I thought I needed it to keep reference to
90 env, jobj.obj(), download_overwrite_info.overwrite, jfile_name.obj(),
91 jurl.obj(), juser_agent.obj(), jcontent_disposition.obj(),
92 jmime_type.obj(), jcookie.obj(), jreferer.obj(),
93 download_overwrite_info.has_user_gesture,
94 download_overwrite_info.content_length,
95 download_overwrite_info.is_GET_request);
96 }
97
98 private:
99 JavaObjectWeakGlobalRef weak_java_obj_;
100 DISALLOW_COPY_AND_ASSIGN(PromptUserDoneCB);
101 };
102
103 // Called when we need to interrupt download and ask users whether to overwrite
104 // an existing file.
105 static void LaunchDownloadOverwriteInfoBar(JNIEnv* env,
106 jclass clazz,
107 jobject obj,
108 jobject tab,
109 jstring file_name,
110 jstring dir_name,
111 jstring dir_full_path,
112 jstring url,
113 jstring user_agent,
114 jstring content_disposition,
115 jstring mime_type,
116 jstring cookie,
117 jstring referer,
118 jboolean has_user_gesture,
119 jlong content_length,
120 jboolean is_GET_request) {
121 chrome::android::DownloadOverwriteInfo download_overwrite_info(
Ted C 2015/02/26 00:57:55 Any reason we don't just pass down the DownloadInf
Changwan Ryu 2015/03/02 14:46:36 Done. We can pass downloadinfo by wrapping it insi
122 base::android::ConvertJavaStringToUTF8(env, file_name),
123 base::android::ConvertJavaStringToUTF8(env, dir_name),
124 base::android::ConvertJavaStringToUTF8(env, dir_full_path),
125 base::android::ConvertJavaStringToUTF8(env, url),
126 base::android::ConvertJavaStringToUTF8(env, content_disposition),
127 base::android::ConvertJavaStringToUTF8(env, user_agent),
128 base::android::ConvertJavaStringToUTF8(env, cookie),
129 base::android::ConvertJavaStringToUTF8(env, referer), has_user_gesture,
130 base::android::ConvertJavaStringToUTF8(env, mime_type), content_length,
131 is_GET_request);
132 PromptUserDoneCB* ref = new PromptUserDoneCB(env, obj);
133
134 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
135 chrome::android::DownloadOverwriteInfoBarDelegateJavaInitiated::Create(
136 InfoBarService::FromWebContents(tab_android->web_contents()),
137 download_overwrite_info,
138 base::Bind(&PromptUserDoneCB::PromptUserDone, base::Owned(ref)));
139 }
140
141 bool RegisterChromeDownloadDelegate(JNIEnv* env) {
142 return RegisterNativesImpl(env);
143 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698