diff options
author | Michael BrĂ¼ning <michael.bruning@digia.com> | 2014-06-27 17:40:49 +0200 |
---|---|---|
committer | Michael Bruning <michael.bruning@digia.com> | 2014-06-30 11:11:09 +0200 |
commit | 0058d5b9dd56ba0453be3297231484917441f7f7 (patch) | |
tree | 617dfd98e1e19a29ba3ee0b9329deb983b8a584e /src/core/javascript_dialog_manager_qt.h | |
parent | 212ff1b00af7642e0416f8e8f83dc3964377195d (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.h')
-rw-r--r-- | src/core/javascript_dialog_manager_qt.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/core/javascript_dialog_manager_qt.h b/src/core/javascript_dialog_manager_qt.h index 518ceca53..659b6e95e 100644 --- a/src/core/javascript_dialog_manager_qt.h +++ b/src/core/javascript_dialog_manager_qt.h @@ -68,13 +68,13 @@ public: virtual void RunBeforeUnloadDialog(content::WebContents *, const base::string16 &messageText, bool isReload, const content::JavaScriptDialogManager::DialogClosedCallback &callback) Q_DECL_OVERRIDE { Q_UNUSED(messageText); Q_UNUSED(isReload); Q_UNUSED(callback); } virtual bool HandleJavaScriptDialog(content::WebContents *, bool accept, const base::string16 *promptOverride) Q_DECL_OVERRIDE; - virtual void CancelActiveAndPendingDialogs(content::WebContents *contents) Q_DECL_OVERRIDE { removeDialogForContents(contents); } - virtual void WebContentsDestroyed(content::WebContents *contents) Q_DECL_OVERRIDE { removeDialogForContents(contents); } + virtual void CancelActiveAndPendingDialogs(content::WebContents *contents) Q_DECL_OVERRIDE { takeDialogForContents(contents); } + virtual void WebContentsDestroyed(content::WebContents *contents) Q_DECL_OVERRIDE { takeDialogForContents(contents); } void runDialogForContents(content::WebContents *, WebContentsAdapterClient::JavascriptDialogType, const QString &messageText, const QString &defaultPrompt , const QUrl &,const content::JavaScriptDialogManager::DialogClosedCallback &callback, const QString &title = QString()); - void removeDialogForContents(content::WebContents *); + QSharedPointer<JavaScriptDialogController> takeDialogForContents(content::WebContents *); private: QMap<content::WebContents *, QSharedPointer<JavaScriptDialogController> > m_activeDialogs; |