aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/webchannel/qmetaobjectpublisher.cpp3
-rw-r--r--tests/auto/webchannel/tst_webchannel.cpp19
-rw-r--r--tests/auto/webchannel/tst_webchannel.h1
3 files changed, 23 insertions, 0 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp
index 6ea3480..b34b39e 100644
--- a/src/webchannel/qmetaobjectpublisher.cpp
+++ b/src/webchannel/qmetaobjectpublisher.cpp
@@ -491,6 +491,9 @@ QObject *QMetaObjectPublisher::unwrapObject(const QString &objectId) const
ObjectInfo objectInfo = wrappedObjects.value(objectId);
if (objectInfo.object && !objectInfo.classinfo.isEmpty())
return objectInfo.object;
+ QObject *object = registeredObjects.value(objectId);
+ if (object)
+ return object;
}
qWarning() << "No wrapped object" << objectId;
diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp
index 6764204..e46d097 100644
--- a/tests/auto/webchannel/tst_webchannel.cpp
+++ b/tests/auto/webchannel/tst_webchannel.cpp
@@ -708,6 +708,25 @@ void TestWebChannel::testWrapRegisteredObject()
QCOMPARE(obj.objectName(), returnedId);
}
+void TestWebChannel::testUnwrapObject()
+{
+ QWebChannel channel;
+
+ {
+ TestObject obj;
+ obj.setObjectName("testObject");
+ channel.registerObject(obj.objectName(), &obj);
+ QObject *unwrapped = channel.d_func()->publisher->unwrapObject(obj.objectName());
+ QCOMPARE(unwrapped, &obj);
+ }
+ {
+ TestObject obj;
+ QJsonObject objectInfo = channel.d_func()->publisher->wrapResult(QVariant::fromValue(&obj), m_dummyTransport).toObject();
+ QObject *unwrapped = channel.d_func()->publisher->unwrapObject(objectInfo["id"].toString());
+ QCOMPARE(unwrapped, &obj);
+ }
+}
+
void TestWebChannel::testRemoveUnusedTransports()
{
QWebChannel channel;
diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h
index 386f314..40e6fba 100644
--- a/tests/auto/webchannel/tst_webchannel.h
+++ b/tests/auto/webchannel/tst_webchannel.h
@@ -311,6 +311,7 @@ private slots:
void testSetPropertyConversion();
void testDisconnect();
void testWrapRegisteredObject();
+ void testUnwrapObject();
void testRemoveUnusedTransports();
void testPassWrappedObjectBack();
void testWrapValues();