Fix schemes that can be downloaded
Change-Id: I4a2b75a6ce923e7176f4f0b17fbaae5b1c5ef543
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 1d535a4..406c73c 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1462,6 +1462,8 @@
menu.setGroupVisible(R.id.ANCHOR_MENU,
type == WebView.HitTestResult.SRC_ANCHOR_TYPE
|| type == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE);
+ menu.findItem(R.id.save_link_context_menu_id).setEnabled(
+ UrlUtils.isDownloadableScheme(extra));
}
// Setup custom handling depending on the type
switch (type) {
diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java
index fbd8be7..0e8398a 100644
--- a/src/com/android/browser/FetchUrlMimeType.java
+++ b/src/com/android/browser/FetchUrlMimeType.java
@@ -124,9 +124,11 @@
}
}
} catch (IllegalArgumentException ex) {
- request.abort();
+ if (request != null)
+ request.abort();
} catch (IOException ex) {
- request.abort();
+ if (request != null)
+ request.abort();
} finally {
client.close();
}
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index ff78647..d00e8c3 100755
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -22,11 +22,18 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import java.util.HashSet;
+import java.util.Arrays;
/**
* Utility methods for Url manipulation
*/
public class UrlUtils {
+ public static final String[] DOWNLOADABLE_SCHEMES_VALUES = new String[]
+ { "data", "filesystem", "http", "https" };
+
+ private static final HashSet<String> DOWNLOADABLE_SCHEMES =
+ new HashSet<String>(Arrays.asList(DOWNLOADABLE_SCHEMES_VALUES));
static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
"(?i)" + // switch on case insensitive matching
@@ -89,6 +96,18 @@
return smartUrlFilter(url, true);
}
+ public static boolean isDownloadableScheme(Uri uri) {
+ return DOWNLOADABLE_SCHEMES.contains(uri.getScheme());
+ }
+
+ public static boolean isDownloadableScheme(String uri) {
+ try {
+ return isDownloadableScheme(Uri.parse(uri));
+ } catch (Exception e) {
+ return false;
+ }
+ }
+
/**
* Attempts to determine whether user input is a URL or search
* terms. Anything with a space is passed to search if canBeSearch is true.