diff options
author | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-09-24 06:20:22 -0700 |
---|---|---|
committer | Szabolcs David <davidsz@inf.u-szeged.hu> | 2015-09-27 17:49:05 +0000 |
commit | 2080ac3ad0878dc04865bf957c84f8f0b5b551ac (patch) | |
tree | 45e0d3ec7b4fddfddb4427c640393b18d5897a64 /src | |
parent | e561b9a645a7f9f67f1c2cf3d267b27d66529eb9 (diff) |
Implement unload dialogs
This fixes the assertion that occurs when the application should
show "Are you sure you want to leave this page?" dialog. We can
reuse the already existing confirm dialog implementations.
Change-Id: I22466d450f39b54d9becbb69e1ecadb3b98697b0
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/javascript_dialog_manager_qt.cpp | 6 | ||||
-rw-r--r-- | src/core/javascript_dialog_manager_qt.h | 2 | ||||
-rw-r--r-- | src/core/web_contents_adapter_client.h | 1 | ||||
-rw-r--r-- | src/webengine/ui_delegates_manager.cpp | 4 | ||||
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 3 |
5 files changed, 15 insertions, 1 deletions
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp index fdcd7bdbc..24d426098 100644 --- a/src/core/javascript_dialog_manager_qt.cpp +++ b/src/core/javascript_dialog_manager_qt.cpp @@ -67,6 +67,12 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon runDialogForContents(webContents, dialogType, toQt(messageText).toHtmlEscaped(), toQt(defaultPromptText).toHtmlEscaped(), toQt(originUrl), callback); } +void JavaScriptDialogManagerQt::RunBeforeUnloadDialog(content::WebContents *webContents, const base::string16 &messageText, + bool isReload, const content::JavaScriptDialogManager::DialogClosedCallback &callback) { + Q_UNUSED(isReload); + runDialogForContents(webContents, WebContentsAdapterClient::UnloadDialog, toQt(messageText).toHtmlEscaped(), QString() , QUrl(), callback); +} + bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *contents, bool accept, const base::string16 *promptOverride) { QSharedPointer<JavaScriptDialogController> dialog = m_activeDialogs.value(contents); diff --git a/src/core/javascript_dialog_manager_qt.h b/src/core/javascript_dialog_manager_qt.h index 8bf7ac6b9..fb47166c1 100644 --- a/src/core/javascript_dialog_manager_qt.h +++ b/src/core/javascript_dialog_manager_qt.h @@ -63,7 +63,7 @@ public: const content::JavaScriptDialogManager::DialogClosedCallback &callback, bool *didSuppressMessage) Q_DECL_OVERRIDE; 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); } + const content::JavaScriptDialogManager::DialogClosedCallback &callback) Q_DECL_OVERRIDE; virtual bool HandleJavaScriptDialog(content::WebContents *, bool accept, const base::string16 *promptOverride) Q_DECL_OVERRIDE; virtual void CancelActiveAndPendingDialogs(content::WebContents *contents) Q_DECL_OVERRIDE { takeDialogForContents(contents); } virtual void ResetDialogState(content::WebContents *contents) Q_DECL_OVERRIDE { takeDialogForContents(contents); } diff --git a/src/core/web_contents_adapter_client.h b/src/core/web_contents_adapter_client.h index 3ae84f9c8..2b9b62229 100644 --- a/src/core/web_contents_adapter_client.h +++ b/src/core/web_contents_adapter_client.h @@ -147,6 +147,7 @@ public: AlertDialog, ConfirmDialog, PromptDialog, + UnloadDialog, // Leave room for potential new specs InternalAuthorizationDialog = 0x10, }; diff --git a/src/webengine/ui_delegates_manager.cpp b/src/webengine/ui_delegates_manager.cpp index 5a5c261b4..4cc64c8c7 100644 --- a/src/webengine/ui_delegates_manager.cpp +++ b/src/webengine/ui_delegates_manager.cpp @@ -259,6 +259,10 @@ void UIDelegatesManager::showDialog(QSharedPointer<JavaScriptDialogController> d dialogComponentType = PromptDialog; title = QCoreApplication::translate("UIDelegatesManager", "Javascript Prompt - %1").arg(m_view->url().toString()); break; + case WebContentsAdapterClient::UnloadDialog: + dialogComponentType = ConfirmDialog; + title = QCoreApplication::translate("UIDelegatesManager", "Are you sure you want to leave this page?"); + break; case WebContentsAdapterClient::InternalAuthorizationDialog: dialogComponentType = ConfirmDialog; title = dialogController->title(); diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index 677f67cbe..5d91b3b7f 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -904,6 +904,9 @@ void QWebEnginePagePrivate::javascriptDialog(QSharedPointer<JavaScriptDialogCont if (accepted) controller->textProvided(promptResult); break; + case UnloadDialog: + accepted = (QMessageBox::information(view, QCoreApplication::translate("QWebEnginePage", "Are you sure you want to leave this page?"), controller->message(), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes); + break; case InternalAuthorizationDialog: accepted = (QMessageBox::question(view, controller->title(), controller->message(), QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes); break; |