Fix issue with memory monitor killing background tabs

When multiple tabs are opened in background memory monitor would allow only a
certain number of tabs to load, other tabs would never have a chance to save instances
which can be restored from WebView. We ensure to restore the background tabs from
original URL.

Change-Id: I940d4cd8f3b077d5351cb34ce441bd4b74ae689b
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 5ee9477..6919300 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -192,6 +192,9 @@
     // determine if webview is destroyed to MemoryMonitor
     private boolean mWebViewDestroyedByMemoryMonitor;
 
+    // Tab started initally in background
+    private boolean mBackgroundTab;
+
     private String mTouchIconUrl;
 
     private Observable mFirstPixelObservable;
@@ -328,6 +331,7 @@
         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {
             setIsDistillable(false);
+            mBackgroundTab = false;
             mInPageLoad = true;
             mPageFinished = false;
             mFirstVisualPixelPainted = false;
@@ -1175,6 +1179,10 @@
     }
 
     Tab(WebViewController wvcontroller, WebView w, Bundle state) {
+        this(wvcontroller, null, state, false);
+    }
+
+    Tab(WebViewController wvcontroller, WebView w, Bundle state, boolean backgroundTab) {
         mWebViewController = wvcontroller;
         mContext = mWebViewController.getContext();
         mSettings = BrowserSettings.getInstance();
@@ -1185,6 +1193,7 @@
         mInPageLoad = false;
         mInForeground = false;
         mWebViewDestroyedByMemoryMonitor = false;
+        mBackgroundTab = backgroundTab;
 
         mDownloadListener = new BrowserDownloadListener() {
             public void onDownloadStart(String url, String userAgent,
@@ -1302,18 +1311,9 @@
             mMainView.setPictureListener(null);
             if (w != null) {
                 syncCurrentState(w, null);
-            } else {
-                mCurrentState = new PageState(mContext, mMainView.isPrivateBrowsingEnabled());
-
-                if (mWebViewDestroyedByMemoryMonitor) {
-                    /*
-                    * If tab was destroyed as a result of the MemoryMonitor
-                    * then we need to restore the state properties
-                    * from the old WebView (mMainView)
-                    */
-                    syncCurrentState(mMainView, null);
-                    mWebViewDestroyedByMemoryMonitor = false;
-                }
+            } else if(!mWebViewDestroyedByMemoryMonitor) {
+                mCurrentState = new PageState(mContext,
+                    mMainView.isPrivateBrowsingEnabled());
             }
         }
         // set the new one
@@ -1340,7 +1340,11 @@
                     Log.w(LOGTAG, "Failed to restore WebView state!");
                     loadUrl(mCurrentState.mOriginalUrl, null);
                 }
+                mWebViewDestroyedByMemoryMonitor = false;
                 mSavedState = null;
+            } else if(restore && mBackgroundTab && mWebViewDestroyedByMemoryMonitor) {
+                loadUrl(mCurrentState.mOriginalUrl, null);
+                mWebViewDestroyedByMemoryMonitor = false;
             }
         }
     }