allow file: scheme in the browser

When creating a bookmark, allow the book's URL to start with
javascript: . Use URI to isolate the scheme
to take care of case and special characters.

fixes http://b/issue?id=2059889
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index 2575857..a54a59a 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -31,6 +31,8 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.Date;
 
 public class AddBookmarkPage extends Activity {
@@ -123,20 +125,26 @@
             return false;
         }
         String url = unfilteredUrl;
-        if (!(url.startsWith("about:") || url.startsWith("data:") || url
-                .startsWith("file:") || url.startsWith("content:"))) {
-            WebAddress address;
-            try {
-                address = new WebAddress(unfilteredUrl);
-            } catch (ParseException e) {
-                mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
-                return false;
+        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))) {
+                WebAddress address;
+                try {
+                    address = new WebAddress(unfilteredUrl);
+                } catch (ParseException e) {
+                    throw new URISyntaxException("", "");
+                }
+                if (address.mHost.length() == 0) {
+                    throw new URISyntaxException("", "");
+                }
+                url = address.toString();
             }
-            if (address.mHost.length() == 0) {
-                mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
-                return false;
-            }
-            url = address.toString();
+        } catch (URISyntaxException e) {
+            mAddress.setError(r.getText(R.string.bookmark_url_not_valid));
+            return false;
         }
         try {
             if (mEditingExisting) {
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index b7ff0d3..91b08a3 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -1,3 +1,4 @@
+
 /*
  * Copyright (C) 2007 The Android Open Source Project
  *
@@ -207,8 +208,6 @@
             s.setNeedInitialFocus(false);
             // Browser supports multiple windows
             s.setSupportMultipleWindows(true);
-            // Turn off file access
-            s.setAllowFileAccess(false);
 
             // HTML5 API flags
             s.setAppCacheEnabled(b.appCacheEnabled);