summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/webchannel/qmetaobjectpublisher.cpp8
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp16
-rw-r--r--tests/auto/webchannel/tst_webchannel.h1
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();