diff options
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 8 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 16 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 1 |
3 files changed, 23 insertions, 2 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index b34b39e..3b2c016 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -591,8 +591,12 @@ QJsonValue QMetaObjectPublisher::wrapResult(const QVariant &result, QWebChannelA } else if (wrappedObjects.contains(id)) { Q_ASSERT(object == wrappedObjects.value(id).object); // check if this transport is already assigned to the object - if (transport && !wrappedObjects.value(id).transports.contains(transport)) - wrappedObjects[id].transports.append(transport); + if (transport) { + if (!wrappedObjects.value(id).transports.contains(transport)) + wrappedObjects[id].transports.append(transport); + if (!transportedWrappedObjects.contains(transport, id)) + transportedWrappedObjects.insertMulti(transport, id); + } classInfo = wrappedObjects.value(id).classinfo; } diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index e46d097..57aab53 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -799,6 +799,22 @@ void TestWebChannel::testWrapValues() } } +void TestWebChannel::testWrapObjectWithMultipleTransports() +{ + QWebChannel channel; + QMetaObjectPublisher *pub = channel.d_func()->publisher; + + DummyTransport *dummyTransport = new DummyTransport(this); + DummyTransport *dummyTransport2 = new DummyTransport(this); + + TestObject obj; + + pub->wrapResult(QVariant::fromValue(&obj), dummyTransport); + pub->wrapResult(QVariant::fromValue(&obj), dummyTransport2); + + QCOMPARE(pub->transportedWrappedObjects.count(), 2); +} + void TestWebChannel::testJsonToVariant() { QWebChannel channel; diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index 40e6fba..3d725f4 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -315,6 +315,7 @@ private slots: void testRemoveUnusedTransports(); void testPassWrappedObjectBack(); void testWrapValues(); + void testWrapObjectWithMultipleTransports(); void testJsonToVariant(); void testInfiniteRecursion(); void testAsyncObject(); |