diff options
-rw-r--r-- | src/webchannel/qmetaobjectpublisher.cpp | 7 | ||||
-rw-r--r-- | src/webchannel/qwebchannel.cpp | 1 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.cpp | 8 | ||||
-rw-r--r-- | tests/auto/webchannel/tst_webchannel.h | 6 |
4 files changed, 21 insertions, 1 deletions
diff --git a/src/webchannel/qmetaobjectpublisher.cpp b/src/webchannel/qmetaobjectpublisher.cpp index d9aa548..7c6c6eb 100644 --- a/src/webchannel/qmetaobjectpublisher.cpp +++ b/src/webchannel/qmetaobjectpublisher.cpp @@ -474,7 +474,7 @@ void QMetaObjectPublisher::deleteWrappedObject(QObject *object) const void QMetaObjectPublisher::broadcastMessage(const QJsonObject &message) const { if (webChannel->d_func()->transports.isEmpty()) { - qWarning("QWebChannel is not connected to any transports, cannot send messages."); + qWarning("QWebChannel is not connected to any transports, cannot send message: %s", QJsonDocument(message).toJson().constData()); return; } @@ -485,6 +485,11 @@ void QMetaObjectPublisher::broadcastMessage(const QJsonObject &message) const void QMetaObjectPublisher::handleMessage(const QJsonObject &message, QWebChannelAbstractTransport *transport) { + if (!webChannel->d_func()->transports.contains(transport)) { + qWarning() << "Refusing to handle message of unknown transport:" << transport; + return; + } + if (!message.contains(KEY_TYPE)) { qWarning("JSON message object is missing the type property: %s", QJsonDocument(message).toJson().constData()); return; diff --git a/src/webchannel/qwebchannel.cpp b/src/webchannel/qwebchannel.cpp index a518d26..0d096b4 100644 --- a/src/webchannel/qwebchannel.cpp +++ b/src/webchannel/qwebchannel.cpp @@ -252,6 +252,7 @@ void QWebChannel::disconnectFrom(QWebChannelAbstractTransport *transport) const int idx = d->transports.indexOf(transport); if (idx != -1) { disconnect(transport, 0, this, 0); + disconnect(transport, 0, d->publisher, 0); d->transports.remove(idx); } } diff --git a/tests/auto/webchannel/tst_webchannel.cpp b/tests/auto/webchannel/tst_webchannel.cpp index 900a6bb..2de34c9 100644 --- a/tests/auto/webchannel/tst_webchannel.cpp +++ b/tests/auto/webchannel/tst_webchannel.cpp @@ -244,6 +244,14 @@ void TestWebChannel::testInvokeMethodConversion() } } +void TestWebChannel::testDisconnect() +{ + QWebChannel channel; + channel.connectTo(m_dummyTransport); + channel.disconnectFrom(m_dummyTransport); + m_dummyTransport->emitMessageReceived(QJsonObject()); +} + static QHash<QString, QObject*> createObjects(QObject *parent) { const int num = 100; diff --git a/tests/auto/webchannel/tst_webchannel.h b/tests/auto/webchannel/tst_webchannel.h index bd403dc..57e6b5d 100644 --- a/tests/auto/webchannel/tst_webchannel.h +++ b/tests/auto/webchannel/tst_webchannel.h @@ -56,6 +56,11 @@ public: {} ~DummyTransport() {}; + void emitMessageReceived(const QJsonObject &message) + { + emit messageReceived(message, this); + } + public slots: void sendMessage(const QJsonObject &/*message*/) Q_DECL_OVERRIDE { @@ -217,6 +222,7 @@ private slots: void testRegisterObjects(); void testInfoForObject(); void testInvokeMethodConversion(); + void testDisconnect(); void benchClassInfo(); void benchInitializeClients(); |