summaryrefslogtreecommitdiffstats
path: root/core/java/android/webkit/ClientCertRequestHandler.java
diff options
context:
space:
mode:
authorSelim Gurun <sgurun@google.com>2011-12-07 18:39:24 -0800
committerSelim Gurun <sgurun@google.com>2011-12-13 10:08:27 -0800
commit38f3610a29c75c3bb16408a911e3365a71b6524c (patch)
tree3758c8c7aef8cc1ce90eb2e03770f5f2ae2ea2cd /core/java/android/webkit/ClientCertRequestHandler.java
parent9c8fc9c62015382a9369f983a7ac6c655d9bbaaf (diff)
downloadframeworks_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.java35
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);
+ }
+ });
}
}