Added flag for new download backend
This CL adds :
1 - An flag for using DownloadOfflineContentProvider in chrome://flags
2 - Handles empty mime types correctly
Bug: 939958
Change-Id: I73b53ad614b014f1d47a388a513577f343577c93
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1512533
Reviewed-by: Min Qin <qinmin@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#640052}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java
index 0dbba8fa..d9f55c7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerBridge.java
@@ -273,8 +273,8 @@
private static void addCompletedDownload(String fileName, String description,
String originalMimeType, String filePath, long fileSizeBytes, String originalUrl,
String referrer, String downloadGuid, long callbackId) {
- final String mimeType = ChromeDownloadDelegate.remapGenericMimeType(
- originalMimeType, originalUrl, fileName);
+ final String mimeType =
+ DownloadUtils.remapGenericMimeType(originalMimeType, originalUrl, fileName);
AsyncTask<Pair<Long, Boolean>> task = new AsyncTask<Pair<Long, Boolean>>() {
@Override
protected Pair<Long, Boolean> doInBackground() {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
index d648b8a..744729c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
@@ -102,7 +102,6 @@
private static final String TAG = "DownloadService";
private static final String DOWNLOAD_DIRECTORY = "Download";
- private static final String UNKNOWN_MIME_TYPE = "application/unknown";
private static final String DOWNLOAD_UMA_ENTRY = "DownloadUmaEntry";
private static final String DOWNLOAD_RETRY_COUNT_FILE_NAME = "DownloadRetryCount";
private static final String DOWNLOAD_MANUAL_RETRY_SUFFIX = ".Manual";
@@ -322,10 +321,8 @@
if (downloadInfo.getBytesReceived() == 0) {
status = DownloadStatus.FAILED;
} else {
- String origMimeType = mimeType;
- if (TextUtils.isEmpty(origMimeType)) origMimeType = UNKNOWN_MIME_TYPE;
- mimeType = ChromeDownloadDelegate.remapGenericMimeType(
- origMimeType, downloadInfo.getOriginalUrl(), downloadInfo.getFileName());
+ mimeType = DownloadUtils.remapGenericMimeType(
+ mimeType, downloadInfo.getOriginalUrl(), downloadInfo.getFileName());
}
DownloadInfo newInfo =
DownloadInfo.Builder.fromDownloadInfo(downloadInfo).setMimeType(mimeType).build();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
index 08df500..53672ab 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
@@ -115,6 +115,7 @@
private static final String DEFAULT_MIME_TYPE = "*/*";
private static final String MIME_TYPE_DELIMITER = "/";
private static final String MIME_TYPE_SHARING_URL = "text/plain";
+ private static final String UNKNOWN_MIME_TYPE = "application/unknown";
private static final String EXTRA_IS_OFF_THE_RECORD =
"org.chromium.chrome.browser.download.IS_OFF_THE_RECORD";
@@ -594,6 +595,22 @@
}
/**
+ * If the given MIME type is null, or one of the "generic" types (text/plain
+ * or application/octet-stream) map it to a type that Android can deal with.
+ * If the given type is not generic, return it unchanged.
+ * See {@code ChromeDownloadDelegate#remapGenericMimeType}.
+ *
+ * @param mimeType MIME type provided by the server.
+ * @param url URL of the data being loaded.
+ * @param filename file name obtained from content disposition header
+ * @return The MIME type that should be used for this data.
+ */
+ public static String remapGenericMimeType(String mimeType, String url, String filename) {
+ if (TextUtils.isEmpty(mimeType)) mimeType = UNKNOWN_MIME_TYPE;
+ return ChromeDownloadDelegate.remapGenericMimeType(mimeType, url, filename);
+ }
+
+ /**
* Utility method to open an {@link OfflineItem}, which can be a chrome download, offline page.
* Falls back to open download home.
* @param contentId The {@link ContentId} of the associated offline item.
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 92221ba..c62821d 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -3109,6 +3109,12 @@
FEATURE_VALUE_TYPE(chrome::android::kDownloadHomeV2)},
#endif
+ {"enable-new-download-backend",
+ flag_descriptions::kEnableNewDownloadBackendName,
+ flag_descriptions::kEnableNewDownloadBackendDescription, kOsAll,
+ FEATURE_VALUE_TYPE(
+ download::features::kUseDownloadOfflineContentProvider)},
+
#if defined(OS_ANDROID)
{"new-net-error-page-ui", flag_descriptions::kNewNetErrorPageUIName,
flag_descriptions::kNewNetErrorPageUIDescription, kOsAndroid,
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index e22e0fc..c7123d98 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -1367,6 +1367,11 @@
"expiry_milestone": 74
},
{
+ "name": "enable-new-download-backend",
+ "owners": [ "shaktisahu", "dtrainor" ],
+ "expiry_milestone": 76
+ },
+ {
"name": "enable-new-photo-picker",
"owners": [ "finnur", "peter" ],
"expiry_milestone": 72
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 68cd4fe..968215129 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -711,6 +711,10 @@
const char kEnableNetworkServiceInProcessDescription[] =
"Runs the network service in the browser process.";
+const char kEnableNewDownloadBackendName[] = "Enable new download backend";
+const char kEnableNewDownloadBackendDescription[] =
+ "Enables the new download backend that uses offline content provider";
+
const char kEnableNotificationScrollBarName[] =
"Enable notification list scroll bar";
const char kEnableNotificationScrollBarDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 1a036d3..612aa6c 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -484,6 +484,9 @@
extern const char kOOPHPStackModeNativeWithThreadNames[];
extern const char kOOPHPStackModePseudo[];
+extern const char kEnableNewDownloadBackendName[];
+extern const char kEnableNewDownloadBackendDescription[];
+
extern const char kEnablePictureInPictureName[];
extern const char kEnablePictureInPictureDescription[];
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 99cf78e9..055f4cd8 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -32478,6 +32478,7 @@
<int value="-401170566"
label="OmniboxUIExperimentHideSuggestionUrlPath:disabled"/>
<int value="-400584764" label="ChromeHomeNtpRedesign:enabled"/>
+ <int value="-400572959" label="UseDownloadOfflineContentProvider:enabled"/>
<int value="-398623652" label="CCTTargetTranslateLanguage:enabled"/>
<int value="-396994784" label="enable-vr-shell"/>
<int value="-396496344" label="ViewsTaskManager:enabled"/>
@@ -33460,6 +33461,7 @@
<int value="1250071868" label="disable-timezone-tracking-option"/>
<int value="1253698118" label="ash-disable-stable-overview-order"/>
<int value="1257482622" label="PageAlmostIdle:enabled"/>
+ <int value="1257533754" label="UseDownloadOfflineContentProvider:disabled"/>
<int value="1257980502" label="disable-accelerated-video-decode"/>
<int value="1258043820" label="AudioFocusEnforcement:enabled"/>
<int value="1258747457"