[Qt] Fix the remote inspector loading problems on Mac
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jun 2012 13:24:31 +0000 (13:24 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 Jun 2012 13:24:31 +0000 (13:24 +0000)
https://bugs.webkit.org/show_bug.cgi?id=89747

Patch by Jocelyn Turcotte <turcotte.j@gmail.com> on 2012-06-22
Reviewed by Simon Hausmann.

Source/WebCore:

Make sure that the state of a SocketStreamHandle is set properly
when created from an existing QTcpSocket.

This fixes the inspectorserver Qt api auto test on Mac.

* platform/network/qt/SocketStreamHandleQt.cpp:
(WebCore::SocketStreamHandle::SocketStreamHandle):

Source/WebKit2:

Reverse the creation order of the inter-dependent WebSocketServerConnection
and SocketStreamHandle to make sure that the later has a client properly
set on construction.

This is to work around the assert on m_state in SocketStreamHandle::setClient.

* UIProcess/InspectorServer/WebSocketServer.cpp:
(WebKit::WebSocketServer::didAcceptConnection):
* UIProcess/InspectorServer/WebSocketServer.h:
(WebKit::WebSocketServer::client):
(WebSocketServer):
* UIProcess/InspectorServer/WebSocketServerConnection.cpp:
(WebKit::WebSocketServerConnection::WebSocketServerConnection):
(WebKit::WebSocketServerConnection::setSocketHandle):
(WebKit):
* UIProcess/InspectorServer/WebSocketServerConnection.h:
(WebSocketServerConnection):
* UIProcess/InspectorServer/qt/WebSocketServerQt.cpp:
(WebKit::QtTcpServerHandler::handleNewConnection):

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121020 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/network/qt/SocketStreamHandleQt.cpp
Source/WebKit2/ChangeLog
Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.cpp
Source/WebKit2/UIProcess/InspectorServer/WebSocketServer.h
Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp
Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h
Source/WebKit2/UIProcess/InspectorServer/qt/WebSocketServerQt.cpp

index affad85..2b25841 100644 (file)
@@ -1,3 +1,18 @@
+2012-06-22  Jocelyn Turcotte  <turcotte.j@gmail.com>
+
+        [Qt] Fix the remote inspector loading problems on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=89747
+
+        Reviewed by Simon Hausmann.
+
+        Make sure that the state of a SocketStreamHandle is set properly
+        when created from an existing QTcpSocket.
+
+        This fixes the inspectorserver Qt api auto test on Mac.
+
+        * platform/network/qt/SocketStreamHandleQt.cpp:
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+
 2012-06-22  Yoshifumi Inoue  <yosin@chromium.org>
 
         REGRESSION(r117738):[Forms] validationMessage IDL attribute should not have range overflow message if value isn't range overflow
index 28101a6..271edd8 100644 (file)
@@ -191,6 +191,8 @@ SocketStreamHandle::SocketStreamHandle(QTcpSocket* socket, SocketStreamHandleCli
 {
     LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
     m_p = new SocketStreamHandlePrivate(this, socket);
+    if (socket->isOpen())
+        m_state = Open;
 }
 
 SocketStreamHandle::~SocketStreamHandle()
index 99c7c86..f218e11 100644 (file)
@@ -1,3 +1,30 @@
+2012-06-22  Jocelyn Turcotte  <turcotte.j@gmail.com>
+
+        [Qt] Fix the remote inspector loading problems on Mac
+        https://bugs.webkit.org/show_bug.cgi?id=89747
+
+        Reviewed by Simon Hausmann.
+
+        Reverse the creation order of the inter-dependent WebSocketServerConnection
+        and SocketStreamHandle to make sure that the later has a client properly
+        set on construction.
+
+        This is to work around the assert on m_state in SocketStreamHandle::setClient.
+
+        * UIProcess/InspectorServer/WebSocketServer.cpp:
+        (WebKit::WebSocketServer::didAcceptConnection):
+        * UIProcess/InspectorServer/WebSocketServer.h:
+        (WebKit::WebSocketServer::client):
+        (WebSocketServer):
+        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
+        (WebKit::WebSocketServerConnection::WebSocketServerConnection):
+        (WebKit::WebSocketServerConnection::setSocketHandle):
+        (WebKit):
+        * UIProcess/InspectorServer/WebSocketServerConnection.h:
+        (WebSocketServerConnection):
+        * UIProcess/InspectorServer/qt/WebSocketServerQt.cpp:
+        (WebKit::QtTcpServerHandler::handleNewConnection):
+
 2012-06-22  Sergio Villar Senin  <svillar@igalia.com>
 
         [WK2] FindController::hideFindUI should unmark highlighted text matches
index 7a0beb5..cf4ee13 100644 (file)
@@ -82,9 +82,9 @@ void WebSocketServer::close()
     m_bindAddress = String();
 }
 
-void WebSocketServer::didAcceptConnection(PassRefPtr<SocketStreamHandle> socketHandle)
+void WebSocketServer::didAcceptConnection(PassOwnPtr<WebSocketServerConnection> connection)
 {
-    m_connections.append(adoptPtr(new WebSocketServerConnection(socketHandle, m_client, this)));
+    m_connections.append(connection);
 }
 
 void WebSocketServer::didCloseWebSocketServerConnection(WebSocketServerConnection* connection)
index e5bd2fd..56aa7fb 100644 (file)
@@ -61,7 +61,8 @@ public:
     ServerState serverState() const { return m_state; };
     void close();
 
-    void didAcceptConnection(PassRefPtr<WebCore::SocketStreamHandle>);
+    WebSocketServerClient* client() const { return m_client; }
+    void didAcceptConnection(PassOwnPtr<WebSocketServerConnection>);
 
 private:
     void didCloseWebSocketServerConnection(WebSocketServerConnection*);
index 9ffbbbe..57206eb 100644 (file)
@@ -45,14 +45,12 @@ using namespace WebCore;
 
 namespace WebKit {
 
-WebSocketServerConnection::WebSocketServerConnection(PassRefPtr<SocketStreamHandle> socket, WebSocketServerClient* client, WebSocketServer* server)
+WebSocketServerConnection::WebSocketServerConnection(WebSocketServerClient* client, WebSocketServer* server)
     : m_identifier(0)
     , m_mode(HTTP)
-    , m_socket(socket)
     , m_server(server)
     , m_client(client)
 {
-    m_socket->setClient(this);
 }
 
 WebSocketServerConnection::~WebSocketServerConnection()
@@ -60,6 +58,12 @@ WebSocketServerConnection::~WebSocketServerConnection()
     shutdownNow();
 }
 
+void WebSocketServerConnection::setSocketHandle(PassRefPtr<WebCore::SocketStreamHandle> socket)
+{
+    ASSERT(!m_socket);
+    m_socket = socket;
+}
+
 void WebSocketServerConnection::shutdownNow()
 {
     if (!m_socket)
index 6cc7701..64da82c 100644 (file)
@@ -49,11 +49,12 @@ class WebSocketServerClient;
 class WebSocketServerConnection : public WebCore::SocketStreamHandleClient {
 public:
     enum WebSocketServerMode { HTTP, WebSocket };
-    WebSocketServerConnection(PassRefPtr<WebCore::SocketStreamHandle>, WebSocketServerClient*, WebSocketServer*);
+    WebSocketServerConnection(WebSocketServerClient*, WebSocketServer*);
     virtual ~WebSocketServerConnection();
 
     unsigned identifier() const { return m_identifier; }
     void setIdentifier(unsigned id) { m_identifier = id; }
+    void setSocketHandle(PassRefPtr<WebCore::SocketStreamHandle>);
 
     // Sending data over the connection.
     void sendWebSocketMessage(const String& message);
index 6a9c5b3..4503104 100644 (file)
@@ -23,6 +23,7 @@
 #include "WebSocketServerQt.h"
 
 #include "WebSocketServer.h"
+#include "WebSocketServerConnection.h"
 #include <WebCore/SocketStreamHandle.h>
 #include <wtf/PassOwnPtr.h>
 
@@ -55,7 +56,9 @@ void QtTcpServerHandler::handleNewConnection()
 {
     QTcpSocket* socket = m_serverSocket.nextPendingConnection();
     ASSERT(socket);
-    m_webSocketServer->didAcceptConnection(SocketStreamHandle::create(socket, 0));
+    OwnPtr<WebSocketServerConnection> conection = adoptPtr(new WebSocketServerConnection(m_webSocketServer->client(), m_webSocketServer));
+    conection->setSocketHandle(SocketStreamHandle::create(socket, conection.get()));
+    m_webSocketServer->didAcceptConnection(conection.release());
 }
 
 bool QtTcpServerHandler::listen(const String& bindAddress, unsigned short port)