summaryrefslogtreecommitdiffstats
path: root/src/core/javascript_dialog_manager_qt.cpp
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-01-13 15:01:54 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-01-15 21:35:29 +0100
commit6f5850dd4f6c4cc253c48f41f59130aee5415591 (patch)
tree9f92f25e0e297cdc51e5dd8aed3b942413e6c917 /src/core/javascript_dialog_manager_qt.cpp
parente46886912858e9b233fb099bb211e288dd7d57b5 (diff)
JS dialogs in QtQuick
Refactor JavaScriptDialogManagerQt to support a Qt Quick dialogs friendly approach. Qt Quick dialogs are still missing a prompt, so we use a "handmade" one. This should be solved before 5.3 though. Change-Id: I965df66837b2e81d6e4618a8da1167a37661c26e Reviewed-by: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Diffstat (limited to 'src/core/javascript_dialog_manager_qt.cpp')
-rw-r--r--src/core/javascript_dialog_manager_qt.cpp31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/core/javascript_dialog_manager_qt.cpp b/src/core/javascript_dialog_manager_qt.cpp
index b2f6d86bc..f0b8c5485 100644
--- a/src/core/javascript_dialog_manager_qt.cpp
+++ b/src/core/javascript_dialog_manager_qt.cpp
@@ -41,6 +41,8 @@
#include "javascript_dialog_manager_qt.h"
+#include "javascript_dialog_controller.h"
+#include "javascript_dialog_controller_p.h"
#include "web_contents_adapter_client.h"
#include "web_contents_view_qt.h"
#include "type_conversion.h"
@@ -65,14 +67,31 @@ void JavaScriptDialogManagerQt::RunJavaScriptDialog(content::WebContents *webCon
return;
}
- QString promptInput;
WebContentsAdapterClient::JavascriptDialogType dialogType = static_cast<WebContentsAdapterClient::JavascriptDialogType>(javascriptMessageType);
- bool res = client->javascriptDialog(dialogType, toQt(messageText).toHtmlEscaped(), toQt(defaultPromptText).toHtmlEscaped(), &promptInput);
- callback.Run(res, toString16(promptInput));
+ JavaScriptDialogControllerPrivate *dialogData = new JavaScriptDialogControllerPrivate(dialogType, toQt(messageText).toHtmlEscaped()
+ , toQt(defaultPromptText).toHtmlEscaped(), callback, webContents);
+ QSharedPointer<JavaScriptDialogController> dialog(new JavaScriptDialogController(dialogData));
+
+ // We shouldn't get new dialogs for a given WebContents until we gave back a result.
+ Q_ASSERT(!m_activeDialogs.contains(webContents));
+ m_activeDialogs.insert(webContents, dialog);
+
+ client->javascriptDialog(dialog);
+}
+
+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();
+ dialog->d->dialogFinished(accept, promptOverride ? *promptOverride : base::string16());
+ return true;
}
-bool JavaScriptDialogManagerQt::HandleJavaScriptDialog(content::WebContents *, bool accept, const base::string16 *promptOverride)
+
+void JavaScriptDialogManagerQt::removeDialogForContents(content::WebContents *contents)
{
- // FIXME: We might need to keep a queue of modal dialogs in there and unqueue them...
- return false;
+ QSharedPointer<JavaScriptDialogController> dialog = m_activeDialogs.take(contents);
+ Q_EMIT dialog->dialogCloseRequested();
}