diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-06-04 11:07:25 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-06-18 00:59:32 +0000 |
commit | 75522d57a8a8d4d038dc5c0954ce823f290ca7e7 (patch) | |
tree | 08f24915b696402fc45dc095e288f509750b3081 /src/core/api | |
parent | 267ea323460766b146cf68d8446b8ea7c45f754f (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.cpp | 70 | ||||
-rw-r--r-- | src/core/api/qwebenginepage.h | 9 | ||||
-rw-r--r-- | src/core/api/qwebenginepage_p.h | 4 |
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]; }; |