summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Scott <phanna@android.com>2010-06-16 12:27:06 -0400
committerJean-Baptiste Queru <jbq@google.com>2010-08-26 14:05:21 -0700
commit35e719794b9055a79a997f8a506cef9243240e6c (patch)
tree784cb6a02373f4767138cb2c81f121c6ba5f7d3d
parentf3ee6f87a344b185d8bde12c77440c9020378510 (diff)
downloadbase-35e719794b9055a79a997f8a506cef9243240e6c.tar.gz
Fix a monkey crash when the new WebView is destroyed.
Grab the WebViewCore immediately so that if the Tab is destroyed, we have the old WebViewCore object and can return the BrowserFrame. Bug: 2733004 Change-Id: Ic3e4c5417f2165f412f60f05aea3ed403d8cecfd
-rw-r--r--core/java/android/webkit/BrowserFrame.java6
-rw-r--r--core/java/android/webkit/CallbackProxy.java12
2 files changed, 10 insertions, 8 deletions
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java
index 219a469c2de9..a2c80f265c7d 100644
--- a/core/java/android/webkit/BrowserFrame.java
+++ b/core/java/android/webkit/BrowserFrame.java
@@ -785,11 +785,7 @@ class BrowserFrame extends Handler {
* @return The BrowserFrame object stored in the new WebView.
*/
private BrowserFrame createWindow(boolean dialog, boolean userGesture) {
- WebView w = mCallbackProxy.createWindow(dialog, userGesture);
- if (w != null) {
- return w.getWebViewCore().getBrowserFrame();
- }
- return null;
+ return mCallbackProxy.createWindow(dialog, userGesture);
}
/**
diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java
index 0e0e032e74c0..d65c1064d323 100644
--- a/core/java/android/webkit/CallbackProxy.java
+++ b/core/java/android/webkit/CallbackProxy.java
@@ -1098,7 +1098,7 @@ class CallbackProxy extends Handler {
}
}
- public WebView createWindow(boolean dialog, boolean userGesture) {
+ public BrowserFrame createWindow(boolean dialog, boolean userGesture) {
// Do an unsynchronized quick check to avoid posting if no callback has
// been set.
if (mWebChromeClient == null) {
@@ -1122,9 +1122,15 @@ class CallbackProxy extends Handler {
WebView w = transport.getWebView();
if (w != null) {
- w.getWebViewCore().initializeSubwindow();
+ WebViewCore core = w.getWebViewCore();
+ // If WebView.destroy() has been called, core may be null. Skip
+ // initialization in that case and return null.
+ if (core != null) {
+ core.initializeSubwindow();
+ return core.getBrowserFrame();
+ }
}
- return w;
+ return null;
}
public void onRequestFocus() {