summaryrefslogtreecommitdiffstats
path: root/src/core/javascript_dialog_manager_qt.cpp
diff options
context:
space:
mode:
authorMichael BrĂ¼ning <michael.bruning@digia.com>2014-06-27 17:40:49 +0200
committerMichael Bruning <michael.bruning@digia.com>2014-06-30 11:11:09 +0200
commit0058d5b9dd56ba0453be3297231484917441f7f7 (patch)
tree617dfd98e1e19a29ba3ee0b9329deb983b8a584e /src/core/javascript_dialog_manager_qt.cpp
parent212ff1b00af7642e0416f8e8f83dc3964377195d (diff)
Prevent premature deletion of JavaScript alert dialog object.
This fixes a crash on Windows when dismissing a JavaScript dialog. It was caused by the JavaScriptDialogController object deleting itself and its private object from a method call and subsequently trying to run the JavaScript dialog callback. Task-number: QTBUG-39883 Change-Id: I74300c53943ec7ebc492362ef7d75d83aa1f8051 Reviewed-by: Pierre Rossi <pierre.rossi@gmail.com>
Diffstat (limited to 'src/core/javascript_dialog_manager_qt.cpp')
-rw-r--r--src/core/javascript_dialog_manager_qt.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp
index bd528af95..f886a20d9 100644
--- a/src/core/javascript_dialog_manager_qt.cpp
+++ b/src/core/javascript_dialog_manager_qt.cpp
@@ -76,7 +76,7 @@ bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *con
if (!dialog)
return false;
dialog->d->dialogFinished(accept, promptOverride ? *promptOverride : base::string16());
- removeDialogForContents(contents);
+ takeDialogForContents(contents);
return true;
}
@@ -99,10 +99,10 @@ void JavaScriptDialogManagerQt::runDialogForContents(content::WebContents *webCo
}
-
-void JavaScriptDialogManagerQt::removeDialogForContents(content::WebContents *contents)
+QSharedPointer<JavaScriptDialogController> JavaScriptDialogManagerQt::takeDialogForContents(content::WebContents *contents)
{
QSharedPointer<JavaScriptDialogController> dialog = m_activeDialogs.take(contents);
if (dialog)
Q_EMIT dialog->dialogCloseRequested();
+ return dialog;
}