Do Not Merge. Move ssl callbacks to webcore thread.

Bug: 4586251

Cherry picking from master for ics-mr1.

Current ssl cert logic makes callbacks to webkit from the
UI thread. This is not right. Move the callbacks to proper thread.

Change-Id: I59affba47eca01b74e2bc33d88ef83a5850d6ce9
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index c194559..a2ae69b 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -1180,11 +1180,19 @@
             @Override
             public void proceed() {
                 SslCertLookupTable.getInstance().setIsAllowed(sslError);
-                nativeSslCertErrorProceed(handle);
+                post(new Runnable() {
+                        public void run() {
+                            nativeSslCertErrorProceed(handle);
+                        }
+                    });
             }
             @Override
             public void cancel() {
-                nativeSslCertErrorCancel(handle, certError);
+                post(new Runnable() {
+                        public void run() {
+                            nativeSslCertErrorCancel(handle, certError);
+                        }
+                    });
             }
         };
         mCallbackProxy.onReceivedSslError(handler, sslError);
diff --git a/core/java/android/webkit/ClientCertRequestHandler.java b/core/java/android/webkit/ClientCertRequestHandler.java
index 3a71e7e..f862613 100644
--- a/core/java/android/webkit/ClientCertRequestHandler.java
+++ b/core/java/android/webkit/ClientCertRequestHandler.java
@@ -16,6 +16,7 @@
 
 package android.webkit;
 
+import android.os.Handler;
 import java.security.PrivateKey;
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.X509Certificate;
@@ -29,7 +30,7 @@
  *
  * @hide
  */
-public final class ClientCertRequestHandler {
+public final class ClientCertRequestHandler extends Handler {
 
     private final BrowserFrame mBrowserFrame;
     private final int mHandle;
@@ -49,23 +50,35 @@
      * Proceed with the specified private key and client certificate chain.
      */
     public void proceed(PrivateKey privateKey, X509Certificate[] chain) {
-        byte[] privateKeyBytes = privateKey.getEncoded();
-        byte[][] chainBytes;
+        final byte[] privateKeyBytes = privateKey.getEncoded();
+        final byte[][] chainBytes;
         try {
             chainBytes = NativeCrypto.encodeCertificates(chain);
+            mTable.Allow(mHostAndPort, privateKeyBytes, chainBytes);
+            post(new Runnable() {
+                    public void run() {
+                        mBrowserFrame.nativeSslClientCert(mHandle, privateKeyBytes, chainBytes);
+                    }
+                });
         } catch (CertificateEncodingException e) {
-            mBrowserFrame.nativeSslClientCert(mHandle, null, null);
-            return;
+            post(new Runnable() {
+                    public void run() {
+                        mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+                        return;
+                    }
+                });
         }
-        mTable.Allow(mHostAndPort, privateKeyBytes, chainBytes);
-        mBrowserFrame.nativeSslClientCert(mHandle, privateKeyBytes, chainBytes);
     }
 
     /**
      * Igore the request for now, the user may be prompted again.
      */
     public void ignore() {
-        mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+        post(new Runnable() {
+                public void run() {
+                    mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+                }
+            });
     }
 
     /**
@@ -73,6 +86,10 @@
      */
     public void cancel() {
         mTable.Deny(mHostAndPort);
-        mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+        post(new Runnable() {
+                public void run() {
+                    mBrowserFrame.nativeSslClientCert(mHandle, null, null);
+                }
+            });
     }
 }
diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java
index d136004..2d15afb 100644
--- a/core/java/android/webkit/WebViewCore.java
+++ b/core/java/android/webkit/WebViewCore.java
@@ -2872,6 +2872,6 @@
     private native ArrayList<Rect> nativeGetTouchHighlightRects(int x, int y,
             int slop);
 
-   private native void nativeAutoFillForm(int queryId);
-   private native void nativeScrollLayer(int layer, Rect rect);
+    private native void nativeAutoFillForm(int queryId);
+    private native void nativeScrollLayer(int layer, Rect rect);
 }