Add support for "browser:" protocol

- Prevent browser:incognito from regular tab

The browser will now allow "browser:" protocol
based urls and treat "chrome:" protocol based urls
as a search query

Change-Id: I23098f160f4bd4e5f3c4ec431364388cf4e38790
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bab0f6c..4b2021f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1186,7 +1186,6 @@
     <string name="feedback">Feedback</string>
     <string name="swe_legal">Legal information</string>
     <string name="swe_open_source_licenses">Open source licenses</string>
-    <string name="swe_open_source_license_url" translatable="False">chrome://credits</string>
     <string name="swe_pref_legal_info_summary">Copyright (c) 2015, The Linux Foundation. All rights reserved.</string>
     <string name="swe_eula">End user licenses agreement</string>
     <string name="swe_eula_url" translatable="False"></string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index c546f48..54382d8 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -133,7 +133,7 @@
     private static final String LOGTAG = "Controller";
     private static final String SEND_APP_ID_EXTRA =
         "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
-    private static final String INCOGNITO_URI = "chrome://incognito";
+    public static final String INCOGNITO_URI = "browser://incognito";
     public static final String EXTRA_REQUEST_CODE = "_fake_request_code_";
     public static final String EXTRA_RESULT_CODE = "_fake_result_code_";
 
diff --git a/src/com/android/browser/NavigationBarBase.java b/src/com/android/browser/NavigationBarBase.java
index 7de1a5d..8d34f13 100644
--- a/src/com/android/browser/NavigationBarBase.java
+++ b/src/com/android/browser/NavigationBarBase.java
@@ -97,7 +97,7 @@
     private Tab.SecurityState mSecurityState = Tab.SecurityState.SECURITY_STATE_NOT_SECURE;
 
     private static final String noSitePrefs[] = {
-            "chrome://",
+            "browser://",
             "about:",
             "content:",
     };
@@ -523,7 +523,7 @@
             Tab t = mBaseUi.getActiveTab();
             // Only shortcut javascript URIs for now, as there is special
             // logic in UrlHandler for other schemas
-            if (url != null && t != null && url.startsWith("javascript:")) {
+            if (url != null && t != null &&  url.startsWith("javascript:")) {
                 mUiController.loadUrl(t, url);
                 setDisplayTitle(text);
                 return;
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 36aae4c..a600fd3 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -234,7 +234,7 @@
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
             if (mIncognito) {
-                mOriginalUrl = mUrl = "chrome://incognito";
+                mOriginalUrl = mUrl = Controller.INCOGNITO_URI;
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
                 mOriginalUrl = mUrl = "";
@@ -607,7 +607,12 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 String url) {
             //intercept if opening a new incognito tab - show the incognito welcome page
-            if (url.startsWith("chrome://incognito")) {
+
+            // show only incognito content and webview has private
+            // and cannot go back(only supported if explicit from UI )
+            if (view.isPrivateBrowsingEnabled() &&
+                !view.canGoBack() &&
+                url.startsWith(Controller.INCOGNITO_URI) ) {
                 Resources resourceHandle = mContext.getResources();
                 InputStream inStream = resourceHandle.openRawResource(
                         com.android.browser.R.raw.incognito_mode_start_page);
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index 4d3dee4..e5fd17e 100755
--- a/src/com/android/browser/UrlUtils.java
+++ b/src/com/android/browser/UrlUtils.java
@@ -47,7 +47,7 @@
     static final Pattern ACCEPTED_URI_SCHEMA = Pattern.compile(
             "(?i)" + // switch on case insensitive matching
             "(" +    // begin group for schema
-            "(?:http|https|file|chrome):\\/\\/" +
+            "(?:http|https|file|browser):\\/\\/" +
             "|(?:inline|data|about|javascript):" +
             ")" +
             "(.*)" );
@@ -206,8 +206,7 @@
         if (inUrl == null) {
             return "";
         }
-        if (inUrl.startsWith("content:")
-                || inUrl.startsWith("browser:")) {
+        if (inUrl.startsWith("content:")) {
             return "";
         }
         return inUrl;
diff --git a/src/com/android/browser/preferences/LegalPreferencesFragment.java b/src/com/android/browser/preferences/LegalPreferencesFragment.java
index ce75630..23b4163 100644
--- a/src/com/android/browser/preferences/LegalPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LegalPreferencesFragment.java
@@ -48,6 +48,7 @@
 public class LegalPreferencesFragment extends PreferenceFragment
                             implements OnPreferenceClickListener {
 
+    private static final String creditsUrl = "browser://credits";
     PreferenceScreen mHeadPref = null;
     String mEulaUrl = "";
     String mPrivacyPolicyUrl = "";
@@ -101,8 +102,7 @@
         Bundle b = new Bundle();
         if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_CREDITS)) {
             Intent i = new Intent(getActivity(), LegalPreviewActivity.class);
-            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, getResources()
-                    .getString(R.string.swe_open_source_license_url));
+            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, creditsUrl);
             startActivity(i);
             return true;
         } else if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_EULA)) {