diff options
author | Milian Wolff <milian.wolff@kdab.com> | 2018-04-16 23:41:46 +0200 |
---|---|---|
committer | Milian Wolff <milian.wolff@kdab.com> | 2019-03-25 20:30:09 +0000 |
commit | 984c4e6b4dd05561bb39f6daf305e520dfa9f0e6 (patch) | |
tree | c061038b12c5e3e7c4b2034c27cbde09362dd206 /src | |
parent | 7a673eb1a6902ef6f2eb03d6beab139282b1e4a5 (diff) | |
download | qtwebchannel-984c4e6b4dd05561bb39f6daf305e520dfa9f0e6.tar.gz |
Always rebuild the class info for wrapped objects
When a new transport is accessing a previously wrapped object, we used
to send potentially outdated property values.
[ChangeLog][QWebChannel][General] Send current property values when
another transport is accessing a previously wrapped object.
Fixes: QTBUG-62388
Change-Id: I5cd5772b42c3cb9860e945bb85f77f0e3b6d6ea0
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 6 | ||||
-rw-r--r-- | src/webchannel/qmetaobjectpublisher_p.h | 7 |
2 files changed, 4 insertions, 9 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index 3c1d030..b0581c4 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -492,7 +492,7 @@ QObject *QMetaObjectPublisher::unwrapObject(const QString &objectId) const { if (!objectId.isEmpty()) { ObjectInfo objectInfo = wrappedObjects.value(objectId); - if (objectInfo.object && !objectInfo.classinfo.isEmpty()) + if (objectInfo.object) return objectInfo.object; QObject *object = registeredObjects.value(objectId); if (object) @@ -577,7 +577,7 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA classInfo = classInfoForObject(object, transport); - ObjectInfo oi(object, classInfo); + ObjectInfo oi(object); if (transport) { oi.transports.append(transport); } else { @@ -598,7 +598,7 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA wrappedObjects[id].transports.append(transport); transportedWrappedObjects.insert(transport, id); } - classInfo = wrappedObjects.value(id).classinfo; + classInfo = classInfoForObject(object, transport); } QJsonObject objectInfo; diff --git a/src/webchannel/qmetaobjectpublisher_p.h b/src/webchannel/qmetaobjectpublisher_p.h index 1535a70..23a9b96 100644 --- a/src/webchannel/qmetaobjectpublisher_p.h +++ b/src/webchannel/qmetaobjectpublisher_p.h @@ -256,15 +256,10 @@ private: // Groups individually wrapped objects with their class information and the transports that have access to it. struct ObjectInfo { - ObjectInfo() - : object(Q_NULLPTR) - {} - ObjectInfo(QObject *o, const QJsonObject &i) + ObjectInfo(QObject *o = nullptr) : object(o) - , classinfo(i) {} QObject *object; - QJsonObject classinfo; QVector<QWebChannelAbstractTransport*> transports; }; |