diff options
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 6 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 30 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 1 |
3 files changed, 36 insertions, 1 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index 102cbda..e23921d 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -739,15 +739,19 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA ObjectInfo oi(object); if (transport) { oi.transports.append(transport); + transportedWrappedObjects.insert(transport, id); } else { // use the transports from the parent object oi.transports = wrappedObjects.value(parentObjectId).transports; // or fallback to all transports if the parent is not wrapped if (oi.transports.isEmpty()) oi.transports = webChannel->d_func()->transports; + + for (auto transport : qAsConst(oi.transports)) { + transportedWrappedObjects.insert(transport, id); + } } wrappedObjects.insert(id, oi); - transportedWrappedObjects.insert(transport, id); initializePropertyUpdates(object, classInfo); } else if (wrappedObjects.contains(id)) { diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index ffaebba..4a66bdd 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -757,6 +757,36 @@ void TestWebChannel::testUnwrapObject() } } +void TestWebChannel::testTransportWrapObjectProperties() +{ + QWebChannel channel; + + TestObject obj; + obj.setObjectName("testObject"); + channel.registerObject(obj.objectName(), &obj); + + DummyTransport *dummyTransport = new DummyTransport(this); + channel.connectTo(dummyTransport); + channel.d_func()->publisher->initializeClient(dummyTransport); + channel.d_func()->publisher->setClientIsIdle(true); + + QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.size(), 0); + + QObject objPropObject; + objPropObject.setObjectName("foobar"); + + obj.setObjectProperty(&objPropObject); + + channel.d_func()->publisher->sendPendingPropertyUpdates(); + + QCOMPARE(channel.d_func()->publisher->wrappedObjects.size(), 1); + const QString wrappedObjId = channel.d_func()->publisher->wrappedObjects.keys()[0]; + + QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.size(), 1); + QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.keys()[0], dummyTransport); + QCOMPARE(channel.d_func()->publisher->transportedWrappedObjects.values()[0], wrappedObjId); +} + void TestWebChannel::testRemoveUnusedTransports() { QWebChannel channel; diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index 8ca1cdd..7cfce06 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -327,6 +327,7 @@ private slots: void testDisconnect(); void testWrapRegisteredObject(); void testUnwrapObject(); + void testTransportWrapObjectProperties(); void testRemoveUnusedTransports(); void testPassWrappedObjectBack(); void testWrapValues(); |