summaryrefslogtreecommitdiffstats
path: root/src/core/api
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-06-04 11:07:25 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-06-18 00:59:32 +0000
commit75522d57a8a8d4d038dc5c0954ce823f290ca7e7 (patch)
tree08f24915b696402fc45dc095e288f509750b3081 /src/core/api
parent267ea323460766b146cf68d8446b8ea7c45f754f (diff)
Switch QWebEngineCallbacks in QWebEnginePage to std::function
Change-Id: I5b0c1c7ef0966c3cff79184aa0733b59208d6890 Reviewed-by: Michal Klocek <michal.klocek@qt.io> (cherry picked from commit 566a4df270911e1656efef5dbb16e4f95bf6ca8d) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/core/api')
-rw-r--r--src/core/api/qwebenginepage.cpp70
-rw-r--r--src/core/api/qwebenginepage.h9
-rw-r--r--src/core/api/qwebenginepage_p.h4
3 files changed, 52 insertions, 31 deletions
diff --git a/src/core/api/qwebenginepage.cpp b/src/core/api/qwebenginepage.cpp
index 499343bb3..6b66a0d70 100644
--- a/src/core/api/qwebenginepage.cpp
+++ b/src/core/api/qwebenginepage.cpp
@@ -40,14 +40,8 @@
#include "qwebenginepage.h"
#include "qwebenginepage_p.h"
-#include "qwebenginedownloadrequest_p.h"
-#include "authentication_dialog_controller.h"
-#include "profile_adapter.h"
-#include "color_chooser_controller.h"
-#include "find_text_helper.h"
-#include "file_picker_controller.h"
-#include "javascript_dialog_controller.h"
#include "qwebenginecertificateerror.h"
+#include "qwebenginedownloadrequest_p.h"
#include "qwebenginefindtextresult.h"
#include "qwebenginefullscreenrequest.h"
#include "qwebenginehistory.h"
@@ -60,15 +54,23 @@
#include "qwebengineprofile_p.h"
#include "qwebenginequotarequest.h"
#include "qwebengineregisterprotocolhandlerrequest.h"
+#include "qwebenginescript.h"
#include "qwebenginescriptcollection_p.h"
#include "qwebenginesettings.h"
-#include "user_notification_controller.h"
+
+#include "authentication_dialog_controller.h"
+#include "color_chooser_controller.h"
+#include "find_text_helper.h"
+#include "file_picker_controller.h"
+#include "javascript_dialog_controller.h"
+#include "profile_adapter.h"
+#include "render_view_context_menu_qt.h"
#include "render_widget_host_view_qt_delegate.h"
+#include "render_widget_host_view_qt_delegate_client.h"
+#include "user_notification_controller.h"
#include "web_contents_adapter.h"
#include "web_engine_settings.h"
-#include "qwebenginescript.h"
-#include "render_view_context_menu_qt.h"
-#include "render_widget_host_view_qt_delegate_client.h"
+
#include <QAction>
#include <QGuiApplication>
#include <QAuthenticator>
@@ -80,7 +82,6 @@
#include <QTimer>
#include <QUrl>
-
QT_BEGIN_NAMESPACE
using namespace QtWebEngineCore;
@@ -456,17 +457,20 @@ void QWebEnginePagePrivate::windowCloseRejected()
void QWebEnginePagePrivate::didRunJavaScript(quint64 requestId, const QVariant& result)
{
- m_callbacks.invoke(requestId, result);
+ if (auto callback = m_variantCallbacks.take(requestId))
+ callback(result);
}
void QWebEnginePagePrivate::didFetchDocumentMarkup(quint64 requestId, const QString& result)
{
- m_callbacks.invoke(requestId, result);
+ if (auto callback = m_stringCallbacks.take(requestId))
+ callback(result);
}
void QWebEnginePagePrivate::didFetchDocumentInnerText(quint64 requestId, const QString& result)
{
- m_callbacks.invoke(requestId, result);
+ if (auto callback = m_stringCallbacks.take(requestId))
+ callback(result);
}
void QWebEnginePagePrivate::didPrintPage(quint64 requestId, QSharedPointer<QByteArray> result)
@@ -883,6 +887,13 @@ QWebEnginePage::~QWebEnginePage()
// d_ptr might be exceptionally null if profile adapter got deleted first
setDevToolsPage(nullptr);
emit _q_aboutToDelete();
+
+ for (auto varFun : qAsConst(d_ptr->m_variantCallbacks))
+ varFun(QVariant());
+ for (auto strFun : qAsConst(d_ptr->m_stringCallbacks))
+ strFun(QString());
+ d_ptr->m_variantCallbacks.clear();
+ d_ptr->m_stringCallbacks.clear();
}
}
@@ -1902,20 +1913,20 @@ void QWebEnginePage::load(const QWebEngineHttpRequest& request)
d->adapter->load(request);
}
-void QWebEnginePage::toHtml(const QWebEngineCallback<const QString &> &resultCallback) const
+void QWebEnginePage::toHtml(const std::function<void(const QString &)> &resultCallback) const
{
Q_D(const QWebEnginePage);
d->ensureInitialized();
quint64 requestId = d->adapter->fetchDocumentMarkup();
- d->m_callbacks.registerCallback(requestId, resultCallback);
+ d->m_stringCallbacks.insert(requestId, resultCallback);
}
-void QWebEnginePage::toPlainText(const QWebEngineCallback<const QString &> &resultCallback) const
+void QWebEnginePage::toPlainText(const std::function<void(const QString &)> &resultCallback) const
{
Q_D(const QWebEnginePage);
d->ensureInitialized();
quint64 requestId = d->adapter->fetchDocumentInnerText();
- d->m_callbacks.registerCallback(requestId, resultCallback);
+ d->m_stringCallbacks.insert(requestId, resultCallback);
}
void QWebEnginePage::setHtml(const QString &html, const QUrl &baseUrl)
@@ -2019,32 +2030,43 @@ void QWebEnginePage::runJavaScript(const QString &scriptSource)
d->adapter->runJavaScript(scriptSource, QWebEngineScript::MainWorld);
}
-void QWebEnginePage::runJavaScript(const QString& scriptSource, const QWebEngineCallback<const QVariant &> &resultCallback)
+void QWebEnginePage::runJavaScript(const QString& scriptSource, const std::function<void(const QVariant &)> &resultCallback)
{
Q_D(QWebEnginePage);
d->ensureInitialized();
if (d->adapter->lifecycleState() == WebContentsAdapter::LifecycleState::Discarded) {
qWarning("runJavaScript: disabled in Discarded state");
- d->m_callbacks.invokeEmpty(resultCallback);
+ if (resultCallback)
+ resultCallback(QVariant());
return;
}
quint64 requestId = d->adapter->runJavaScriptCallbackResult(scriptSource, QWebEngineScript::MainWorld);
- d->m_callbacks.registerCallback(requestId, resultCallback);
+ d->m_variantCallbacks.insert(requestId, resultCallback);
}
void QWebEnginePage::runJavaScript(const QString &scriptSource, quint32 worldId)
{
Q_D(QWebEnginePage);
d->ensureInitialized();
+ if (d->adapter->lifecycleState() == WebContentsAdapter::LifecycleState::Discarded) {
+ qWarning("runJavaScript: disabled in Discarded state");
+ return;
+ }
d->adapter->runJavaScript(scriptSource, worldId);
}
-void QWebEnginePage::runJavaScript(const QString& scriptSource, quint32 worldId, const QWebEngineCallback<const QVariant &> &resultCallback)
+void QWebEnginePage::runJavaScript(const QString& scriptSource, quint32 worldId, const std::function<void(const QVariant &)> &resultCallback)
{
Q_D(QWebEnginePage);
d->ensureInitialized();
+ if (d->adapter->lifecycleState() == WebContentsAdapter::LifecycleState::Discarded) {
+ qWarning("runJavaScript: disabled in Discarded state");
+ if (resultCallback)
+ resultCallback(QVariant());
+ return;
+ }
quint64 requestId = d->adapter->runJavaScriptCallbackResult(scriptSource, worldId);
- d->m_callbacks.registerCallback(requestId, resultCallback);
+ d->m_variantCallbacks.insert(requestId, resultCallback);
}
/*!
diff --git a/src/core/api/qwebenginepage.h b/src/core/api/qwebenginepage.h
index ecf4e3307..f2ac8eb6c 100644
--- a/src/core/api/qwebenginepage.h
+++ b/src/core/api/qwebenginepage.h
@@ -43,7 +43,6 @@
#include <QtWebEngineCore/qtwebenginecoreglobal.h>
#include <QtWebEngineCore/qwebengineclientcertificateselection.h>
#include <QtWebEngineCore/qwebenginedownloadrequest.h>
-#include <QtWebEngineCore/qwebenginecallback.h>
#include <QtWebEngineCore/qwebenginehttprequest.h>
#include <QtCore/qobject.h>
@@ -271,8 +270,8 @@ public:
void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
void setContent(const QByteArray &data, const QString &mimeType = QString(), const QUrl &baseUrl = QUrl());
- void toHtml(const QWebEngineCallback<const QString &> &resultCallback) const;
- void toPlainText(const QWebEngineCallback<const QString &> &resultCallback) const;
+ void toHtml(const std::function<void(const QString &)> &resultCallback) const;
+ void toPlainText(const std::function<void(const QString &)> &resultCallback) const;
QString title() const;
void setUrl(const QUrl &url);
@@ -289,8 +288,8 @@ public:
void runJavaScript(const QString& scriptSource);
void runJavaScript(const QString& scriptSource, quint32 worldId);
- void runJavaScript(const QString& scriptSource, const QWebEngineCallback<const QVariant &> &resultCallback);
- void runJavaScript(const QString& scriptSource, quint32 worldId, const QWebEngineCallback<const QVariant &> &resultCallback);
+ void runJavaScript(const QString& scriptSource, const std::function<void(const QVariant &)> &resultCallback);
+ void runJavaScript(const QString& scriptSource, quint32 worldId, const std::function<void(const QVariant &)> &resultCallback);
QWebEngineScriptCollection &scripts();
QWebEngineSettings *settings() const;
diff --git a/src/core/api/qwebenginepage_p.h b/src/core/api/qwebenginepage_p.h
index 46dcf2ce8..8aebc2951 100644
--- a/src/core/api/qwebenginepage_p.h
+++ b/src/core/api/qwebenginepage_p.h
@@ -53,7 +53,6 @@
#include "qwebenginepage.h"
-#include "qwebenginecallback_p.h"
#include "qwebenginescriptcollection.h"
#include "web_contents_adapter_client.h"
@@ -226,7 +225,8 @@ public:
QTimer wasShownTimer;
QtWebEngineCore::RenderWidgetHostViewQtDelegateWidget *widget = nullptr;
- mutable QtWebEngineCore::CallbackDirectory m_callbacks;
+ mutable QMap<quint64, std::function<void(const QVariant &)>> m_variantCallbacks;
+ mutable QMap<quint64, std::function<void(const QString &)>> m_stringCallbacks;
mutable QAction *actions[QWebEnginePage::WebActionCount];
};