Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e49e9031 authored by Johan Redestig's avatar Johan Redestig Committed by Steve Kondik
Browse files

onSavePassword dialog can leak when WebViewClassic is destroyed.

The AlertDialog creates in onSavePassword method leaks if
WebViewClassic is destroyed when the dialog is shown.

Change-Id: I81f20e1dd138467a6413766c0a081b389b334ae0
parent 1b9777a0
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -686,6 +686,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
    // It's used to dismiss the dialog in destroy if not done before.
    private AlertDialog mListBoxDialog = null;

    // Reference to the save password dialog so it can be dimissed in
    // destroy if not done before.
    private AlertDialog mSavePasswordDialog = null;

    static final String LOGTAG = "webview";

    private ZoomManager mZoomManager;
@@ -1811,7 +1815,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
            neverRemember.getData().putString("password", password);
            neverRemember.obj = resumeMsg;

            new AlertDialog.Builder(mContext)
            mSavePasswordDialog = new AlertDialog.Builder(mContext)
                    .setTitle(com.android.internal.R.string.save_password_label)
                    .setMessage(com.android.internal.R.string.save_password_message)
                    .setPositiveButton(com.android.internal.R.string.save_password_notnow,
@@ -1822,6 +1826,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                                resumeMsg.sendToTarget();
                                mResumeMsg = null;
                            }
                            mSavePasswordDialog = null;
                        }
                    })
                    .setNeutralButton(com.android.internal.R.string.save_password_remember,
@@ -1832,6 +1837,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                                remember.sendToTarget();
                                mResumeMsg = null;
                            }
                            mSavePasswordDialog = null;
                        }
                    })
                    .setNegativeButton(com.android.internal.R.string.save_password_never,
@@ -1842,6 +1848,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                                neverRemember.sendToTarget();
                                mResumeMsg = null;
                            }
                            mSavePasswordDialog = null;
                        }
                    })
                    .setOnCancelListener(new OnCancelListener() {
@@ -1851,6 +1858,7 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                                resumeMsg.sendToTarget();
                                mResumeMsg = null;
                            }
                            mSavePasswordDialog = null;
                        }
                    }).show();
            // Return true so that WebViewCore will pause while the dialog is
@@ -2090,6 +2098,10 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
            mListBoxDialog.dismiss();
            mListBoxDialog = null;
        }
        if (mSavePasswordDialog != null) {
            mSavePasswordDialog.dismiss();
            mSavePasswordDialog = null;
        }
        if (mWebViewCore != null) {
            // Tell WebViewCore to destroy itself
            synchronized (this) {