M42 snap browser

Change-Id: If52741ad5e34241aa9f928244942a33a91610e58
diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index da9ad63..4c17b8b 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -428,14 +428,9 @@
         // container to the content view.
         FrameLayout wrapper =
                 (FrameLayout) container.findViewById(R.id.webview_wrapper);
-        ViewGroup parent = (ViewGroup) mainView.getParent();
-        if (parent != wrapper) {
-            if (parent != null) {
-                parent.removeView(mainView);
-            }
-            wrapper.addView(mainView);
-        }
-        parent = (ViewGroup) container.getParent();
+        if (wrapper != mainView.getView().getParent())
+            wrapper.addView(mainView.getView());
+        ViewGroup parent = (ViewGroup) container.getParent();
         if (parent != mContentView) {
             if (parent != null) {
                 parent.removeView(container);
@@ -458,7 +453,7 @@
         // needed by WebView.
         FrameLayout wrapper =
                 (FrameLayout) container.findViewById(R.id.webview_wrapper);
-        wrapper.removeView(mainView);
+        wrapper.removeView(mainView.getView());
         mContentView.removeView(container);
         mUiController.endActionMode();
         mUiController.removeSubWindow(tab);
diff --git a/src/com/android/browser/Browser.java b/src/com/android/browser/Browser.java
index 4c1d9f2..bd2ac06 100644
--- a/src/com/android/browser/Browser.java
+++ b/src/com/android/browser/Browser.java
@@ -25,9 +25,12 @@
 import android.util.Log;
 import android.os.Process;
 
+import org.chromium.chrome.browser.ChromiumApplication;
+import org.chromium.chrome.browser.PKCS11AuthenticationManager;
+
 import org.codeaurora.swe.Engine;
 
-public class Browser extends Application {
+public class Browser extends ChromiumApplication {
 
     private final static String LOGTAG = "browser";
 
@@ -112,5 +115,28 @@
         }
 
     }
+
+    @Override
+    protected PKCS11AuthenticationManager getPKCS11AuthenticationManager() {
+        return null;
+    }
+
+    @Override
+    protected void openProtectedContentSettings() {
+    }
+
+    @Override
+    protected boolean areParentalControlsEnabled() {
+        return false;
+    }
+
+    @Override
+    public String getSettingsActivityName() {
+        return null;
+    }
+
+    @Override
+    public void initCommandLine() {
+    }
 }
 
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 670849b..220566a 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -37,7 +37,7 @@
 import android.view.ViewTreeObserver;
 import android.view.Window;
 
-import com.google.common.annotations.VisibleForTesting;
+import org.chromium.base.VisibleForTesting;
 import com.android.browser.R;
 import com.android.browser.search.DefaultSearchEngine;
 import com.android.browser.search.SearchEngine;
diff --git a/src/com/android/browser/BrowserBookmarksPage.java b/src/com/android/browser/BrowserBookmarksPage.java
index 3fea1ed..ca6c0dc 100644
--- a/src/com/android/browser/BrowserBookmarksPage.java
+++ b/src/com/android/browser/BrowserBookmarksPage.java
@@ -62,7 +62,7 @@
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import org.codeaurora.net.NetworkServices;
+//import org.codeaurora.net.NetworkServices;
 
 interface BookmarksPageCallbacks {
     // Return true if handled
@@ -435,7 +435,7 @@
         lm.restartLoader(LOADER_ACCOUNTS, null, this);
 
         //Notify about anticipated network activity
-        NetworkServices.HintUpcomingUserActivity();
+        //NetworkServices.HintUpcomingUserActivity();
 
         return mRoot;
     }
diff --git a/src/com/android/browser/BrowserConfigBase.java b/src/com/android/browser/BrowserConfigBase.java
index a96e6ad..99b6456 100644
--- a/src/com/android/browser/BrowserConfigBase.java
+++ b/src/com/android/browser/BrowserConfigBase.java
@@ -43,6 +43,12 @@
 abstract class BrowserConfigBase {
 
     private static final String OVERRIDE_USER_AGENT = "user-agent";
+    private static final String OVERRIDE_MEDIA_DOWNLOAD = "media-download";
+    private static final String HTTP_HEADERS = "http-headers";
+    private static final String ENABLE_SWE = "enabled-swe";
+    private static final String ENABLE_TOP_CONTROLS = "enable-top-controls-position-calculation";
+    private static final String TOP_CONTROLS_HIDE_THRESHOLD = "top-controls-hide-threshold";
+    private static final String TOP_CONTROLS_SHOW_THRESHOLD = "top-controls-show-threshold";
     private Context mContext;
 
     public BrowserConfigBase(Context context) {
@@ -67,15 +73,31 @@
         }
     }
 
+    public void overrideMediaDownload() {
+        boolean defaultAllowMediaDownloadsValue = mContext.getResources().getBoolean(
+            R.bool.def_allow_media_downloads);
+        if (defaultAllowMediaDownloadsValue)
+            BrowserCommandLine.appendSwitchWithValue(OVERRIDE_MEDIA_DOWNLOAD, "1");
+    }
+
+    public void setExtraHTTPRequestHeaders() {
+        String headers = mContext.getResources().getString(
+            R.string.def_extra_http_headers);
+        if (!TextUtils.isEmpty(headers))
+            BrowserCommandLine.appendSwitchWithValue(HTTP_HEADERS, headers);
+    }
+
     public void initCommandLineSwitches() {
         //SWE-hide-title-bar - enable following flags
-        BrowserCommandLine.appendSwitch("enable-top-controls-position-calculation");
-        BrowserCommandLine.appendSwitchWithValue("top-controls-height", "52");
-        BrowserCommandLine.appendSwitchWithValue("top-controls-show-threshold", "0.5");
-        BrowserCommandLine.appendSwitchWithValue("top-controls-hide-threshold", "0.5");
+        BrowserCommandLine.appendSwitch(ENABLE_TOP_CONTROLS);
+        BrowserCommandLine.appendSwitchWithValue(TOP_CONTROLS_SHOW_THRESHOLD, "0.5");
+        BrowserCommandLine.appendSwitchWithValue(TOP_CONTROLS_HIDE_THRESHOLD, "0.5");
+        BrowserCommandLine.appendSwitch(ENABLE_SWE);
 
         // Allow to override UserAgent
         overrideUserAgent();
+        overrideMediaDownload();
+        setExtraHTTPRequestHeaders();
     }
 
     private String constructUserAgent(String userAgent) {
@@ -98,7 +120,6 @@
         EXIT_DIALOG, /* Add 'Exit' menu item and show 'Minimize or quit' dialog */
         TITLE_IN_URL_BAR, /* Display page title instead of url in URL bar */
         CUSTOM_DOWNLOAD_PATH, /* Allow users to provide custom download path */
-        ALLOW_MEDIA_DOWNLOADS, /* Add 'Allow media downloads' menu item */
         DISABLE_HISTORY /* Allow disabling saving history for non-incognito tabs */
     }
 
@@ -116,8 +137,6 @@
                 return mContext.getResources().getBoolean(R.bool.feature_title_in_URL_bar);
             case CUSTOM_DOWNLOAD_PATH:
                 return mContext.getResources().getBoolean(R.bool.feature_custom_download_path);
-            case ALLOW_MEDIA_DOWNLOADS:
-                return mContext.getResources().getBoolean(R.bool.feature_allow_media_downloads);
             case DISABLE_HISTORY:
                 return mContext.getResources().getBoolean(R.bool.feature_disable_history);
             default:
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 9ba3c31..5bb085c 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -258,8 +258,6 @@
         settings.setUseWideViewPort(isWideViewport());
         settings.setDoNotTrack(doNotTrack());
         settings.setMediaPlaybackRequiresUserGesture(false);
-        settings.setAllowMediaDownloads(allowMediaDownloads());
-        setExtraHTTPRequestHeaders(settings);
 
         WebSettings settingsClassic = (WebSettings) settings;
         settingsClassic.setHardwareAccelSkiaEnabled(isSkiaHardwareAccelerated());
@@ -284,12 +282,6 @@
         settingsClassic.setLinkPrefetchEnabled(mLinkPrefetchAllowed);
     }
 
-    private void setExtraHTTPRequestHeaders(WebSettings settings){
-        String headers = mContext.getResources().getString(R.string.def_extra_http_headers);
-        if (!TextUtils.isEmpty(headers)){
-            settings.setHTTPRequestHeaders(headers);
-        }
-    }
 
     /**
      * Syncs all the settings that have no UI
@@ -343,6 +335,7 @@
     private void syncSharedSettings() {
         mNeedsSharedSync = false;
         CookieManager.getInstance().setAcceptCookie(acceptCookies());
+
     }
 
     private void syncManagedSettings() {
@@ -731,25 +724,6 @@
         return mPrefs.getBoolean(PREF_ENABLE_MEMORY_MONITOR, true);
     }
 
-    public boolean allowMediaDownloads() {
-        // Return false if preference is not exposed to user
-        if (!BrowserConfig.getInstance(mContext)
-                .hasFeature(BrowserConfig.Feature.ALLOW_MEDIA_DOWNLOADS))
-            return false;
-
-        // Otherwise, look at default value
-        boolean defaultAllowMediaDownloadsValue = mController.getContext()
-                .getResources().getBoolean(R.bool.def_allow_media_downloads);
-
-        // If preference is not saved, save default value
-        if (!mPrefs.contains(PREF_ALLOW_MEDIA_DOWNLOADS)){
-            Editor edit = mPrefs.edit();
-            edit.putBoolean(PREF_ALLOW_MEDIA_DOWNLOADS, defaultAllowMediaDownloadsValue);
-            edit.apply();
-        }
-
-        return mPrefs.getBoolean(PREF_ALLOW_MEDIA_DOWNLOADS, defaultAllowMediaDownloadsValue);
-    }
 
     public boolean loadPageInOverviewMode() {
         return mPrefs.getBoolean(PREF_LOAD_PAGE, true);
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index 9215fe5..5255994 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -111,6 +111,8 @@
 
     public void setTitleBar(TitleBar title) {
         mTitleBar = title;
+        if (!mTitleBar.isFixed())
+            setTopControlsHeight(52);
     }
 
     // From TitleBarDelegate
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index dd3d76c..747b779 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -132,7 +132,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 = "browser:incognito";
+    private static final String INCOGNITO_URI = "chrome://incognito";
 
     // Remind switch to data connection if wifi is unavailable
     private static final int NETWORK_SWITCH_TYPE_OK = 1;
@@ -1406,6 +1406,7 @@
                 break;
         }
         getCurrentTopWebView().requestFocus();
+        getCurrentTopWebView().onActivityResult(requestCode, resultCode, intent);
     }
 
     /**
diff --git a/src/com/android/browser/EngineInitializer.java b/src/com/android/browser/EngineInitializer.java
index 6556abb..ef88458 100644
--- a/src/com/android/browser/EngineInitializer.java
+++ b/src/com/android/browser/EngineInitializer.java
@@ -45,7 +45,7 @@
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ExecutionException;
 
-import com.google.common.annotations.VisibleForTesting;
+import org.chromium.base.VisibleForTesting;
 
 public class EngineInitializer {
     private final static String LOGTAG = "EngineInitializer";
@@ -247,6 +247,66 @@
 
     }
 
+    private void completeInitializationAsynOnUiThread(final Context ctx) {
+        assert runningOnUiThread() : "Tried to initialize the engine on the wrong thread.";
+
+        if (!mInitializationCompleted) {
+            // TODO: Evaluate the benefit of async Engine.initialize()
+            Engine.StartupCallback callback =
+                new Engine.StartupCallback() {
+                    @Override
+                    public void onSuccess(boolean alreadyStarted) {
+                        if (Looper.myLooper() == Looper.getMainLooper()) {
+                            Log.e(LOGTAG, "SWE engine initialization success");
+                             // Add the browser commandline options
+                            BrowserConfig.getInstance(ctx).initCommandLineSwitches();
+
+                            //Note: Only enable this for debugging.
+                            if (BrowserCommandLine.hasSwitch(STRICT_MODE)) {
+                                Log.v(LOGTAG, "StrictMode enabled");
+                                StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
+                                        .detectDiskReads()
+                                        .detectDiskWrites()
+                                        .detectNetwork()
+                                        .penaltyLog()
+                                        .build());
+                                StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
+                                        .detectLeakedSqlLiteObjects()
+                                        .detectLeakedClosableObjects()
+                                        .penaltyLog()
+                                        .penaltyDeath()
+                                        .build());
+                            }
+
+                            //Enable remote debugging by default
+                            Engine.setWebContentsDebuggingEnabled(true);
+                            mInitializationCompleted = true;
+                            mLibraryLoaded = true;
+                            BrowserSettings.getInstance().onEngineInitializationComplete();
+
+                            if (mActivity != null && mNotifyActivity) {
+                                mNotifyActivity = false;
+                                postOnUiThread(new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        mActivity.onEngineInitializationComplete();
+                                        mActivityReady = true;
+                                        processPendingEvents();
+                                    }
+                                });
+                            }
+                        }
+                    }
+
+                    @Override
+                    public void onFailure() {
+                        Log.e(LOGTAG, "SWE engine initialization failed");
+                    }
+            };
+            Engine.initialize(ctx, callback);
+        }
+    }
+
     private void processPendingEvents() {
         assert runningOnUiThread() : "Tried to initialize the engine on the wrong thread.";
 
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index eb9fe53..f6b37f5 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -40,7 +40,6 @@
     static final String PREF_DEFAULT_TEXT_ENCODING = "default_text_encoding";
     static final String PREF_ENABLE_JAVASCRIPT = "enable_javascript";
     static final String PREF_ENABLE_MEMORY_MONITOR = "enable_memory_monitor";
-    static final String PREF_ALLOW_MEDIA_DOWNLOADS = "allow_media_downloads";
     static final String PREF_LOAD_PAGE = "load_page";
     static final String PREF_OPEN_IN_BACKGROUND = "open_in_background";
     static final String PREF_RESET_DEFAULT_PREFERENCES = "reset_default_preferences";
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index c7b8ea7..0a23205 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -219,7 +219,7 @@
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
             if (mIncognito) {
-                mOriginalUrl = mUrl = "browser:incognito";
+                mOriginalUrl = mUrl = "chrome://incognito";
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
                 mOriginalUrl = mUrl = "";
@@ -670,7 +670,7 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 String url) {
             //intercept if opening a new incognito tab - show the incognito welcome page
-            if (url.startsWith("browser:incognito")) {
+            if (url.startsWith("chrome://incognito")) {
                 Resources resourceHandle = mContext.getResources();
                 InputStream inStream = resourceHandle.openRawResource(
                         com.android.browser.R.raw.incognito_mode_start_page);
@@ -702,6 +702,24 @@
                 super.onUnhandledKeyEvent(view, event);
             }
         }
+        //SWE-download-file
+        @Override
+        public void onDownloadStart(String url,
+                                 String userAgent,
+                                 String contentDisposition,
+                                 String mimeType,
+                                 long contentLength) {
+          if (mDownloadListener != null) {
+             if (mDownloadListener instanceof BrowserDownloadListener) {
+                 ((BrowserDownloadListener) mDownloadListener).onDownloadStart(url,
+                     userAgent, contentDisposition, mimeType, contentLength);
+             } else {
+                 mDownloadListener.onDownloadStart(url, userAgent,
+                     contentDisposition, mimeType, contentLength);
+             }
+          }
+        }
+        //SWE-download-file
     };
 
     private void syncCurrentState(WebView view, String url) {
@@ -1578,7 +1596,7 @@
             if (mMainView.hasCrashed()) {
                 // Reload if render process has crashed. This is done here so that
                 // setFocus call sends wasShown message to correct render process.
-                mMainView.reload();
+                mMainView.setNeedsReload(true);
             }
             setupHwAcceleration(mMainView);
             mMainView.onResume();
diff --git a/src/com/android/browser/UrlUtils.java b/src/com/android/browser/UrlUtils.java
index c327fdc..4d3dee4 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):\\/\\/" +
+            "(?:http|https|file|chrome):\\/\\/" +
             "|(?:inline|data|about|javascript):" +
             ")" +
             "(.*)" );
diff --git a/src/com/android/browser/appmenu/AppMenuHandler.java b/src/com/android/browser/appmenu/AppMenuHandler.java
index 94a429a..dd1c1af 100644
--- a/src/com/android/browser/appmenu/AppMenuHandler.java
+++ b/src/com/android/browser/appmenu/AppMenuHandler.java
@@ -15,7 +15,7 @@
 import android.view.View;
 import android.widget.PopupMenu;
 
-import com.google.common.annotations.VisibleForTesting;
+import org.chromium.base.VisibleForTesting;
 
 import java.util.ArrayList;
 
diff --git a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
index 5edf8e6..4c715ce 100644
--- a/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
+++ b/src/com/android/browser/preferences/AdvancedPreferencesFragment.java
@@ -83,10 +83,6 @@
         // Below are preferences for carrier specific features
         PreferenceScreen contentSettingsPrefScreen =
                 (PreferenceScreen) mFragment.findPreference("content_settings");
-        if (!BrowserConfig.getInstance(mFragment.getActivity().getApplicationContext())
-                .hasFeature(BrowserConfig.Feature.ALLOW_MEDIA_DOWNLOADS))
-            contentSettingsPrefScreen.removePreference(contentSettingsPrefScreen
-                    .findPreference(PreferenceKeys.PREF_ALLOW_MEDIA_DOWNLOADS));
 
         if (!BrowserConfig.getInstance(mFragment.getActivity().getApplicationContext())
                 .hasFeature(BrowserConfig.Feature.CUSTOM_DOWNLOAD_PATH)) {
diff --git a/src/com/android/browser/preferences/WebsiteSettingsFragment.java b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
index 9fe18c5..fb96645 100644
--- a/src/com/android/browser/preferences/WebsiteSettingsFragment.java
+++ b/src/com/android/browser/preferences/WebsiteSettingsFragment.java
@@ -278,6 +278,13 @@
                     askForGeolocation(sites);
                 }
             });
+
+
+            //SWETODO: REMOVE code below be after WebStorage getOrigins Method is Functional
+            Map<String, Site> sites = new HashMap<String, Site>();
+            askForGeolocation(sites);
+
+
         }
 
         public void askForGeolocation(final Map<String, Site> sites) {
@@ -737,7 +744,7 @@
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
-        View view = inflater.inflate(R.layout.website_settings, container, false);
+        View view = inflater.inflate(R.layout.swe_website_settings, container, false);
         Bundle args = getArguments();
         if (args != null) {
             mSite = (Site) args.getParcelable(EXTRA_SITE);
diff --git a/src/com/android/browser/provider/BrowserProvider2.java b/src/com/android/browser/provider/BrowserProvider2.java
index 0a30853..58aa1a7 100644
--- a/src/com/android/browser/provider/BrowserProvider2.java
+++ b/src/com/android/browser/provider/BrowserProvider2.java
@@ -58,7 +58,7 @@
 import com.android.browser.platformsupport.BrowserContract.SyncState;
 import com.android.browser.platformsupport.SyncStateContentProviderHelper;
 import com.android.browser.widget.BookmarkThumbnailWidgetProvider;
-import com.google.common.annotations.VisibleForTesting;
+import org.chromium.base.VisibleForTesting;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;