diff options
Diffstat (limited to 'core/java/android')
-rw-r--r-- | core/java/android/webkit/JWebCoreJavaBridge.java | 22 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 4 |
2 files changed, 15 insertions, 11 deletions
diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java index e766693..1f8d53f 100644 --- a/core/java/android/webkit/JWebCoreJavaBridge.java +++ b/core/java/android/webkit/JWebCoreJavaBridge.java @@ -20,6 +20,8 @@ import android.os.Handler; import android.os.Message; import android.util.Log; +import java.lang.ref.WeakReference; +import java.util.HashMap; import java.util.Set; final class JWebCoreJavaBridge extends Handler { @@ -44,7 +46,8 @@ final class JWebCoreJavaBridge extends Handler { // keep track of the main WebView attached to the current window so that we // can get the proper Context. - private WebView mCurrentMainWebView; + private static WeakReference<WebView> sCurrentMainWebView = + new WeakReference<WebView>(null); /* package */ static final int REFRESH_PLUGINS = 100; @@ -62,20 +65,20 @@ final class JWebCoreJavaBridge extends Handler { nativeFinalize(); } - synchronized void setActiveWebView(WebView webview) { - if (mCurrentMainWebView != null) { + static synchronized void setActiveWebView(WebView webview) { + if (sCurrentMainWebView.get() != null) { // it is possible if there is a sub-WebView. Do nothing. return; } - mCurrentMainWebView = webview; + sCurrentMainWebView = new WeakReference<WebView>(webview); } - synchronized void removeActiveWebView(WebView webview) { - if (mCurrentMainWebView != webview) { + static synchronized void removeActiveWebView(WebView webview) { + if (sCurrentMainWebView.get() != webview) { // it is possible if there is a sub-WebView. Do nothing. return; } - mCurrentMainWebView = null; + sCurrentMainWebView.clear(); } /** @@ -256,11 +259,12 @@ final class JWebCoreJavaBridge extends Handler { synchronized private String getSignedPublicKey(int index, String challenge, String url) { - if (mCurrentMainWebView != null) { + WebView current = sCurrentMainWebView.get(); + if (current != null) { // generateKeyPair expects organizations which we don't have. Ignore // url. return CertTool.getSignedPublicKey( - mCurrentMainWebView.getContext(), index, challenge); + current.getContext(), index, challenge); } else { Log.e(LOGTAG, "There is no active WebView for getSignedPublicKey"); return ""; diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 4bb11bb..456e0d9 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -4502,9 +4502,9 @@ public class WebView extends AbsoluteLayout public void onWindowFocusChanged(boolean hasWindowFocus) { setActive(hasWindowFocus); if (hasWindowFocus) { - BrowserFrame.sJavaBridge.setActiveWebView(this); + JWebCoreJavaBridge.setActiveWebView(this); } else { - BrowserFrame.sJavaBridge.removeActiveWebView(this); + JWebCoreJavaBridge.removeActiveWebView(this); } super.onWindowFocusChanged(hasWindowFocus); } |