summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-01-21 16:53:18 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-22 16:46:52 +0100
commit72dcef7294680226ffde88bb1837bd1e4364b809 (patch)
treee321e511191af2533161449952f70696da721750 /src
parente2a97950c9c4ede43a9ddd33213a3cdc9dcd594d (diff)
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 <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/javascript_dialog_manager_qt.cpp9
1 files 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<JavaScriptDialogController> 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<JavaScriptDialogController> dialog = m_activeDialogs.take(contents);
- Q_EMIT dialog->dialogCloseRequested();
+ if (dialog)
+ Q_EMIT dialog->dialogCloseRequested();
}