diff options
author | Selim Gurun <sgurun@google.com> | 2011-12-07 18:39:24 -0800 |
---|---|---|
committer | Selim Gurun <sgurun@google.com> | 2011-12-13 10:08:27 -0800 |
commit | 38f3610a29c75c3bb16408a911e3365a71b6524c (patch) | |
tree | 3758c8c7aef8cc1ce90eb2e03770f5f2ae2ea2cd /core/java/android/webkit/ClientCertRequestHandler.java | |
parent | 9c8fc9c62015382a9369f983a7ac6c655d9bbaaf (diff) | |
download | frameworks_base-38f3610a29c75c3bb16408a911e3365a71b6524c.zip frameworks_base-38f3610a29c75c3bb16408a911e3365a71b6524c.tar.gz frameworks_base-38f3610a29c75c3bb16408a911e3365a71b6524c.tar.bz2 |
Move ssl callbacks to webcore thread.
Bug: 4586251
Original CL was for ics-mr1. We decided it should be in master
instead. Original CL
https://android-git.corp.google.com/g/154083
Current ssl cert logic makes callbacks to webkit from the
UI thread. This is not right. Move the callbacks to proper thread.
Change-Id: Ie3de7dbaed7780dbb6cf537ca1d29686d867b784
Diffstat (limited to 'core/java/android/webkit/ClientCertRequestHandler.java')
-rw-r--r-- | core/java/android/webkit/ClientCertRequestHandler.java | 35 |
1 files changed, 26 insertions, 9 deletions
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 @@ import org.apache.harmony.xnet.provider.jsse.NativeCrypto; * * @hide */ -public final class ClientCertRequestHandler { +public final class ClientCertRequestHandler extends Handler { private final BrowserFrame mBrowserFrame; private final int mHandle; @@ -49,23 +50,35 @@ public final class ClientCertRequestHandler { * 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 final class ClientCertRequestHandler { */ public void cancel() { mTable.Deny(mHostAndPort); - mBrowserFrame.nativeSslClientCert(mHandle, null, null); + post(new Runnable() { + public void run() { + mBrowserFrame.nativeSslClientCert(mHandle, null, null); + } + }); } } |