Merge "Fix IntentHandler behavior"
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 1f376d2..447e61b 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -1696,8 +1696,7 @@
                 break;
 
             case R.id.page_info_menu_id:
-                mPageDialogsHandler.showPageInfo(mTabControl.getCurrentTab(),
-                        false);
+                mPageDialogsHandler.showPageInfo(mTabControl.getCurrentTab(), false, null);
                 break;
 
             case R.id.classic_history_menu_id:
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 37654dc..c7d1924 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -57,8 +57,6 @@
     private static final String GOOGLE = "com.google";
     // Last auto login time
     private static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
-    // A week in milliseconds (7*24*60*60*1000)
-    private static final long WEEK_IN_MILLIS = 604800000L;
 
     private final Activity mActivity;
     private final Account mAccount;
@@ -294,7 +292,12 @@
                     }
                 }, 2000);
             mRunnable = null;
-            mWebView.destroy();
+            mActivity.runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    mWebView.destroy();
+                }
+            });
         }
     }
 
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index c902f65..b39d863 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -39,6 +39,7 @@
     private Context mContext;
     private Controller mController;
     private boolean mPageInfoFromShowSSLCertificateOnError;
+    private String mUrlCertificateOnError;
     private Tab mPageInfoView;
     private AlertDialog mPageInfoDialog;
 
@@ -63,7 +64,9 @@
     public void onConfigurationChanged(Configuration config) {
         if (mPageInfoDialog != null) {
             mPageInfoDialog.dismiss();
-            showPageInfo(mPageInfoView, mPageInfoFromShowSSLCertificateOnError);
+            showPageInfo(mPageInfoView,
+                         mPageInfoFromShowSSLCertificateOnError,
+                         mUrlCertificateOnError);
         }
         if (mSSLCertificateDialog != null) {
             mSSLCertificateDialog.dismiss();
@@ -71,8 +74,9 @@
         }
         if (mSSLCertificateOnErrorDialog != null) {
             mSSLCertificateOnErrorDialog.dismiss();
-            showSSLCertificateOnError(mSSLCertificateOnErrorView, mSSLCertificateOnErrorHandler,
-                    mSSLCertificateOnErrorError);
+            showSSLCertificateOnError(mSSLCertificateOnErrorView,
+                                      mSSLCertificateOnErrorHandler,
+                                      mSSLCertificateOnErrorError);
         }
         if (mHttpAuthenticationDialog != null) {
             mHttpAuthenticationDialog.reshow();
@@ -126,16 +130,19 @@
      * this dialog was opened from the SSL-certificate-on-error dialog or
      * not. This is important, since we need to know whether to return to
      * the parent dialog or simply dismiss.
+     * @param urlCertificateOnError The URL that invokes SSLCertificateError.
+     * Null when fromShowSSLCertificateOnError is false.
      */
     void showPageInfo(final Tab tab,
-            final boolean fromShowSSLCertificateOnError) {
+            final boolean fromShowSSLCertificateOnError,
+            final String urlCertificateOnError) {
         final LayoutInflater factory = LayoutInflater.from(mContext);
 
         final View pageInfoView = factory.inflate(R.layout.page_info, null);
 
         final WebView view = tab.getWebView();
 
-        String url = tab.getUrl();
+        String url = fromShowSSLCertificateOnError ? urlCertificateOnError : tab.getUrl();
         String title = tab.getTitle();
 
         if (url == null) {
@@ -150,6 +157,7 @@
 
         mPageInfoView = tab;
         mPageInfoFromShowSSLCertificateOnError = fromShowSSLCertificateOnError;
+        mUrlCertificateOnError = urlCertificateOnError;
 
         AlertDialog.Builder alertDialogBuilder =
             new AlertDialog.Builder(mContext)
@@ -261,7 +269,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(tab, false);
+                                showPageInfo(tab, false, null);
                             }
                         })
                 .setOnCancelListener(
@@ -270,7 +278,7 @@
                                 mSSLCertificateDialog = null;
                                 mSSLCertificateView = null;
 
-                                showPageInfo(tab, false);
+                                showPageInfo(tab, false, null);
                             }
                         })
                 .show();
@@ -359,7 +367,8 @@
 
                                 showPageInfo(mController.getTabControl()
                                         .getTabFromView(view),
-                                        true);
+                                        true,
+                                        error.getUrl());
                             }
                         })
                 .setOnCancelListener(
diff --git a/src/com/android/browser/TabScrollView.java b/src/com/android/browser/TabScrollView.java
index f43d6d6..52dd6af 100644
--- a/src/com/android/browser/TabScrollView.java
+++ b/src/com/android/browser/TabScrollView.java
@@ -246,11 +246,11 @@
         @Override
         protected int getChildDrawingOrder(int count, int i) {
             int next = -1;
-            if ((i == (count - 1)) && (mSelected >= 0)) {
+            if ((i == (count - 1)) && (mSelected >= 0) && (mSelected < count)) {
                 next = mSelected;
             } else {
                 next = count - i - 1;
-                if (next <= mSelected) {
+                if (next <= mSelected && next > 0) {
                     next--;
                 }
             }