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

Commit d2bfdfdd authored by Michael Kolb's avatar Michael Kolb
Browse files

Prevent message being sent twice in onSavePassword

    Bug: 6256107

Change-Id: I1cdc7d49b6e479532385c29d759b8d4e4ab7aaa3
parent f9c1f993
Loading
Loading
Loading
Loading
+31 −10
Original line number Diff line number Diff line
@@ -1446,6 +1446,9 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
    // Used to notify listeners about find-on-page results.
    private WebView.FindListener mFindListener;

    // Used to prevent resending save password message
    private Message mResumeMsg;

    /**
     * Refer to {@link WebView#requestFocusNodeHref(Message)} for more information
     */
@@ -1900,6 +1903,12 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
            // null resumeMsg implies saving password silently
            mDatabase.setUsernamePassword(schemePlusHost, username, password);
        } else {
            if (mResumeMsg != null) {
                Log.w(LOGTAG, "onSavePassword should not be called while dialog is up");
                resumeMsg.sendToTarget();
                return true;
            }
            mResumeMsg = resumeMsg;
            final Message remember = mPrivateHandler.obtainMessage(
                    REMEMBER_PASSWORD);
            remember.getData().putString("host", schemePlusHost);
@@ -1921,27 +1930,39 @@ public final class WebViewClassic implements WebViewProvider, WebViewProvider.Sc
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (mResumeMsg != null) {
                                resumeMsg.sendToTarget();
                                mResumeMsg = null;
                            }
                        }
                    })
                    .setNeutralButton(com.android.internal.R.string.save_password_remember,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (mResumeMsg != null) {
                                remember.sendToTarget();
                                mResumeMsg = null;
                            }
                        }
                    })
                    .setNegativeButton(com.android.internal.R.string.save_password_never,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            if (mResumeMsg != null) {
                                neverRemember.sendToTarget();
                                mResumeMsg = null;
                            }
                        }
                    })
                    .setOnCancelListener(new OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface dialog) {
                            if (mResumeMsg != null) {
                                resumeMsg.sendToTarget();
                                mResumeMsg = null;
                            }
                        }
                    }).show();
            // Return true so that WebViewCore will pause while the dialog is