diff options
| author | 2009-08-03 10:49:58 -0700 | |
|---|---|---|
| committer | 2009-08-03 10:49:58 -0700 | |
| commit | f6d1a5528ee626487c78f17501d61e61bbe26b10 (patch) | |
| tree | 862160b712e3922fb6d21c832ff3f804b055e413 | |
| parent | 8050220374e67e0ffa9d92551f422c02cacadd9d (diff) | |
| parent | b8802b21384e7e0136c423c34eb64c445033afa5 (diff) | |
resolved conflicts for merge of b8802b21 to master
| -rw-r--r-- | core/java/android/net/http/EventHandler.java | 5 | ||||
| -rw-r--r-- | core/java/android/net/http/HttpsConnection.java | 5 | ||||
| -rw-r--r-- | core/java/android/net/http/LoggingEventHandler.java | 4 | ||||
| -rw-r--r-- | core/java/android/webkit/LoadListener.java | 15 |
4 files changed, 25 insertions, 4 deletions
diff --git a/core/java/android/net/http/EventHandler.java b/core/java/android/net/http/EventHandler.java index 830d1f14cbf3..a035c1923496 100644 --- a/core/java/android/net/http/EventHandler.java +++ b/core/java/android/net/http/EventHandler.java @@ -141,7 +141,10 @@ public interface EventHandler { * SSL certificate error callback. Handles SSL error(s) on the way * up to the user. The callback has to make sure that restartConnection() is called, * otherwise the connection will be suspended indefinitely. + * @return True if the callback can handle the error, which means it will + * call restartConnection() to unblock the thread later, + * otherwise return false. */ - public void handleSslErrorRequest(SslError error); + public boolean handleSslErrorRequest(SslError error); } diff --git a/core/java/android/net/http/HttpsConnection.java b/core/java/android/net/http/HttpsConnection.java index 55b733f3ea6f..8a69d0d9fdff 100644 --- a/core/java/android/net/http/HttpsConnection.java +++ b/core/java/android/net/http/HttpsConnection.java @@ -323,7 +323,10 @@ public class HttpsConnection extends Connection { mSuspended = true; } // don't hold the lock while calling out to the event handler - eventHandler.handleSslErrorRequest(error); + boolean canHandle = eventHandler.handleSslErrorRequest(error); + if(!canHandle) { + throw new IOException("failed to handle "+ error); + } synchronized (mSuspendLock) { if (mSuspended) { try { diff --git a/core/java/android/net/http/LoggingEventHandler.java b/core/java/android/net/http/LoggingEventHandler.java index 1b18651bea8c..bdafa0bed470 100644 --- a/core/java/android/net/http/LoggingEventHandler.java +++ b/core/java/android/net/http/LoggingEventHandler.java @@ -82,9 +82,11 @@ public class LoggingEventHandler implements EventHandler { } } - public void handleSslErrorRequest(SslError error) { + public boolean handleSslErrorRequest(SslError error) { if (HttpLog.LOGV) { HttpLog.v("LoggingEventHandler: handleSslErrorRequest():" + error); } + // return false so that the caller thread won't wait forever + return false; } } diff --git a/core/java/android/webkit/LoadListener.java b/core/java/android/webkit/LoadListener.java index 50436d87bfde..7fff0148e5a5 100644 --- a/core/java/android/webkit/LoadListener.java +++ b/core/java/android/webkit/LoadListener.java @@ -104,6 +104,7 @@ class LoadListener extends Handler implements EventHandler { private String mErrorDescription; private SslError mSslError; private RequestHandle mRequestHandle; + private RequestHandle mSslErrorRequestHandle; // Request data. It is only valid when we are doing a load from the // cache. It is needed if the cache returns a redirect @@ -673,7 +674,7 @@ class LoadListener extends Handler implements EventHandler { * IMPORTANT: as this is called from network thread, can't call native * directly */ - public void handleSslErrorRequest(SslError error) { + public boolean handleSslErrorRequest(SslError error) { if (DebugFlags.LOAD_LISTENER) { Log.v(LOGTAG, "LoadListener.handleSslErrorRequest(): url:" + url() + @@ -681,6 +682,15 @@ class LoadListener extends Handler implements EventHandler { " certificate: " + error.getCertificate()); } sendMessageInternal(obtainMessage(MSG_SSL_ERROR, error)); + // if it has been canceled, return false so that the network thread + // won't be blocked. If it is not canceled, save the mRequestHandle + // so that if it is canceled when MSG_SSL_ERROR is handled, we can + // still call handleSslErrorResponse which will call restartConnection + // to unblock the network thread. + if (!mCancelled) { + mSslErrorRequestHandle = mRequestHandle; + } + return !mCancelled; } // Handle the ssl error on the WebCore thread. @@ -688,7 +698,10 @@ class LoadListener extends Handler implements EventHandler { if (!mCancelled) { mSslError = error; Network.getInstance(mContext).handleSslErrorRequest(this); + } else if (mSslErrorRequestHandle != null) { + mSslErrorRequestHandle.handleSslErrorResponse(true); } + mSslErrorRequestHandle = null; } /** |