summaryrefslogtreecommitdiffstats
path: root/src/core/javascript_dialog_manager_qt.cpp
diff options
context:
space:
mode:
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();
}