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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/download/ChromeDownloadDelegate.java

Issue 1391893003: NOT FOR REVIEW: Aura on Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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 package org.chromium.chrome.browser.download; 5 package org.chromium.chrome.browser.download;
6 6
7 import android.content.Context; 7 import android.content.Context;
8 import android.content.Intent; 8 import android.content.Intent;
9 import android.net.Uri; 9 import android.net.Uri;
10 import android.os.AsyncTask; 10 import android.os.AsyncTask;
11 import android.os.Environment; 11 import android.os.Environment;
12 import android.text.TextUtils; 12 import android.text.TextUtils;
13 import android.util.Log; 13 import android.util.Log;
14 import android.webkit.MimeTypeMap; 14 import android.webkit.MimeTypeMap;
15 import android.webkit.URLUtil; 15 import android.webkit.URLUtil;
16 import android.widget.Toast; 16 import android.widget.Toast;
17 17
18 import org.chromium.base.VisibleForTesting; 18 import org.chromium.base.VisibleForTesting;
19 import org.chromium.base.annotations.CalledByNative; 19 import org.chromium.base.annotations.CalledByNative;
20 import org.chromium.chrome.R; 20 import org.chromium.chrome.R;
21 import org.chromium.chrome.browser.infobar.ConfirmInfoBar; 21 //import org.chromium.chrome.browser.infobar.ConfirmInfoBar;
22 import org.chromium.chrome.browser.infobar.InfoBar; 22 //import org.chromium.chrome.browser.infobar.InfoBar;
23 import org.chromium.chrome.browser.infobar.InfoBarListeners; 23 //import org.chromium.chrome.browser.infobar.InfoBarListeners;
24 import org.chromium.chrome.browser.tab.Tab; 24 //import org.chromium.chrome.browser.tab.Tab;
25 import org.chromium.chrome.browser.tabmodel.TabModelSelector; 25 //import org.chromium.chrome.browser.tabmodel.TabModelSelector;
26 import org.chromium.content.browser.ContentViewDownloadDelegate; 26 import org.chromium.content.browser.ContentViewDownloadDelegate;
27 import org.chromium.content.browser.DownloadInfo; 27 import org.chromium.content.browser.DownloadInfo;
28 import org.chromium.content_public.browser.WebContents; 28 import org.chromium.content_public.browser.WebContents;
29 29
30 import java.io.File; 30 import java.io.File;
31 31
32 /** 32 /**
33 * Chrome implementation of the ContentViewDownloadDelegate interface. 33 * Chrome implementation of the ContentViewDownloadDelegate interface.
34 * 34 *
35 * Listens to POST and GET download events. GET download requests are passed alo ng to the 35 * Listens to POST and GET download events. GET download requests are passed alo ng to the
36 * Android Download Manager. POST downloads are expected to be handled natively and listener 36 * Android Download Manager. POST downloads are expected to be handled natively and listener
37 * is responsible for adding the completed download to the download manager. 37 * is responsible for adding the completed download to the download manager.
38 * 38 *
39 * Prompts the user when a dangerous file is downloaded. Auto-opens PDFs after d ownloading. 39 * Prompts the user when a dangerous file is downloaded. Auto-opens PDFs after d ownloading.
40 */ 40 */
41 public class ChromeDownloadDelegate 41 public class ChromeDownloadDelegate
42 implements ContentViewDownloadDelegate, InfoBarListeners.Confirm { 42 implements ContentViewDownloadDelegate {
43 // The application context. 43 // The application context.
44 private final Context mContext; 44 private final Context mContext;
45 private final Tab mTab; 45 private final Tab mTab;
46 private final TabModelSelector mTabModelSelector; 46 private final TabModelSelector mTabModelSelector;
47 private static final String LOGTAG = "ChromeDownloadDelegate"; 47 private static final String LOGTAG = "ChromeDownloadDelegate";
48 48
49 // Pending download request for a dangerous file. 49 // Pending download request for a dangerous file.
50 private DownloadInfo mPendingRequest; 50 private DownloadInfo mPendingRequest;
51 51
52 @Override 52 // @Override
53 public void onConfirmInfoBarButtonClicked(ConfirmInfoBar infoBar, boolean co nfirm) { 53 // public void onConfirmInfoBarButtonClicked(ConfirmInfoBar infoBar, boolean confirm) {
54 if (mPendingRequest.hasDownloadId()) { 54 // if (mPendingRequest.hasDownloadId()) {
55 nativeDangerousDownloadValidated(mTab, mPendingRequest.getDownloadId (), confirm); 55 // nativeDangerousDownloadValidated(mTab, mPendingRequest.getDownload Id(), confirm);
56 if (confirm) { 56 // if (confirm) {
57 showDownloadStartNotification(); 57 // showDownloadStartNotification();
58 } 58 // }
59 closeBlankTab(); 59 // closeBlankTab();
60 } else if (confirm) { 60 // } else if (confirm) {
61 // User confirmed the download. 61 // // User confirmed the download.
62 if (mPendingRequest.isGETRequest()) { 62 // if (mPendingRequest.isGETRequest()) {
63 enqueueDownloadManagerRequest(mPendingRequest); 63 // enqueueDownloadManagerRequest(mPendingRequest);
64 } else { 64 // } else {
65 DownloadInfo newDownloadInfo = DownloadInfo.Builder.fromDownload Info( 65 // DownloadInfo newDownloadInfo = DownloadInfo.Builder.fromDownlo adInfo(
66 mPendingRequest).setIsSuccessful(true).build(); 66 // mPendingRequest).setIsSuccessful(true).build();
67 DownloadManagerService.getDownloadManagerService(mContext).onDow nloadCompleted( 67 // DownloadManagerService.getDownloadManagerService(mContext).onD ownloadCompleted(
68 newDownloadInfo); 68 // newDownloadInfo);
69 } 69 // }
70 } else { 70 // } else {
71 // User did not accept the download, discard the file if it is a POS T download. 71 // // User did not accept the download, discard the file if it is a P OST download.
72 if (!mPendingRequest.isGETRequest()) { 72 // if (!mPendingRequest.isGETRequest()) {
73 discardFile(mPendingRequest.getFilePath()); 73 // discardFile(mPendingRequest.getFilePath());
74 } 74 // }
75 } 75 // }
76 mPendingRequest = null; 76 // mPendingRequest = null;
77 infoBar.dismissJavaOnlyInfoBar(); 77 // infoBar.dismissJavaOnlyInfoBar();
78 } 78 // }
79 79
80 @Override 80 // @Override
81 public void onInfoBarDismissed(InfoBar infoBar) { 81 // public void onInfoBarDismissed(InfoBar infoBar) {
82 if (mPendingRequest != null) { 82 // if (mPendingRequest != null) {
83 if (mPendingRequest.hasDownloadId()) { 83 // if (mPendingRequest.hasDownloadId()) {
84 nativeDangerousDownloadValidated(mTab, mPendingRequest.getDownlo adId(), false); 84 // nativeDangerousDownloadValidated(mTab, mPendingRequest.getDown loadId(), false);
85 } else if (!mPendingRequest.isGETRequest()) { 85 // } else if (!mPendingRequest.isGETRequest()) {
86 // Infobar was dismissed, discard the file if a POST download is pending. 86 // // Infobar was dismissed, discard the file if a POST download is pending.
87 discardFile(mPendingRequest.getFilePath()); 87 // discardFile(mPendingRequest.getFilePath());
88 } 88 // }
89 } 89 // }
90 // Forget the pending request. 90 // // Forget the pending request.
91 mPendingRequest = null; 91 // mPendingRequest = null;
92 } 92 // }
93 93
94 /** 94 /**
95 * Creates ChromeDownloadDelegate. 95 * Creates ChromeDownloadDelegate.
96 * @param context The application context. 96 * @param context The application context.
97 * @param tabModelSelector The TabModelSelector responsible for {@code mTab} . 97 * @param tabModelSelector The TabModelSelector responsible for {@code mTab} .
98 * @param tab The corresponding tab instance. 98 * @param tab The corresponding tab instance.
99 */ 99 */
100 public ChromeDownloadDelegate( 100 // public ChromeDownloadDelegate(
101 Context context, TabModelSelector tabModelSelector, Tab tab) { 101 // Context context, TabModelSelector tabModelSelector, Tab tab) {
102 mContext = context; 102 // mContext = context;
103 mTab = tab; 103 // mTab = tab;
104 mTabModelSelector = tabModelSelector; 104 // mTabModelSelector = tabModelSelector;
105 mPendingRequest = null; 105 // mPendingRequest = null;
106 } 106 // }
107 107
108 /** 108 /**
109 * Return the download path of a file. 109 * Return the download path of a file.
110 * @param fileName Name of the file. 110 * @param fileName Name of the file.
111 * @return path of the saved file. 111 * @return path of the saved file.
112 */ 112 */
113 protected String downloadPath(String fileName) { 113 protected String downloadPath(String fileName) {
114 return mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + " /" + fileName; 114 return mContext.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + " /" + fileName;
115 } 115 }
116 116
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
261 @Override 261 @Override
262 public void onDangerousDownload(String filename, int downloadId) { 262 public void onDangerousDownload(String filename, int downloadId) {
263 DownloadInfo downloadInfo = new DownloadInfo.Builder() 263 DownloadInfo downloadInfo = new DownloadInfo.Builder()
264 .setFileName(filename) 264 .setFileName(filename)
265 .setDescription(filename) 265 .setDescription(filename)
266 .setHasDownloadId(true) 266 .setHasDownloadId(true)
267 .setDownloadId(downloadId).build(); 267 .setDownloadId(downloadId).build();
268 confirmDangerousDownload(downloadInfo); 268 confirmDangerousDownload(downloadInfo);
269 } 269 }
270 270
271 /** 271 // /**
272 * Launch an info bar if the file name already exists for the download. 272 // * Launch an info bar if the file name already exists for the download.
273 * @param info The information of the file we are about to download. 273 // * @param info The information of the file we are about to download.
274 * @return Whether an info bar has been launched or not. 274 // * @return Whether an info bar has been launched or not.
275 */ 275 // */
276 private boolean launchInfoBarIfFileExists(final DownloadInfo info) { 276 // private boolean launchInfoBarIfFileExists(final DownloadInfo info) {
277 // Checks if file exists. 277 // // Checks if file exists.
278 final String fileName = info.getFileName(); 278 // final String fileName = info.getFileName();
279 File dir = Environment.getExternalStoragePublicDirectory(Environment.DIR ECTORY_DOWNLOADS); 279 // File dir = Environment.getExternalStoragePublicDirectory(Environment.D IRECTORY_DOWNLOADS);
280 if (!dir.mkdir() && !dir.isDirectory()) return false; 280 // if (!dir.mkdir() && !dir.isDirectory()) return false;
281 String dirName = dir.getName(); 281 // String dirName = dir.getName();
282 final File file = new File(dir, info.getFileName()); 282 // final File file = new File(dir, info.getFileName());
283 String fullDirPath = file.getParent(); 283 // String fullDirPath = file.getParent();
284 if (!file.exists()) return false; 284 // if (!file.exists()) return false;
285 if (TextUtils.isEmpty(fileName) || TextUtils.isEmpty(dirName) 285 // if (TextUtils.isEmpty(fileName) || TextUtils.isEmpty(dirName)
286 || TextUtils.isEmpty(fullDirPath)) { 286 // || TextUtils.isEmpty(fullDirPath)) {
287 return false; 287 // return false;
288 } 288 // }
289 289 //
290 nativeLaunchDownloadOverwriteInfoBar( 290 // nativeLaunchDownloadOverwriteInfoBar(
291 this, mTab, info, info.getFileName(), dirName, fullDirPath); 291 // this, mTab, info, info.getFileName(), dirName, fullDirPath);
292 return true; 292 // return true;
293 } 293 // }
294 294
295 /** 295 /**
296 * Sends the download request to Android download manager. 296 * Sends the download request to Android download manager.
297 * 297 *
298 * @param info Download information about the download. 298 * @param info Download information about the download.
299 */ 299 */
300 protected void enqueueDownloadManagerRequest(final DownloadInfo info) { 300 protected void enqueueDownloadManagerRequest(final DownloadInfo info) {
301 if (!launchInfoBarIfFileExists(info)) { 301 if (!launchInfoBarIfFileExists(info)) {
302 enqueueDownloadManagerRequestInternal(info); 302 enqueueDownloadManagerRequestInternal(info);
303 } 303 }
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 512 }
513 513
514 private static native String nativeGetDownloadWarningText(String filename); 514 private static native String nativeGetDownloadWarningText(String filename);
515 private static native boolean nativeIsDownloadDangerous(String filename); 515 private static native boolean nativeIsDownloadDangerous(String filename);
516 private static native void nativeDangerousDownloadValidated( 516 private static native void nativeDangerousDownloadValidated(
517 Object tab, int downloadId, boolean accept); 517 Object tab, int downloadId, boolean accept);
518 private static native void nativeLaunchDownloadOverwriteInfoBar(ChromeDownlo adDelegate delegate, 518 private static native void nativeLaunchDownloadOverwriteInfoBar(ChromeDownlo adDelegate delegate,
519 Tab tab, DownloadInfo downloadInfo, String fileName, String dirName, 519 Tab tab, DownloadInfo downloadInfo, String fileName, String dirName,
520 String dirFullPath); 520 String dirFullPath);
521 } 521 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698