diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-01-21 16:53:18 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-01-22 16:46:52 +0100 |
commit | 72dcef7294680226ffde88bb1837bd1e4364b809 (patch) | |
tree | e321e511191af2533161449952f70696da721750 /src | |
parent | e2a97950c9c4ede43a9ddd33213a3cdc9dcd594d (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.cpp | 9 |
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(); } |