Skip to content

Commit 095e8aa

Browse files
committed
Fix some destroy bugs
Bug: 6961494 Don't call clearHelpers in destroy(). It is already called in onDetach, which is where it needs to be. It can't be called by the finalizer Switch onCancel listener to onDismiss listener. Fixes an issue where destroying can live the webcore thread hung because onCancel won't be called, but onDismiss is Change-Id: I669c389c8c9a81d92c27f88d83bcb711c6c0a5ee
1 parent 753e128 commit 095e8aa

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

core/java/android/webkit/WebViewClassic.java

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import android.content.ComponentCallbacks2;
2828
import android.content.Context;
2929
import android.content.DialogInterface;
30-
import android.content.DialogInterface.OnCancelListener;
3130
import android.content.Intent;
3231
import android.content.IntentFilter;
3332
import android.content.pm.PackageManager;
@@ -69,7 +68,6 @@
6968
import android.util.DisplayMetrics;
7069
import android.util.EventLog;
7170
import android.util.Log;
72-
import android.view.Display;
7371
import android.view.Gravity;
7472
import android.view.HapticFeedbackConstants;
7573
import android.view.HardwareCanvas;
@@ -87,7 +85,6 @@
8785
import android.view.ViewGroup;
8886
import android.view.ViewParent;
8987
import android.view.ViewRootImpl;
90-
import android.view.WindowManager;
9188
import android.view.accessibility.AccessibilityEvent;
9289
import android.view.accessibility.AccessibilityManager;
9390
import android.view.accessibility.AccessibilityNodeInfo;
@@ -136,9 +133,6 @@
136133
import java.util.Map;
137134
import java.util.Set;
138135
import java.util.Vector;
139-
import java.util.concurrent.CountDownLatch;
140-
import java.util.regex.Matcher;
141-
import java.util.regex.Pattern;
142136

143137
/**
144138
* Implements a backend provider for the {@link WebView} public API.
@@ -1891,9 +1885,9 @@ public void onClick(DialogInterface dialog, int which) {
18911885
mSavePasswordDialog = null;
18921886
}
18931887
})
1894-
.setOnCancelListener(new OnCancelListener() {
1888+
.setOnDismissListener(new DialogInterface.OnDismissListener() {
18951889
@Override
1896-
public void onCancel(DialogInterface dialog) {
1890+
public void onDismiss(DialogInterface dialog) {
18971891
if (mResumeMsg != null) {
18981892
resumeMsg.sendToTarget();
18991893
mResumeMsg = null;
@@ -2098,14 +2092,18 @@ private void clearHelpers() {
20982092
hideSoftKeyboard();
20992093
clearActionModes();
21002094
dismissFullScreenMode();
2101-
cancelSelectDialog();
2095+
cancelDialogs();
21022096
}
21032097

2104-
private void cancelSelectDialog() {
2098+
private void cancelDialogs() {
21052099
if (mListBoxDialog != null) {
21062100
mListBoxDialog.cancel();
21072101
mListBoxDialog = null;
21082102
}
2103+
if (mSavePasswordDialog != null) {
2104+
mSavePasswordDialog.dismiss();
2105+
mSavePasswordDialog = null;
2106+
}
21092107
}
21102108

21112109
/**
@@ -2133,15 +2131,6 @@ private void ensureFunctorDetached() {
21332131

21342132
private void destroyJava() {
21352133
mCallbackProxy.blockMessages();
2136-
clearHelpers();
2137-
if (mListBoxDialog != null) {
2138-
mListBoxDialog.dismiss();
2139-
mListBoxDialog = null;
2140-
}
2141-
if (mSavePasswordDialog != null) {
2142-
mSavePasswordDialog.dismiss();
2143-
mSavePasswordDialog = null;
2144-
}
21452134
if (mWebViewCore != null) {
21462135
// Tell WebViewCore to destroy itself
21472136
synchronized (this) {
@@ -3492,7 +3481,7 @@ public void onPause() {
34923481
nativeSetPauseDrawing(mNativeClass, true);
34933482
}
34943483

3495-
cancelSelectDialog();
3484+
cancelDialogs();
34963485
WebCoreThreadWatchdog.pause();
34973486
}
34983487
}

0 commit comments

Comments
 (0)