Don't allow the user to save bookmarks with a scheme that the Browser cannot directly handle.
Change-Id: I9cbdfeaaeef4ded3dac1623854ecb9c5c603eb91
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 81123ba..9ab8473 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -182,9 +182,14 @@
try {
URI uriObj = new URI(url);
String scheme = uriObj.getScheme();
- if (!("about".equals(scheme) || "data".equals(scheme)
- || "javascript".equals(scheme)
- || "file".equals(scheme) || "content".equals(scheme))) {
+ if (!Bookmarks.urlHasAcceptableScheme(url)) {
+ // If the scheme was non-null, let the user know that we
+ // can't save their bookmark. If it was null, we'll assume
+ // they meant http when we parse it in the WebAddress class.
+ if (scheme != null) {
+ mAddress.setError(r.getText(R.string.bookmark_cannot_save_url));
+ return false;
+ }
WebAddress address;
try {
address = new WebAddress(unfilteredUrl);
diff --git a/src/com/android/browser/Bookmarks.java b/src/com/android/browser/Bookmarks.java
index c8aaee7..8d98f89 100644
--- a/src/com/android/browser/Bookmarks.java
+++ b/src/com/android/browser/Bookmarks.java
@@ -41,6 +41,18 @@
private static String[] SELECTION_ARGS;
+ // We only want the user to be able to bookmark content that
+ // the browser can handle directly.
+ private static final String acceptableBookmarkSchemes[] = {
+ "http:",
+ "https:",
+ "about:",
+ "data:",
+ "javascript:",
+ "file:",
+ "content:"
+ };
+
/**
* Add a bookmark to the database.
* @param context Context of the calling Activity. This is used to make
@@ -214,4 +226,17 @@
bm.compress(Bitmap.CompressFormat.PNG, 100, os);
return os.toByteArray();
}
+
+ /* package */ static boolean urlHasAcceptableScheme(String url) {
+ if (url == null) {
+ return false;
+ }
+
+ for (int i = 0; i < acceptableBookmarkSchemes.length; i++) {
+ if (url.startsWith(acceptableBookmarkSchemes[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 7e74262..c6f4056 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -1664,6 +1664,8 @@
// decide whether to show the open link in new tab option
menu.findItem(R.id.open_newtab_context_menu_id).setVisible(
mTabControl.canCreateNewTab());
+ menu.findItem(R.id.bookmark_context_menu_id).setVisible(
+ Bookmarks.urlHasAcceptableScheme(extra));
PackageManager pm = getPackageManager();
Intent send = new Intent(Intent.ACTION_SEND);
send.setType("text/plain");