summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMilian Wolff <milian.wolff@kdab.com>2018-04-16 23:41:46 +0200
committerMilian Wolff <milian.wolff@kdab.com>2019-03-25 20:30:09 +0000
commit984c4e6b4dd05561bb39f6daf305e520dfa9f0e6 (patch)
treec061038b12c5e3e7c4b2034c27cbde09362dd206 /src
parent7a673eb1a6902ef6f2eb03d6beab139282b1e4a5 (diff)
downloadqtwebchannel-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.cpp6
-rw-r--r--src/webchannel/qmetaobjectpublisher_p.h7
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;
};