Dear all,

I'm currently trying to use the webkit remote inspector using websocket. I can see that an implementation is available in Source/Webkit/qt/WebcoreSupport but i'm facing some problem to use it.

Here is my command line to launch the remote inspector
./QtTestBrowser -remote-inspector-port 9222 http://www.google.fr

When i'm launching another browser such as Chrome, i start with white page with www.google.fr and when i'm clicking on it, i'm getting a websocket error.

I fixed this error with this patch:
/diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
index 14f5dd7..95e2781 100644
--- a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp

@@ -192,7 +193,9 @@ void InspectorServerRequestHandlerQt::tcpReadyRead()
                 m_path = header.path();
                 m_contentType = header.contentType().toLatin1();
                 m_contentLength = header.contentLength();
- if (header.hasKey(QLatin1String("Upgrade")) && (header.value(QLatin1String("Upgrade")) == QLatin1String("WebSocket"))) + if (header.hasKey(QLatin1String("Upgrade")) && (header.value(QLatin1String("Upgrade")).toLower() == QLatin1String("websocket")))
                     isWebSocket = true;/

Then i encounter an issue with websocket handshake where the header missed Sec-WebSocket-Accept in the answer:

/diff --git a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
index 14f5dd7..95e2781 100644
--- a/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
+++ b/Source/WebKit/qt/WebCoreSupport/InspectorServerQt.cpp
@@ -225,6 +228,8 @@ void InspectorServerRequestHandlerQt::tcpReadyRead()
responseHeader.setValue(QLatin1String("Connection"), header.value(QLatin1String("Connection"))); responseHeader.setValue(QLatin1String("Sec-WebSocket-Origin"), header.value(QLatin1String("Origin"))); responseHeader.setValue(QLatin1String("Sec-WebSocket-Location"), (QLatin1String("ws://") + header.value(QLatin1String("Host")) + m_path)); + QString acceptSec = getExpectedWebSocketAccept(header.value(QLatin1String("Sec-WebSocket-Key")));
+ responseHeader.setValue(QLatin1String("Sec-WebSocket-Accept"), acceptSec);
responseHeader.setContentLength(response.size());
m_tcpConnection->write(responseHeader.toString().toLatin1());
                 m_tcpConnection->write(response);
@@ -298,6 +303,22 @@ void InspectorServerRequestHandlerQt::tcpReadyRead()
     }
 }

+QString InspectorServerRequestHandlerQt::getExpectedWebSocketAccept(const QString& secWebSocketKey)
+{
+ static const char* const webSocketKeyGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; + static const size_t sha1HashSize = 20; // FIXME: This should be defined in SHA1.h.
+    SHA1 sha1;
+    QString keyData = secWebSocketKey;
+ sha1.addBytes(reinterpret_cast<const uint8_t*>(keyData.toAscii().data()), keyData.length()); + sha1.addBytes(reinterpret_cast<const uint8_t*>(webSocketKeyGUID), strlen(webSocketKeyGUID));
+    Vector<uint8_t, sha1HashSize> hash;
+    sha1.computeHash(hash);
+ QByteArray theHash(reinterpret_cast<const char*>(hash.data()), sha1HashSize); + //return base64Encode(reinterpret_cast<const char*>(hash.data()), sha1HashSize);
+    QString theResult = QString::fromAscii(theHash.toBase64());
+    return theResult;
+}/

And now the message received from the client is not handled correctly, crashing in webSocketReadyRead on Q_ASSERT(!m_data[0]);

So i'm wondering if anybody is using this functionnality or this is only a beta code.
Any help would be appreciated :)

Stéphane.
_______________________________________________
webkit-qt mailing list
webkit-qt@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-qt

Reply via email to