Do not merge: cherry-pick a fix for a npe.

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: I8cddf9c9d635fc8b50983e4813eadda26cf23348
This commit is contained in:
Patrick Scott
2010-06-16 12:27:06 -04:00
parent dd62a056b8
commit b2044da3f9
2 changed files with 10 additions and 8 deletions

View File

@@ -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);
}
/**

View File

@@ -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() {