Fix issue when navigating on Snapshot Tab

- When navigating on snapshot tab, clicking on the links
  in the snapshot tab causes navigation in the same tab to occur
  This is wrong behaviour in terms of user experience and would
  also cause issues with Edge navigation

Change-Id: I9b2f7eb27aed0209f0245ab71ee69fe087eb9161
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index dbbc164..c546f48 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1058,7 +1058,9 @@
 
     @Override
     public boolean shouldOverrideUrlLoading(Tab tab, WebView view, String url) {
-        return mUrlHandler.shouldOverrideUrlLoading(tab, view, url);
+        // if tab is snapshot tab we want to prevent navigation from occuring
+        // since snapshot tab opens a new tab with the url
+        return  goLive(url) || mUrlHandler.shouldOverrideUrlLoading(tab, view, url);
     }
 
     @Override
@@ -2149,9 +2151,10 @@
                 break;
 
             case R.id.snapshot_go_live:
-                goLive();
-                return true;
-
+                // passing null to distinguish between
+                // "go live" button and navigating a web page
+                //  on a snapshot tab
+                return goLive(null);
             case R.id.share_page_menu_id:
                 Tab currentTab = mTabControl.getCurrentTab();
                 if (null == currentTab) {
@@ -2360,23 +2363,18 @@
         }
     }
 
-    private void goLive() {
-        if (!getCurrentTab().isSnapshot()) return;
+    public boolean goLive(String url) {
+        if (!getCurrentTab().isSnapshot())
+            return false;
         SnapshotTab t = (SnapshotTab) getCurrentTab();
-        String url = t.getLiveUrl();
-        boolean onlySingleTabRemaining = false;
-        if (mTabControl.getTabCount() > 1) {
-            // destroy the old snapshot tab
-            closeCurrentTab();
-        } else {
-            onlySingleTabRemaining = true;
-        }
-        Tab liveTab =  createNewTab(false, true, false);
-        if (onlySingleTabRemaining) {
+
+        if (url == null) { // "go live" button was clicked
+            url = t.getLiveUrl();
             closeTab(t);
         }
-
+        Tab liveTab = createNewTab(false, true, false);
         loadUrl(liveTab, url);
+        return true;
     }
 
     private void showExitDialog(final Activity activity) {
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java
index 7471bca..c63bf10 100644
--- a/src/com/android/browser/SnapshotTab.java
+++ b/src/com/android/browser/SnapshotTab.java
@@ -49,7 +49,6 @@
     private long mDateCreated;
     private boolean mIsLive;
     private String mLiveUrl;
-    private Bundle mSavedState;
 
     // Used for saving and restoring each Tab
     static final String SNAPSHOT_ID = "snapshotId";
@@ -65,6 +64,7 @@
         WebView web = mWebViewFactory.createWebView(false);
         setWebView(web);
         loadData();
+        mIsLive = false;
     }
 
     @Override
@@ -125,10 +125,11 @@
             return super.saveState();
         }
 
-        mSavedState = new Bundle();
-        mSavedState = super.saveState();
-        mSavedState.putLong(SNAPSHOT_ID, mSnapshotId);
-        return mSavedState;
+        Bundle savedState = new Bundle();
+        savedState.putLong(SNAPSHOT_ID, mSnapshotId);
+        savedState.putLong(ID, getId());
+
+        return savedState;
     }
 
     public long getDateCreated() {
@@ -140,15 +141,6 @@
     }
 
     @Override
-    public void loadUrl(String url, Map<String, String> headers) {
-        if (!mIsLive) {
-            mIsLive = true;
-            getWebView().clearViewState();
-        }
-        super.loadUrl(url, headers);
-    }
-
-    @Override
     public boolean canGoBack() {
         return super.canGoBack() || mIsLive;
     }
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a4cc47f..3fc6eb5 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -655,6 +655,8 @@
                 return;
             }
 
+
+
             final int idx = view.copyBackForwardList().getCurrentIndex();
             boolean bitmapExists = view.hasSnapshot(idx);
 
@@ -681,6 +683,11 @@
                 return;
             }
 
+            // prevent snapshot tab from commiting any history
+            if (isSnapshot()) {
+                return;
+            }
+
             mTabHistoryUpdateObservable.set(index);
             final int maxIdx = view.copyBackForwardList().getSize();
             final WebView wv = view;