diff options
| author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2025-08-06 13:11:09 +0200 |
|---|---|---|
| committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2025-08-26 08:46:13 +0200 |
| commit | b02b9fb4346bd99164256f43d02b4bd85637b11b (patch) | |
| tree | 3a5f1c263c9275d1de42c1c697e8f75d76e7c83e /src | |
| parent | 8768693c8d45d7c4d99ebc51f226d1baae7a1af1 (diff) | |
Remove unnecessary QQmlEngine usage
Reverts most of f5fbc34fc16fc9c6e7f7e8bbbf60f5b343b9466d, relying on
better implicit QML conversion since.
Fixes: QTBUG-138881
Pick-to: 6.10 6.9 6.8
Change-Id: Ic23579e421f737b9a4d85c7e4f1a4019323c4be9
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
11 files changed, 19 insertions, 174 deletions
diff --git a/src/core/api/qwebenginescriptcollection.h b/src/core/api/qwebenginescriptcollection.h index a2733f99a..82df7ab7d 100644 --- a/src/core/api/qwebenginescriptcollection.h +++ b/src/core/api/qwebenginescriptcollection.h @@ -35,7 +35,6 @@ private: friend class QWebEngineProfilePrivate; friend class QQuickWebEngineProfilePrivate; friend class QQuickWebEngineViewPrivate; - friend class QQuickWebEngineScriptCollectionPrivate; QWebEngineScriptCollection(QWebEngineScriptCollectionPrivate *); QScopedPointer<QWebEngineScriptCollectionPrivate> d; diff --git a/src/webenginequick/CMakeLists.txt b/src/webenginequick/CMakeLists.txt index 0476ba8be..12b3197d5 100644 --- a/src/webenginequick/CMakeLists.txt +++ b/src/webenginequick/CMakeLists.txt @@ -24,7 +24,7 @@ qt_internal_add_qml_module(WebEngineQuick api/qquickwebenginefaviconprovider_p_p.h api/qquickwebenginenewwindowrequest.cpp api/qquickwebenginenewwindowrequest_p.h api/qquickwebengineprofile.cpp api/qquickwebengineprofile.h api/qquickwebengineprofile_p.h - api/qquickwebenginescriptcollection.cpp api/qquickwebenginescriptcollection_p.h api/qquickwebenginescriptcollection_p_p.h + api/qquickwebenginescriptcollection.cpp api/qquickwebenginescriptcollection_p.h api/qquickwebenginesettings.cpp api/qquickwebenginesettings_p.h api/qquickwebenginesingleton.cpp api/qquickwebenginesingleton_p.h api/qquickwebenginetouchhandleprovider.cpp diff --git a/src/webenginequick/api/qquickwebengineforeigntypes_p.h b/src/webenginequick/api/qquickwebengineforeigntypes_p.h index c2892d33c..6e9484370 100644 --- a/src/webenginequick/api/qquickwebengineforeigntypes_p.h +++ b/src/webenginequick/api/qquickwebengineforeigntypes_p.h @@ -118,10 +118,10 @@ struct ForeignWebEngineScript { Q_GADGET QML_FOREIGN(QWebEngineScript) + QML_STRUCTURED_VALUE QML_NAMED_ELEMENT(webEngineScript) QML_ADDED_IN_VERSION(1, 1) QML_EXTRA_VERSION(2, 0) - QML_UNCREATABLE("") }; struct ForeignWebEngineHistory diff --git a/src/webenginequick/api/qquickwebengineprofile.cpp b/src/webenginequick/api/qquickwebengineprofile.cpp index 80e4ec5ac..51996b6d9 100644 --- a/src/webenginequick/api/qquickwebengineprofile.cpp +++ b/src/webenginequick/api/qquickwebengineprofile.cpp @@ -6,7 +6,6 @@ #include "qquickwebenginedownloadrequest.h" #include "qquickwebenginesettings_p.h" #include "qquickwebenginescriptcollection_p.h" -#include "qquickwebenginescriptcollection_p_p.h" #include "qquickwebengineview_p_p.h" #include "profile_adapter.h" @@ -23,7 +22,6 @@ #include <QtCore/qdir.h> #include <QtCore/qfileinfo.h> -#include <QtQml/qqmlcontext.h> #include <QtQml/qqmlengine.h> #include <QtQml/qqmlinfo.h> @@ -332,16 +330,12 @@ void QQuickWebEngineProfilePrivate::clearHttpCacheCompleted() QQuickWebEngineScriptCollection *QQuickWebEngineProfilePrivate::getUserScripts() { - Q_Q(QQuickWebEngineProfile); if (!m_scriptCollection) m_scriptCollection.reset( new QQuickWebEngineScriptCollection( - new QQuickWebEngineScriptCollectionPrivate( + new QWebEngineScriptCollection( new QWebEngineScriptCollectionPrivate( - m_profileAdapter->userResourceController())))); - - if (!m_scriptCollection->qmlEngine()) - m_scriptCollection->setQmlEngine(qmlEngine(q)); + profileAdapter()->userResourceController())))); return m_scriptCollection.data(); } @@ -1336,14 +1330,6 @@ QList<QWebEnginePermission> QQuickWebEngineProfile::listPermissionsForPermission return d->profileAdapter()->listPermissions(QUrl(), permissionType); } -void QQuickWebEngineProfile::ensureQmlContext(const QObject *object) -{ - if (!qmlContext(this)) { - auto engine = qmlEngine(object); - QQmlEngine::setContextForObject(this, new QQmlContext(engine, engine)); - } -} - QT_END_NAMESPACE #include "moc_qquickwebengineprofile.cpp" diff --git a/src/webenginequick/api/qquickwebengineprofile.h b/src/webenginequick/api/qquickwebengineprofile.h index 0995538be..b4e623cbc 100644 --- a/src/webenginequick/api/qquickwebengineprofile.h +++ b/src/webenginequick/api/qquickwebengineprofile.h @@ -168,7 +168,6 @@ private: Q_DECLARE_PRIVATE(QQuickWebEngineProfile) QQuickWebEngineProfile(QQuickWebEngineProfilePrivate *, QObject *parent = nullptr); QQuickWebEngineSettings *settings() const; - void ensureQmlContext(const QObject *object); friend class FaviconImageRequester; friend class QQuickWebEngineSingleton; diff --git a/src/webenginequick/api/qquickwebengineprofileprototype.cpp b/src/webenginequick/api/qquickwebengineprofileprototype.cpp index d32d63ce7..dcd8f2b9e 100644 --- a/src/webenginequick/api/qquickwebengineprofileprototype.cpp +++ b/src/webenginequick/api/qquickwebengineprofileprototype.cpp @@ -336,7 +336,6 @@ void QQuickWebEngineProfilePrototype::componentComplete() d_ptr->profile.reset(new QQuickWebEngineProfile( new QQuickWebEngineProfilePrivate(profileAdapter), this->parent())); - d_ptr->profile->ensureQmlContext(this); d_ptr->m_isComponentComplete = true; } diff --git a/src/webenginequick/api/qquickwebenginescriptcollection.cpp b/src/webenginequick/api/qquickwebenginescriptcollection.cpp index 546633fb1..2283291c8 100644 --- a/src/webenginequick/api/qquickwebenginescriptcollection.cpp +++ b/src/webenginequick/api/qquickwebenginescriptcollection.cpp @@ -2,11 +2,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include "qquickwebenginescriptcollection_p.h" -#include "qquickwebenginescriptcollection_p_p.h" #include <QtWebEngineCore/qwebenginescriptcollection.h> #include <QtWebEngineCore/private/qwebenginescriptcollection_p.h> -#include <QtQml/qqmlinfo.h> -#include <QtQml/qqmlengine.h> /*! \qmltype WebEngineScriptCollection @@ -63,52 +60,8 @@ */ -QWebEngineScript parseScript(const QJSValue &value, bool *ok) -{ - QWebEngineScript s; - if (ok) - *ok = false; - - if (value.isObject()) { - - if (value.hasProperty(QStringLiteral("name"))) - s.setName(value.property(QStringLiteral("name")).toString()); - - if (value.hasProperty(QStringLiteral("sourceUrl"))) - s.setSourceUrl(value.property(QStringLiteral("sourceUrl")).toString()); - - if (value.hasProperty(QStringLiteral("injectionPoint"))) - s.setInjectionPoint(QWebEngineScript::InjectionPoint( - value.property(QStringLiteral("injectionPoint")).toUInt())); - - if (value.hasProperty(QStringLiteral("sourceCode"))) - s.setSourceCode(value.property(QStringLiteral("sourceCode")).toString()); - - if (value.hasProperty(QStringLiteral("worldId"))) - s.setWorldId(QWebEngineScript::ScriptWorldId( - value.property(QStringLiteral("worldId")).toUInt())); - - if (value.hasProperty(QStringLiteral("runOnSubframes"))) - s.setRunsOnSubFrames(value.property(QStringLiteral("runOnSubframes")).toBool()); - - if (ok) - *ok = true; - } - return s; -} - -QQuickWebEngineScriptCollectionPrivate::QQuickWebEngineScriptCollectionPrivate(QWebEngineScriptCollectionPrivate *p) - : QWebEngineScriptCollection(p) -{ - -} - -QQuickWebEngineScriptCollectionPrivate::~QQuickWebEngineScriptCollectionPrivate() -{ -} - -QQuickWebEngineScriptCollection::QQuickWebEngineScriptCollection(QQuickWebEngineScriptCollectionPrivate *p) - : d(p) +QQuickWebEngineScriptCollection::QQuickWebEngineScriptCollection(QWebEngineScriptCollection *collection) + : d(collection) { } @@ -188,37 +141,13 @@ void QQuickWebEngineScriptCollection::clear() This property holds a JavaScript array of user script objects. The array can take webEngineScript basic type or a JavaScript dictionary as values. */ -QJSValue QQuickWebEngineScriptCollection::collection() const +QList<QWebEngineScript> QQuickWebEngineScriptCollection::collection() const { - if (!d->m_qmlEngine) { - qmlWarning(this) << "Scripts collection doesn't have QML engine set! Undefined value is returned."; - return QJSValue(); - } - - const QList<QWebEngineScript> &list = d->toList(); - QJSValue scriptArray = d->m_qmlEngine->newArray(list.size()); - uint32_t i = 0; - for (const auto &val : list) - scriptArray.setProperty(i++, d->m_qmlEngine->toScriptValue(val)); - return scriptArray; + return d->toList(); } -void QQuickWebEngineScriptCollection::setCollection(const QJSValue &scripts) +void QQuickWebEngineScriptCollection::setCollection(const QList<QWebEngineScript> &scriptList) { - if (!scripts.isArray()) - return; - - QList<QWebEngineScript> scriptList; - quint32 length = scripts.property(QStringLiteral("length")).toUInt(); - for (quint32 i = 0; i < length; ++i) { - bool ok; - QWebEngineScript s = parseScript(scripts.property(i), &ok); - if (!ok) { - qmlWarning(this) << "Unsupported script type"; - return; - } - scriptList.append(s); - } if (scriptList != d->toList()) { clear(); insert(scriptList); @@ -226,14 +155,4 @@ void QQuickWebEngineScriptCollection::setCollection(const QJSValue &scripts) } } -QQmlEngine* QQuickWebEngineScriptCollection::qmlEngine() -{ - return d->m_qmlEngine; -} - -void QQuickWebEngineScriptCollection::setQmlEngine(QQmlEngine *engine) -{ - Q_ASSERT(engine); - d->m_qmlEngine = engine; -} #include "moc_qquickwebenginescriptcollection_p.cpp" diff --git a/src/webenginequick/api/qquickwebenginescriptcollection_p.h b/src/webenginequick/api/qquickwebenginescriptcollection_p.h index fbcc8dde7..0807283e7 100644 --- a/src/webenginequick/api/qquickwebenginescriptcollection_p.h +++ b/src/webenginequick/api/qquickwebenginescriptcollection_p.h @@ -18,19 +18,18 @@ #include <QtCore/qlist.h> #include <QtCore/qobject.h> #include <QtCore/qscopedpointer.h> -#include <QtQml/qjsvalue.h> +#include <QtCore/qvariant.h> #include <QtWebEngineCore/qwebenginescript.h> #include <QtWebEngineQuick/private/qtwebenginequickglobal_p.h> QT_BEGIN_NAMESPACE -class QQmlEngine; -class QQuickWebEngineScriptCollectionPrivate; +class QWebEngineScriptCollection; class Q_WEBENGINEQUICK_EXPORT QQuickWebEngineScriptCollection : public QObject { Q_OBJECT public: - Q_PROPERTY(QJSValue collection READ collection WRITE setCollection NOTIFY collectionChanged) + Q_PROPERTY(QList<QWebEngineScript> collection READ collection WRITE setCollection NOTIFY collectionChanged) ~QQuickWebEngineScriptCollection(); Q_INVOKABLE bool contains(const QWebEngineScript &value) const; @@ -40,20 +39,18 @@ public: Q_INVOKABLE bool remove(const QWebEngineScript &); Q_INVOKABLE void clear(); - QJSValue collection() const; - void setCollection(const QJSValue &scripts); + QList<QWebEngineScript> collection() const; + void setCollection(const QList<QWebEngineScript> &scripts); Q_SIGNALS: void collectionChanged(); private: Q_DISABLE_COPY(QQuickWebEngineScriptCollection) - QQuickWebEngineScriptCollection(QQuickWebEngineScriptCollectionPrivate *d); - QScopedPointer<QQuickWebEngineScriptCollectionPrivate> d; + QQuickWebEngineScriptCollection(QWebEngineScriptCollection *d); + QScopedPointer<QWebEngineScriptCollection> d; friend class QQuickWebEngineProfilePrivate; friend class QQuickWebEngineViewPrivate; - QQmlEngine* qmlEngine(); - void setQmlEngine(QQmlEngine *engine); }; QT_END_NAMESPACE diff --git a/src/webenginequick/api/qquickwebenginescriptcollection_p_p.h b/src/webenginequick/api/qquickwebenginescriptcollection_p_p.h deleted file mode 100644 index 54a9bc16d..000000000 --- a/src/webenginequick/api/qquickwebenginescriptcollection_p_p.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (C) 2022 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only - -#ifndef QQUICKWEBENGINESCRIPTCOLLECTIONPRIVATE_H -#define QQUICKWEBENGINESCRIPTCOLLECTIONPRIVATE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include <QtWebEngineCore/qwebenginescriptcollection.h> - -#include <QPointer> - -QT_BEGIN_NAMESPACE - -class QQmlEngine; - -class QQuickWebEngineScriptCollectionPrivate : public QWebEngineScriptCollection -{ -public: - QQuickWebEngineScriptCollectionPrivate(QWebEngineScriptCollectionPrivate *d); - ~QQuickWebEngineScriptCollectionPrivate(); - - Q_DISABLE_COPY(QQuickWebEngineScriptCollectionPrivate) - QPointer<QQmlEngine> m_qmlEngine; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/webenginequick/api/qquickwebenginesingleton.cpp b/src/webenginequick/api/qquickwebenginesingleton.cpp index 215d46896..45f306820 100644 --- a/src/webenginequick/api/qquickwebenginesingleton.cpp +++ b/src/webenginequick/api/qquickwebenginesingleton.cpp @@ -54,13 +54,7 @@ QQuickWebEngineSettings *QQuickWebEngineSingleton::settings() const */ QQuickWebEngineProfile *QQuickWebEngineSingleton::defaultProfile() const { - auto profile = QQuickWebEngineProfile::defaultProfile(); - - // MEMO first ever call to default profile will create one without context - // it needs something to get qml engine from (WebEngine singleton is created in qml land) - profile->ensureQmlContext(this); - - return profile; + return QQuickWebEngineProfile::defaultProfile(); } /*! diff --git a/src/webenginequick/api/qquickwebengineview.cpp b/src/webenginequick/api/qquickwebengineview.cpp index 619cbaef6..8d95e9239 100644 --- a/src/webenginequick/api/qquickwebengineview.cpp +++ b/src/webenginequick/api/qquickwebengineview.cpp @@ -10,7 +10,6 @@ #include "qquickwebengineprofile.h" #include "qquickwebengineprofile_p.h" #include "qquickwebenginescriptcollection_p.h" -#include "qquickwebenginescriptcollection_p_p.h" #include "qquickwebenginesettings_p.h" #include "qquickwebenginetouchhandleprovider_p_p.h" #include "qquickwebenginetouchhandle_p.h" @@ -345,14 +344,9 @@ void QQuickWebEngineViewPrivate::initializeProfile() Q_ASSERT(!adapter->isInitialized()); m_profileInitialized = true; - if (!m_profile) { + if (!m_profile) m_profile = QQuickWebEngineProfile::defaultProfile(); - // MEMO first ever call to default profile will create one without context - // it needs something to get qml engine from (and view is created in qml land) - m_profile->ensureQmlContext(q_ptr); - } - m_profile->d_ptr->addWebContentsAdapterClient(this); m_settings.reset(new QQuickWebEngineSettings(m_profile->settings())); adapter->setClient(this); @@ -1161,17 +1155,13 @@ void QQuickWebEngineViewPrivate::updateEditActions() QQuickWebEngineScriptCollection *QQuickWebEngineViewPrivate::getUserScripts() { - Q_Q(QQuickWebEngineView); if (!m_scriptCollection) m_scriptCollection.reset( new QQuickWebEngineScriptCollection( - new QQuickWebEngineScriptCollectionPrivate( + new QWebEngineScriptCollection( new QWebEngineScriptCollectionPrivate( profileAdapter()->userResourceController(), adapter)))); - if (!m_scriptCollection->qmlEngine()) - m_scriptCollection->setQmlEngine(qmlEngine(q)); - return m_scriptCollection.data(); } |
