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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java

Issue 2588253002: Enable download page action for error page (Closed)
Patch Set: Fix trybots Created 3 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/download/DownloadUtils.java
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 663a775e1b430e9285c0b257232a78b2bbdaaa4c..f9fd95bea9d7f1c3900db42fc1309f30efb420dc 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
@@ -38,6 +38,8 @@ import org.chromium.chrome.browser.download.ui.BackendProvider;
import org.chromium.chrome.browser.download.ui.BackendProvider.DownloadDelegate;
import org.chromium.chrome.browser.download.ui.DownloadFilter;
import org.chromium.chrome.browser.download.ui.DownloadHistoryItemWrapper;
+import org.chromium.chrome.browser.offlinepages.ClientId;
+import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadBridge;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
@@ -187,10 +189,21 @@ public class DownloadUtils {
* @param context Context to pull resources from.
*/
public static void downloadOfflinePage(Context context, Tab tab) {
- final OfflinePageDownloadBridge bridge = new OfflinePageDownloadBridge(tab.getProfile());
- bridge.startDownload(tab);
- bridge.destroy();
- DownloadUtils.recordDownloadPageMetrics(tab);
+ if (tab.isShowingErrorPage()) {
+ // The download needs to be scheduled to happen at later time due to current network
+ // error.
+ ClientId clientId = ClientId.createGuidClientIdForNamespace(
+ OfflinePageBridge.ASYNC_NAMESPACE);
+ final OfflinePageBridge bridge = OfflinePageBridge.getForProfile(tab.getProfile());
+ bridge.savePageLater(tab.getUrl(), clientId, true /* userRequested */);
+ } else {
+ // Otherwise, the download can be started immediately.
+ final OfflinePageDownloadBridge bridge =
+ new OfflinePageDownloadBridge(tab.getProfile());
+ bridge.startDownload(tab);
+ bridge.destroy();
+ DownloadUtils.recordDownloadPageMetrics(tab);
+ }
}
/**
@@ -201,13 +214,17 @@ public class DownloadUtils {
public static boolean isAllowedToDownloadPage(Tab tab) {
if (tab == null) return false;
- // Only allow HTTP and HTTPS pages, as that is these are the only scenarios supported by the
- // background/offline page saving.
- if (!tab.getUrl().startsWith(UrlConstants.HTTP_SCHEME)
- && !tab.getUrl().startsWith(UrlConstants.HTTPS_SCHEME)) {
+ // Check if the page url is supported for saving. Only HTTP and HTTPS pages are allowed.
+ if (!OfflinePageBridge.canSavePage(tab.getUrl())) {
return false;
}
- if (tab.isShowingErrorPage()) return false;
+
+ // Download will only be allowed for the error page if download button is shown in the page.
+ if (tab.isShowingErrorPage()) {
+ final OfflinePageBridge bridge = OfflinePageBridge.getForProfile(tab.getProfile());
+ return bridge.isShowingDownloadButtonInErrorPage(tab.getWebContents());
mmenke 2017/01/09 20:35:39 How accurate is this required to be? It can retur
jianli 2017/01/09 23:35:07 isShowingDownloadButtonInErrorPage will only be ch
+ }
+
if (tab.isShowingInterstitialPage()) return false;
// Don't allow re-downloading the currently displayed offline page.

Powered by Google App Engine
This is Rietveld 408576698