summaryrefslogtreecommitdiffstats
path: root/src/network/access/qnetworkreplywasmimpl.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2019-06-14 11:56:56 +0200
committerLiang Qi <liang.qi@qt.io>2019-06-14 13:45:18 +0200
commitb1a216649ec064412160638dd00195cd47c567aa (patch)
treea4134415a3849cfb857942e698514be9da18924f /src/network/access/qnetworkreplywasmimpl.cpp
parent2e20ae3c1b57169497f6f3904623be4f5e617e12 (diff)
parent1632786f00875d23c7d111cbb29dedaa35c1c8c2 (diff)
Merge remote-tracking branch 'origin/5.13' into dev
Conflicts: qmake/generators/makefile.cpp qmake/generators/unix/unixmake2.cpp src/corelib/thread/qthread_unix.cpp tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp Change-Id: I1df0d4ba20685de7f9300bf07458c13376493408
Diffstat (limited to 'src/network/access/qnetworkreplywasmimpl.cpp')
-rw-r--r--src/network/access/qnetworkreplywasmimpl.cpp53
1 files changed, 43 insertions, 10 deletions
diff --git a/src/network/access/qnetworkreplywasmimpl.cpp b/src/network/access/qnetworkreplywasmimpl.cpp
index 9f8a42ad89..9f6422a107 100644
--- a/src/network/access/qnetworkreplywasmimpl.cpp
+++ b/src/network/access/qnetworkreplywasmimpl.cpp
@@ -59,6 +59,9 @@ using namespace emscripten;
static void q_requestErrorCallback(val event)
{
+ if (event.isNull() || event.isUndefined())
+ return;
+
val xhr = event["target"];
quintptr func = xhr["data-handler"].as<quintptr>();
@@ -77,19 +80,24 @@ static void q_requestErrorCallback(val event)
static void q_progressCallback(val event)
{
+ if (event.isNull() || event.isUndefined())
+ return;
+
val xhr = event["target"];
QNetworkReplyWasmImplPrivate *reply =
reinterpret_cast<QNetworkReplyWasmImplPrivate*>(xhr["data-handler"].as<quintptr>());
Q_ASSERT(reply);
- if (xhr["lengthComputable"].as<bool>() && xhr["status"].as<int>() < 400)
- reply->emitDataReadProgress(xhr["loaded"].as<qint64>(), xhr["total"].as<qint64>());
-
+ if (xhr["status"].as<int>() < 400)
+ reply->emitDataReadProgress(event["loaded"].as<int>(), event["total"].as<int>());
}
static void q_loadCallback(val event)
{
+ if (event.isNull() || event.isUndefined())
+ return;
+
val xhr = event["target"];
QNetworkReplyWasmImplPrivate *reply =
@@ -121,6 +129,7 @@ static void q_loadCallback(val event)
reader.set("data-handler", xhr["data-handler"]);
reader.call<void>("readAsArrayBuffer", blob);
+ val::global("Module").delete_(reader);
}
@@ -136,6 +145,9 @@ static void q_loadCallback(val event)
static void q_responseHeadersCallback(val event)
{
+ if (event.isNull() || event.isUndefined())
+ return;
+
val xhr = event["target"];
if (xhr["readyState"].as<int>() == 2) { // HEADERS_RECEIVED
@@ -152,12 +164,18 @@ static void q_responseHeadersCallback(val event)
static void q_readBinary(val event)
{
+ if (event.isNull() || event.isUndefined())
+ return;
+
val fileReader = event["target"];
QNetworkReplyWasmImplPrivate *reply =
reinterpret_cast<QNetworkReplyWasmImplPrivate*>(fileReader["data-handler"].as<quintptr>());
Q_ASSERT(reply);
+ if (reply->state == QNetworkReplyPrivate::Finished || reply->state == QNetworkReplyPrivate::Aborted)
+ return;
+
// Set up source typed array
val result = fileReader["result"]; // ArrayBuffer
val Uint8Array = val::global("Uint8Array");
@@ -171,6 +189,10 @@ static void q_readBinary(val event)
reinterpret_cast<quintptr>(buffer.data()), size);
destinationTypedArray.call<void>("set", sourceTypedArray);
reply->dataReceived(buffer, buffer.size());
+
+ event.delete_(fileReader);
+ Uint8Array.delete_(sourceTypedArray);
+
QCoreApplication::processEvents();
}
@@ -194,14 +216,21 @@ QNetworkReplyWasmImplPrivate::QNetworkReplyWasmImplPrivate()
QNetworkReplyWasmImplPrivate::~QNetworkReplyWasmImplPrivate()
{
+ m_xhr.set("onerror", val::null());
+ m_xhr.set("onload", val::null());
+ m_xhr.set("onprogress", val::null());
+ m_xhr.set("onreadystatechange", val::null());
+ m_xhr.set("data-handler", val::null());
}
-QNetworkReplyWasmImpl::~QNetworkReplyWasmImpl()
+QNetworkReplyWasmImpl::QNetworkReplyWasmImpl(QObject *parent)
+ : QNetworkReply(*new QNetworkReplyWasmImplPrivate(), parent)
{
+ Q_D( QNetworkReplyWasmImpl);
+ d->state = QNetworkReplyPrivate::Idle;
}
-QNetworkReplyWasmImpl::QNetworkReplyWasmImpl(QObject *parent)
- : QNetworkReply(*new QNetworkReplyWasmImplPrivate(), parent)
+QNetworkReplyWasmImpl::~QNetworkReplyWasmImpl()
{
}
@@ -226,19 +255,23 @@ QByteArray QNetworkReplyWasmImpl::methodName() const
void QNetworkReplyWasmImpl::close()
{
+ QNetworkReply::close();
setFinished(true);
emit finished();
-
- QNetworkReply::close();
}
void QNetworkReplyWasmImpl::abort()
{
- Q_D(const QNetworkReplyWasmImpl);
- setError( QNetworkReply::OperationCanceledError, QStringLiteral("Operation canceled"));
+ Q_D( QNetworkReplyWasmImpl);
+ if (d->state == QNetworkReplyPrivate::Finished || d->state == QNetworkReplyPrivate::Aborted)
+ return;
+
+ setError(QNetworkReply::OperationCanceledError, QStringLiteral("Operation canceled"));
+
d->doAbort();
close();
+ d->state = QNetworkReplyPrivate::Aborted;
}
qint64 QNetworkReplyWasmImpl::bytesAvailable() const