aboutsummaryrefslogtreecommitdiffstats
path: root/src/qmlworkerscript/qquickworkerscript.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qmlworkerscript/qquickworkerscript.cpp')
-rw-r--r--src/qmlworkerscript/qquickworkerscript.cpp30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/qmlworkerscript/qquickworkerscript.cpp b/src/qmlworkerscript/qquickworkerscript.cpp
index dbb8281a99..14cd783c32 100644
--- a/src/qmlworkerscript/qquickworkerscript.cpp
+++ b/src/qmlworkerscript/qquickworkerscript.cpp
@@ -105,7 +105,11 @@ public:
WorkerDestroyEvent() : QEvent(QEvent::Type(WorkerEventType::Destroy)) {}
};
-struct WorkerScript : public QV4::ExecutionEngine::Deletable
+struct WorkerScript
+ : public QV4::ExecutionEngine::Deletable
+#if QT_CONFIG(qml_network)
+ , public QQmlNetworkAccessManagerFactory
+#endif
{
WorkerScript(QV4::ExecutionEngine *);
~WorkerScript() = default;
@@ -113,7 +117,7 @@ struct WorkerScript : public QV4::ExecutionEngine::Deletable
QQuickWorkerScriptEnginePrivate *p = nullptr;
QQuickWorkerScript *owner = nullptr;
#if QT_CONFIG(qml_network)
- QScopedPointer<QNetworkAccessManager> scriptLocalNAM;
+ QNetworkAccessManager *create(QObject *parent) final;
#endif
};
@@ -222,6 +226,10 @@ QV4::ExecutionEngine *QQuickWorkerScriptEnginePrivate::workerEngine(int id)
WorkerScript *script = workerScriptExtension(engine);
script->owner = owner;
script->p = this;
+#if QT_CONFIG(qml_network)
+ // Eagerly create a network access manager that can outlive the parent engine.
+ engine->getNetworkAccessManager();
+#endif
*it = engine;
return engine;
}
@@ -305,7 +313,7 @@ void QQuickWorkerScriptEnginePrivate::reportScriptException(WorkerScript *script
QQuickWorkerScriptEngine::QQuickWorkerScriptEngine(QQmlEngine *parent)
: QThread(parent)
- , d(new QQuickWorkerScriptEnginePrivate(&QQmlEnginePrivate::get(parent)->typeLoader))
+ , d(new QQuickWorkerScriptEnginePrivate(QQmlTypeLoader::get(parent)))
{
connect(d, SIGNAL(stopThread()), this, SLOT(quit()), Qt::DirectConnection);
QMutexLocker locker(&d->m_lock);
@@ -348,17 +356,17 @@ WorkerScript::WorkerScript(QV4::ExecutionEngine *engine)
engine->globalObject->put(workerScriptName, api);
#if QT_CONFIG(qml_network)
- engine->networkAccessManager = [](QV4::ExecutionEngine *engine) {
- WorkerScript *workerScript = workerScriptExtension(engine);
- if (!workerScript->scriptLocalNAM) {
- workerScript->scriptLocalNAM.reset(
- workerScript->p->m_typeLoader->createNetworkAccessManager(workerScript->p));
- }
- return workerScript->scriptLocalNAM.get();
- };
+ engine->typeLoader()->setNetworkAccessManagerFactory(this);
#endif // qml_network
}
+#if QT_CONFIG(qml_network)
+QNetworkAccessManager *WorkerScript::create(QObject *parent)
+{
+ return p->m_typeLoader->createNetworkAccessManager(parent);
+}
+#endif
+
int QQuickWorkerScriptEngine::registerWorkerScript(QQuickWorkerScript *owner)
{
const int id = d->m_nextId++;