OSDN Git Service

Fix some destroy bugs
authorJohn Reck <jreck@google.com>
Mon, 10 Sep 2012 23:07:04 +0000 (16:07 -0700)
committerJohn Reck <jreck@google.com>
Mon, 10 Sep 2012 23:07:04 +0000 (16:07 -0700)
 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

core/java/android/webkit/WebViewClassic.java

index 9334036..494a28c 100644 (file)
@@ -27,7 +27,6 @@ import android.content.ClipboardManager;
 import android.content.ComponentCallbacks2;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
@@ -69,7 +68,6 @@ import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.Log;
-import android.view.Display;
 import android.view.Gravity;
 import android.view.HapticFeedbackConstants;
 import android.view.HardwareCanvas;
@@ -87,7 +85,6 @@ import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewParent;
 import android.view.ViewRootImpl;
-import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -136,9 +133,6 @@ import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
 import java.util.Vector;
-import java.util.concurrent.CountDownLatch;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * Implements a backend provider for the {@link WebView} public API.
@@ -1891,9 +1885,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                             mSavePasswordDialog = null;
                         }
                     })
-                    .setOnCancelListener(new OnCancelListener() {
+                    .setOnDismissListener(new DialogInterface.OnDismissListener() {
                         @Override
-                        public void onCancel(DialogInterface dialog) {
+                        public void onDismiss(DialogInterface dialog) {
                             if (mResumeMsg != null) {
                                 resumeMsg.sendToTarget();
                                 mResumeMsg = null;
@@ -2098,14 +2092,18 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
         hideSoftKeyboard();
         clearActionModes();
         dismissFullScreenMode();
-        cancelSelectDialog();
+        cancelDialogs();
     }
 
-    private void cancelSelectDialog() {
+    private void cancelDialogs() {
         if (mListBoxDialog != null) {
             mListBoxDialog.cancel();
             mListBoxDialog = null;
         }
+        if (mSavePasswordDialog != null) {
+            mSavePasswordDialog.dismiss();
+            mSavePasswordDialog = null;
+        }
     }
 
     /**
@@ -2133,15 +2131,6 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
 
     private void destroyJava() {
         mCallbackProxy.blockMessages();
-        clearHelpers();
-        if (mListBoxDialog != null) {
-            mListBoxDialog.dismiss();
-            mListBoxDialog = null;
-        }
-        if (mSavePasswordDialog != null) {
-            mSavePasswordDialog.dismiss();
-            mSavePasswordDialog = null;
-        }
         if (mWebViewCore != null) {
             // Tell WebViewCore to destroy itself
             synchronized (this) {
@@ -3492,7 +3481,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                 nativeSetPauseDrawing(mNativeClass, true);
             }
 
-            cancelSelectDialog();
+            cancelDialogs();
             WebCoreThreadWatchdog.pause();
         }
     }