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

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: used Java DownloadInfo and fixed nits Created 5 years, 9 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 "base/android/jni_android.h" 9 #include "base/android/jni_android.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/android/scoped_java_ref.h" 11 #include "base/android/scoped_java_ref.h"
12 #include "base/bind.h"
13 #include "base/callback.h"
12 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
15 #include "base/memory/weak_ptr.h"
16 #include "chrome/browser/android/download/download_overwrite_infobar_delegate_fo r_android_download_manager.h"
13 #include "chrome/browser/android/tab_android.h" 17 #include "chrome/browser/android/tab_android.h"
14 #include "chrome/browser/download/download_extensions.h" 18 #include "chrome/browser/download/download_extensions.h"
19 #include "chrome/browser/infobars/infobar_service.h"
15 #include "chrome/grit/generated_resources.h" 20 #include "chrome/grit/generated_resources.h"
16 #include "content/public/browser/android/download_controller_android.h" 21 #include "content/public/browser/android/download_controller_android.h"
17 #include "jni/ChromeDownloadDelegate_jni.h" 22 #include "jni/ChromeDownloadDelegate_jni.h"
18 #include "ui/base/l10n/l10n_util.h" 23 #include "ui/base/l10n/l10n_util.h"
19 24
20 bool RegisterChromeDownloadDeleagte(JNIEnv* env) { 25 using base::android::ScopedJavaGlobalRef;
21 return RegisterNativesImpl(env);
22 }
23 26
24 // Gets the download warning text for the given file name. 27 // Gets the download warning text for the given file name.
25 static jstring GetDownloadWarningText( 28 static jstring GetDownloadWarningText(
26 JNIEnv* env, jclass clazz, jstring filename) { 29 JNIEnv* env, jclass clazz, jstring filename) {
27 return base::android::ConvertUTF8ToJavaString( 30 return base::android::ConvertUTF8ToJavaString(
28 env, l10n_util::GetStringFUTF8( 31 env, l10n_util::GetStringFUTF8(
29 IDS_PROMPT_DANGEROUS_DOWNLOAD, 32 IDS_PROMPT_DANGEROUS_DOWNLOAD,
30 base::android::ConvertJavaStringToUTF16(env, filename))).Release(); 33 base::android::ConvertJavaStringToUTF16(env, filename))).Release();
31 } 34 }
32 35
33 // Returns true if a file name is dangerous, or false otherwise. 36 // Returns true if a file name is dangerous, or false otherwise.
34 static jboolean IsDownloadDangerous( 37 static jboolean IsDownloadDangerous(
35 JNIEnv* env, jclass clazz, jstring filename) { 38 JNIEnv* env, jclass clazz, jstring filename) {
36 base::FilePath path(base::android::ConvertJavaStringToUTF8(env, filename)); 39 base::FilePath path(base::android::ConvertJavaStringToUTF8(env, filename));
37 return download_util::GetFileDangerLevel(path) != 40 return download_util::GetFileDangerLevel(path) !=
38 download_util::NOT_DANGEROUS; 41 download_util::NOT_DANGEROUS;
39 } 42 }
40 43
41 // Called when a dangerous download is validated. 44 // Called when a dangerous download is validated.
42 static void DangerousDownloadValidated( 45 static void DangerousDownloadValidated(
43 JNIEnv* env, jclass clazz, jobject tab, jint download_id, jboolean accept) { 46 JNIEnv* env, jclass clazz, jobject tab, jint download_id, jboolean accept) {
44 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab); 47 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
45 content::DownloadControllerAndroid::Get()->DangerousDownloadValidated( 48 content::DownloadControllerAndroid::Get()->DangerousDownloadValidated(
46 tab_android->web_contents(), download_id, accept); 49 tab_android->web_contents(), download_id, accept);
47 } 50 }
51
52 // static
53 void ChromeDownloadDelegate::EnqueueDownloadManagerRequest(
54 JNIEnv* env,
Ted C 2015/03/03 01:14:44 Unless you specifically need the calling env, we t
Changwan Ryu 2015/03/04 05:15:03 Done.
55 JavaObjectWeakGlobalRef chrome_download_delegate,
56 bool overwrite,
57 const ScopedJavaGlobalRef<jobject>& download_info) {
58 ScopedJavaLocalRef<jobject> delegate = chrome_download_delegate.get(env);
59 if (!delegate.obj())
60 return;
61
62 Java_ChromeDownloadDelegate_enqueueDownloadManagerRequestFromNative(
63 env, delegate.obj(), overwrite, download_info.obj());
64 }
65
66 // Called when we need to interrupt download and ask users whether to overwrite
67 // an existing file.
68 static void LaunchDownloadOverwriteInfoBar(JNIEnv* env,
69 jclass clazz,
70 jobject delegate,
71 jobject tab,
72 jobject download_info,
73 jstring jfile_name,
74 jstring jdir_name,
75 jstring jdir_full_path) {
76 TabAndroid* tab_android = TabAndroid::GetNativeTab(env, tab);
77
78 std::string file_name =
79 base::android::ConvertJavaStringToUTF8(env, jfile_name);
80 std::string dir_name = base::android::ConvertJavaStringToUTF8(env, jdir_name);
81 std::string dir_full_path =
82 base::android::ConvertJavaStringToUTF8(env, jdir_full_path);
83 ScopedJavaGlobalRef<jobject> scoped_download_info;
84 scoped_download_info.Reset(env, download_info);
85
86 chrome::android::DownloadOverwriteInfoBarDelegateForAndroidDownloadManager::
87 Create(InfoBarService::FromWebContents(tab_android->web_contents()),
88 file_name, dir_name, dir_full_path,
89 JavaObjectWeakGlobalRef(env, delegate), scoped_download_info);
Ted C 2015/03/03 01:14:44 why weak global ref? Do you really want the deleg
Changwan Ryu 2015/03/04 05:15:03 Changed to ScopedJavaGlobalRef
90 }
91
92 bool RegisterChromeDownloadDelegate(JNIEnv* env) {
93 return RegisterNativesImpl(env);
94 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698