Start background tabs hidden

Background tabs should start using the policy OPEN_BACKGROUND_TAB
so that Blink does not try to render the non-visible view.

Change-Id: I213e733c1a97bc1aae4104691b4c57f6c8bf3f3e
Fixes-issue: SWE-2733
diff --git a/src/com/android/browser/BrowserWebView.java b/src/com/android/browser/BrowserWebView.java
index e2348a5..9215fe5 100644
--- a/src/com/android/browser/BrowserWebView.java
+++ b/src/com/android/browser/BrowserWebView.java
@@ -60,6 +60,16 @@
      * @param defStyle
      */
     public BrowserWebView(
+            Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing, boolean backgroundTab) {
+        super(context, attrs, defStyle, privateBrowsing, backgroundTab);
+    }
+
+    /**
+     * @param context
+     * @param attrs
+     * @param defStyle
+     */
+    public BrowserWebView(
             Context context, AttributeSet attrs, int defStyle, boolean privateBrowsing) {
         super(context, attrs, defStyle, privateBrowsing);
     }
diff --git a/src/com/android/browser/BrowserWebViewFactory.java b/src/com/android/browser/BrowserWebViewFactory.java
index 82dd208..26b6950 100644
--- a/src/com/android/browser/BrowserWebViewFactory.java
+++ b/src/com/android/browser/BrowserWebViewFactory.java
@@ -36,8 +36,8 @@
     }
 
     protected WebView instantiateWebView(AttributeSet attrs, int defStyle,
-            boolean privateBrowsing) {
-        return new BrowserWebView(mContext, attrs, defStyle, privateBrowsing);
+            boolean privateBrowsing, boolean backgroundTab) {
+        return new BrowserWebView(mContext, attrs, defStyle, privateBrowsing, backgroundTab);
     }
 
     @Override
@@ -47,7 +47,12 @@
 
     @Override
     public WebView createWebView(boolean privateBrowsing) {
-        WebView w = instantiateWebView(null, android.R.attr.webViewStyle, privateBrowsing);
+        return createWebView(privateBrowsing, false);
+    }
+
+    @Override
+    public WebView createWebView(boolean privateBrowsing, boolean backgroundTab) {
+        WebView w = instantiateWebView(null, android.R.attr.webViewStyle, privateBrowsing, backgroundTab);
         initWebViewSettings(w);
         return w;
     }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 733e122..f0aa557 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -2953,7 +2953,7 @@
             boolean useCurrent) {
         Tab tab = null;
         if (mTabControl.canCreateNewTab()) {
-            tab = mTabControl.createNewTab(incognito);
+            tab = mTabControl.createNewTab(incognito, !setActive);
             addTab(tab);
             if (setActive) {
                 setActiveTab(tab);
diff --git a/src/com/android/browser/TabControl.java b/src/com/android/browser/TabControl.java
index 0d16b59..bdf21da 100644
--- a/src/com/android/browser/TabControl.java
+++ b/src/com/android/browser/TabControl.java
@@ -202,17 +202,25 @@
      *         number of open tabs.
      */
     Tab createNewTab(boolean privateBrowsing) {
-        return createNewTab(null, privateBrowsing);
+        return createNewTab(null, privateBrowsing, false);
+    }
+
+    Tab createNewTab(boolean privateBrowsing, boolean backgroundTab) {
+        return createNewTab(null, privateBrowsing, backgroundTab);
     }
 
     Tab createNewTab(Bundle state, boolean privateBrowsing) {
+        return createNewTab(null, privateBrowsing, false);
+    }
+
+    Tab createNewTab(Bundle state, boolean privateBrowsing, boolean backgroundTab) {
         int size = mTabs.size();
         // Return false if we have maxed out on tabs
         if (!canCreateNewTab()) {
             return null;
         }
 
-        final WebView w = createNewWebView(privateBrowsing);
+        final WebView w = createNewWebView(privateBrowsing, backgroundTab);
 
         // Create a new tab and add it to the tab list
         Tab t = new Tab(mController, w, state);
@@ -661,7 +669,11 @@
      *        WebView.
      */
     private WebView createNewWebView(boolean privateBrowsing) {
-        return mController.getWebViewFactory().createWebView(privateBrowsing);
+        return createNewWebView(privateBrowsing, false);
+    }
+
+    private WebView createNewWebView(boolean privateBrowsing, boolean backgroundTab) {
+        return mController.getWebViewFactory().createWebView(privateBrowsing, backgroundTab);
     }
 
     /**
diff --git a/src/com/android/browser/WebViewFactory.java b/src/com/android/browser/WebViewFactory.java
index 3ebd573..12327da 100644
--- a/src/com/android/browser/WebViewFactory.java
+++ b/src/com/android/browser/WebViewFactory.java
@@ -25,6 +25,8 @@
 
     public WebView createWebView(boolean privateBrowsing);
 
+    public WebView createWebView(boolean privateBrowsing, boolean backgroundTab);
+
     public WebView createSubWebView(boolean privateBrowsing);
 
 }