From 30e2e336a536786cf9a9de9736b0983df02fd041 Mon Sep 17 00:00:00 2001 From: Milian Wolff Date: Wed, 16 Jul 2014 19:04:39 +0200 Subject: Properly disconnect a transport from the QtMetaObjectPublisher. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes a bug, where messages from the transport would still be send to the QtMetaObjectPublisher even though it was previously disconnected. I'll refactor this code eventually to get rid of QtMetaObjectPublisher alltogether and merge its code into QWebChannelPrivate where appropriate. Change-Id: Ie0c35bd81a5e633bdcb6be55b64f947d4a545a59 Reviewed-by: Jocelyn Turcotte Reviewed-by: Lutz Schönemann --- src/webchannel/qmetaobjectpublisher.cpp | 7 ++++++- src/webchannel/qwebchannel.cpp | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src') 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); } } -- cgit v1.2.1