summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/webkit/JWebCoreJavaBridge.java21
-rw-r--r--core/java/android/webkit/WebView.java4
2 files changed, 14 insertions, 11 deletions
diff --git a/core/java/android/webkit/JWebCoreJavaBridge.java b/core/java/android/webkit/JWebCoreJavaBridge.java
index ecad26142319..908526f7680c 100644
--- a/core/java/android/webkit/JWebCoreJavaBridge.java
+++ b/core/java/android/webkit/JWebCoreJavaBridge.java
@@ -21,6 +21,7 @@ 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;
@@ -46,7 +47,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;
@@ -67,20 +69,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();
}
/**
@@ -261,11 +263,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 9f60f441ca5c..e13e5c73355e 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -4257,9 +4257,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);
}