From 72dcef7294680226ffde88bb1837bd1e4364b809 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Tue, 21 Jan 2014 16:53:18 +0100 Subject: Fix a crash in JavaScriptDialogController We already remove the active dialog for a given WebContents from the map when it's accepted/rejected. We should hence not expect to get a valid dialog controller on subsequent attempts (when the WebContents get destroyed for instance). Change-Id: I522308e20772a55f1bcba26047b3f4e4aef94082 Reviewed-by: Jocelyn Turcotte --- src/core/javascript_dialog_manager_qt.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp index f0b8c5485..1cde76a8f 100644 --- a/src/core/javascript_dialog_manager_qt.cpp +++ b/src/core/javascript_dialog_manager_qt.cpp @@ -81,11 +81,11 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *contents, bool accept, const base::string16 *promptOverride) { - if (!m_activeDialogs.contains(contents)) - return false; QSharedPointer dialog = m_activeDialogs.value(contents); - Q_EMIT dialog->dialogCloseRequested(); + if (!dialog) + return false; dialog->d->dialogFinished(accept, promptOverride ? *promptOverride : base::string16()); + removeDialogForContents(contents); return true; } @@ -93,5 +93,6 @@ bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *con void JavaScriptDialogManagerQt::removeDialogForContents(content::WebContents *contents) { QSharedPointer dialog = m_activeDialogs.take(contents); - Q_EMIT dialog->dialogCloseRequested(); + if (dialog) + Q_EMIT dialog->dialogCloseRequested(); } -- cgit v1.2.3