4#include <private/qqmlengine_p.h>
5#include <private/qqmlextensionplugin_p.h>
6#include <private/qqmltypeloaderthread_p.h>
8#if QT_CONFIG(qml_network)
9#include <private/qqmltypeloadernetworkreplyproxy_p.h>
14QQmlTypeLoaderThread::QQmlTypeLoaderThread(QQmlTypeLoader *loader)
19QQmlTypeLoaderThread::~QQmlTypeLoaderThread()
22#if QT_CONFIG(qml_type_loader_thread)
23 Q_ASSERT(!thread()->isRunning());
31#if QT_CONFIG(qml_network)
32QNetworkAccessManager *QQmlTypeLoaderThread::networkAccessManager()
const
34 Q_ASSERT(isThisThread());
35 if (!m_networkAccessManager) {
36 m_networkAccessManager = m_loader->createNetworkAccessManager(
nullptr);
37 QObject::connect(thread(), &QThread::finished, m_networkAccessManager, &QObject::deleteLater);
38 m_networkReplyProxy =
new QQmlTypeLoaderNetworkReplyProxy(m_loader, threadObject());
39 QObject::connect(thread(), &QThread::finished, m_networkReplyProxy, &QObject::deleteLater);
42 return m_networkAccessManager;
45QQmlTypeLoaderNetworkReplyProxy *QQmlTypeLoaderThread::networkReplyProxy()
const
47 Q_ASSERT(isThisThread());
48 Q_ASSERT(m_networkReplyProxy);
49 return m_networkReplyProxy;
53void QQmlTypeLoaderThread::load(
const QQmlDataBlob::Ptr &b)
55 callMethodInThread(&This::loadThread, b);
58void QQmlTypeLoaderThread::loadAsync(
const QQmlDataBlob::Ptr &b)
60 postMethodToThread(&This::loadThread, b);
63void QQmlTypeLoaderThread::loadWithStaticData(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
65 callMethodInThread(&This::loadWithStaticDataThread, b, d);
68void QQmlTypeLoaderThread::loadWithStaticDataAsync(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
70 postMethodToThread(&This::loadWithStaticDataThread, b, d);
73void QQmlTypeLoaderThread::loadWithCachedUnit(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
75 callMethodInThread(&This::loadWithCachedUnitThread, b, unit);
78void QQmlTypeLoaderThread::loadWithCachedUnitAsync(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
80 postMethodToThread(&This::loadWithCachedUnitThread, b, unit);
83void QQmlTypeLoaderThread::callCompleted(
const QQmlDataBlob::Ptr &b)
85 postMethodToMain(&This::callCompletedMain, b);
88void QQmlTypeLoaderThread::callDownloadProgressChanged(
const QQmlDataBlob::Ptr &b, qreal p)
90 postMethodToMain(&This::callDownloadProgressChangedMain, b, p);
93void QQmlTypeLoaderThread::initializeEngine(QQmlExtensionInterface *iface,
96 callMethodInMain(&This::initializeExtensionMain, iface, uri);
99void QQmlTypeLoaderThread::initializeEngine(QQmlEngineExtensionInterface *iface,
102 callMethodInMain(&This::initializeEngineExtensionMain, iface, uri);
105void QQmlTypeLoaderThread::drop(
const QQmlDataBlob::Ptr &b)
107 postMethodToThread(&This::dropThread, b);
110void QQmlTypeLoaderThread::loadThread(
const QQmlDataBlob::Ptr &b)
112 m_loader->loadThread(b);
115void QQmlTypeLoaderThread::loadWithStaticDataThread(
const QQmlDataBlob::Ptr &b,
const QByteArray &d)
117 m_loader->loadWithStaticDataThread(b, d);
120void QQmlTypeLoaderThread::loadWithCachedUnitThread(
const QQmlDataBlob::Ptr &b,
const QQmlPrivate::CachedQmlUnit *unit)
122 m_loader->loadWithCachedUnitThread(b, unit);
125void QQmlTypeLoaderThread::callCompletedMain(
const QQmlDataBlob::Ptr &b)
128 qWarning(
"QQmlTypeLoaderThread: %s completed() callback", qPrintable(b->urlString()));
133void QQmlTypeLoaderThread::callDownloadProgressChangedMain(
const QQmlDataBlob::Ptr &b, qreal p)
136 qWarning(
"QQmlTypeLoaderThread: %s downloadProgressChanged(%f) callback",
137 qPrintable(b->urlString()), p);
139 b->downloadProgressChanged(p);
142void QQmlTypeLoaderThread::initializeExtensionMain(QQmlExtensionInterface *iface,
146 QQmlEngine *engine = m_loader->engine()->qmlEngine();
147 Q_ASSERT(engine && engine->thread() == QThread::currentThread());
148 iface->initializeEngine(engine, uri);
151void QQmlTypeLoaderThread::initializeEngineExtensionMain(QQmlEngineExtensionInterface *iface,
155 QQmlEngine *engine = m_loader->engine()->qmlEngine();
156 Q_ASSERT(engine && engine->thread() == QThread::currentThread());
157 iface->initializeEngine(engine, uri);
160void QQmlTypeLoaderThread::dropThread(
const QQmlDataBlob::Ptr &b)