Title: [203217] trunk/Source
Revision
203217
Author
[email protected]
Date
2016-07-14 00:05:40 -0700 (Thu, 14 Jul 2016)

Log Message

Modernize WebSocket handle
https://bugs.webkit.org/show_bug.cgi?id=159750

Reviewed by Brady Eidson.

Source/WebCore:

No new tests.  No change in behavior.
This patch just removes ThreadableWebSocketChannel::InvalidMessage which is never used
and makes our use of SocketStreamHandleClient a reference instead of a pointer.

* Modules/websockets/ThreadableWebSocketChannel.h:
* Modules/websockets/WebSocket.cpp:
(WebCore::WebSocket::send):
* Modules/websockets/WebSocketChannel.cpp:
(WebCore::WebSocketChannel::connect):
* platform/network/SocketStreamHandleBase.cpp:
(WebCore::SocketStreamHandleBase::SocketStreamHandleBase):
(WebCore::SocketStreamHandleBase::send):
(WebCore::SocketStreamHandleBase::disconnect):
(WebCore::SocketStreamHandleBase::sendPendingData):
(WebCore::SocketStreamHandleBase::setClient): Deleted.
* platform/network/SocketStreamHandleBase.h:
(WebCore::SocketStreamHandleBase::~SocketStreamHandleBase):
(WebCore::SocketStreamHandleBase::bufferedAmount):
(WebCore::SocketStreamHandleBase::client):
* platform/network/cf/SocketStreamHandle.h:
(WebCore::SocketStreamHandle::create):
* platform/network/cf/SocketStreamHandleCFNet.cpp:
(WebCore::SocketStreamHandle::SocketStreamHandle):
(WebCore::SocketStreamHandle::addCONNECTCredentials):
(WebCore::SocketStreamHandle::copyCFStreamDescription):
(WebCore::SocketStreamHandle::readStreamCallback):
(WebCore::SocketStreamHandle::writeStreamCallback):
(WebCore::SocketStreamHandle::reportErrorToClient):
(WebCore::SocketStreamHandle::~SocketStreamHandle):
(WebCore::SocketStreamHandle::platformClose):
(WebCore::SocketStreamHandle::port):
* platform/network/curl/SocketStreamHandle.h:
(WebCore::SocketStreamHandle::create):
* platform/network/curl/SocketStreamHandleCurl.cpp:
(WebCore::SocketStreamHandle::SocketStreamHandle):
(WebCore::SocketStreamHandle::platformClose):
(WebCore::SocketStreamHandle::readData):
(WebCore::SocketStreamHandle::didReceiveData):
(WebCore::SocketStreamHandle::didOpenSocket):
(WebCore::SocketStreamHandle::createCopy):
* platform/network/soup/SocketStreamHandle.h:
* platform/network/soup/SocketStreamHandleSoup.cpp:
(WebCore::SocketStreamHandle::SocketStreamHandle):
(WebCore::SocketStreamHandle::~SocketStreamHandle):
(WebCore::SocketStreamHandle::connected):
(WebCore::SocketStreamHandle::connectedCallback):
(WebCore::SocketStreamHandle::readBytes):
(WebCore::SocketStreamHandle::didFail):
(WebCore::SocketStreamHandle::writeReady):
(WebCore::SocketStreamHandle::platformClose):
(WebCore::SocketStreamHandle::beginWaitingForSocketWritability):

Source/WebKit2:

* UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
(WebKit::connectionCallback):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (203216 => 203217)


--- trunk/Source/WebCore/ChangeLog	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/ChangeLog	2016-07-14 07:05:40 UTC (rev 203217)
@@ -1,3 +1,62 @@
+2016-07-13  Alex Christensen  <[email protected]>
+
+        Modernize WebSocket handle
+        https://bugs.webkit.org/show_bug.cgi?id=159750
+
+        Reviewed by Brady Eidson.
+
+        No new tests.  No change in behavior.
+        This patch just removes ThreadableWebSocketChannel::InvalidMessage which is never used
+        and makes our use of SocketStreamHandleClient a reference instead of a pointer.
+
+        * Modules/websockets/ThreadableWebSocketChannel.h:
+        * Modules/websockets/WebSocket.cpp:
+        (WebCore::WebSocket::send):
+        * Modules/websockets/WebSocketChannel.cpp:
+        (WebCore::WebSocketChannel::connect):
+        * platform/network/SocketStreamHandleBase.cpp:
+        (WebCore::SocketStreamHandleBase::SocketStreamHandleBase):
+        (WebCore::SocketStreamHandleBase::send):
+        (WebCore::SocketStreamHandleBase::disconnect):
+        (WebCore::SocketStreamHandleBase::sendPendingData):
+        (WebCore::SocketStreamHandleBase::setClient): Deleted.
+        * platform/network/SocketStreamHandleBase.h:
+        (WebCore::SocketStreamHandleBase::~SocketStreamHandleBase):
+        (WebCore::SocketStreamHandleBase::bufferedAmount):
+        (WebCore::SocketStreamHandleBase::client):
+        * platform/network/cf/SocketStreamHandle.h:
+        (WebCore::SocketStreamHandle::create):
+        * platform/network/cf/SocketStreamHandleCFNet.cpp:
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+        (WebCore::SocketStreamHandle::addCONNECTCredentials):
+        (WebCore::SocketStreamHandle::copyCFStreamDescription):
+        (WebCore::SocketStreamHandle::readStreamCallback):
+        (WebCore::SocketStreamHandle::writeStreamCallback):
+        (WebCore::SocketStreamHandle::reportErrorToClient):
+        (WebCore::SocketStreamHandle::~SocketStreamHandle):
+        (WebCore::SocketStreamHandle::platformClose):
+        (WebCore::SocketStreamHandle::port):
+        * platform/network/curl/SocketStreamHandle.h:
+        (WebCore::SocketStreamHandle::create):
+        * platform/network/curl/SocketStreamHandleCurl.cpp:
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+        (WebCore::SocketStreamHandle::platformClose):
+        (WebCore::SocketStreamHandle::readData):
+        (WebCore::SocketStreamHandle::didReceiveData):
+        (WebCore::SocketStreamHandle::didOpenSocket):
+        (WebCore::SocketStreamHandle::createCopy):
+        * platform/network/soup/SocketStreamHandle.h:
+        * platform/network/soup/SocketStreamHandleSoup.cpp:
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+        (WebCore::SocketStreamHandle::~SocketStreamHandle):
+        (WebCore::SocketStreamHandle::connected):
+        (WebCore::SocketStreamHandle::connectedCallback):
+        (WebCore::SocketStreamHandle::readBytes):
+        (WebCore::SocketStreamHandle::didFail):
+        (WebCore::SocketStreamHandle::writeReady):
+        (WebCore::SocketStreamHandle::platformClose):
+        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability):
+
 2016-07-13  Carlos Garcia Campos  <[email protected]>
 
         [GLib] Use a GSource instead of a thread to poll memory pressure eventFD in linux implementation

Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h (203216 => 203217)


--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h	2016-07-14 07:05:40 UTC (rev 203217)
@@ -54,8 +54,7 @@
 
     enum SendResult {
         SendSuccess,
-        SendFail,
-        InvalidMessage
+        SendFail
     };
 
     virtual void connect(const URL&, const String& protocol) = 0;

Modified: trunk/Source/WebCore/Modules/websockets/WebSocket.cpp (203216 => 203217)


--- trunk/Source/WebCore/Modules/websockets/WebSocket.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/Modules/websockets/WebSocket.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -338,12 +338,7 @@
         return;
     }
     ASSERT(m_channel);
-    ThreadableWebSocketChannel::SendResult result = m_channel->send(message);
-    if (result == ThreadableWebSocketChannel::InvalidMessage) {
-        scriptExecutionContext()->addConsoleMessage(MessageSource::JS, MessageLevel::Error, ASCIILiteral("Websocket message contains invalid character(s)."));
-        ec = SYNTAX_ERR;
-        return;
-    }
+    m_channel->send(message);
 }
 
 void WebSocket::send(ArrayBuffer& binaryData, ExceptionCode& ec)

Modified: trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp (203216 => 203217)


--- trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -97,7 +97,7 @@
         if (NetworkingContext* networkingContext = frame->loader().networkingContext()) {
             ref();
             Page* page = frame->page();
-            m_handle = SocketStreamHandle::create(m_handshake->url(), this, *networkingContext, (page ? page->usesEphemeralSession() : false));
+            m_handle = SocketStreamHandle::create(m_handshake->url(), *this, *networkingContext, (page ? page->usesEphemeralSession() : false));
         }
     }
 }

Modified: trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp (203216 => 203217)


--- trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -38,7 +38,7 @@
 
 const unsigned int bufferSize = 100 * 1024 * 1024;
 
-SocketStreamHandleBase::SocketStreamHandleBase(const URL& url, SocketStreamHandleClient* client)
+SocketStreamHandleBase::SocketStreamHandleBase(const URL& url, SocketStreamHandleClient& client)
     : m_url(url)
     , m_client(client)
     , m_state(Connecting)
@@ -60,8 +60,7 @@
             return false;
         }
         m_buffer.append(data, length);
-        if (m_client)
-            m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
+        m_client.didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
         return true;
     }
     int bytesWritten = 0;
@@ -75,8 +74,7 @@
     }
     if (bytesWritten < length) {
         m_buffer.append(data + bytesWritten, length - bytesWritten);
-        if (m_client)
-            m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
+        m_client.didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
     }
     return true;
 }
@@ -99,12 +97,6 @@
     m_state = Closed;
 }
 
-void SocketStreamHandleBase::setClient(SocketStreamHandleClient* client)
-{
-    ASSERT(!client || (!m_client && m_state == Connecting));
-    m_client = client;
-}
-
 bool SocketStreamHandleBase::sendPendingData()
 {
     if (m_state != Open && m_state != Closing)
@@ -126,8 +118,7 @@
         ASSERT(m_buffer.size() - bytesWritten <= bufferSize);
         m_buffer.consume(bytesWritten);
     } while (!pending && !m_buffer.isEmpty());
-    if (m_client)
-        m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
+    m_client.didUpdateBufferedAmount(static_cast<SocketStreamHandle&>(*this), bufferedAmount());
     return true;
 }
 

Modified: trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h (203216 => 203217)


--- trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h	2016-07-14 07:05:40 UTC (rev 203217)
@@ -36,34 +36,33 @@
 
 namespace WebCore {
 
-    class SocketStreamHandle;
-    class SocketStreamHandleClient;
+class SocketStreamHandle;
+class SocketStreamHandleClient;
 
-    class SocketStreamHandleBase {
-    public:
-        enum SocketStreamState { Connecting, Open, Closing, Closed };
-        virtual ~SocketStreamHandleBase() { }
-        SocketStreamState state() const;
+class SocketStreamHandleBase {
+public:
+    enum SocketStreamState { Connecting, Open, Closing, Closed };
+    virtual ~SocketStreamHandleBase() { }
+    SocketStreamState state() const;
 
-        bool send(const char* data, int length);
-        void close(); // Disconnect after all data in buffer are sent.
-        void disconnect();
-        size_t bufferedAmount() const { return m_buffer.size(); }
+    bool send(const char* data, int length);
+    void close(); // Disconnect after all data in buffer are sent.
+    void disconnect();
+    size_t bufferedAmount() const { return m_buffer.size(); }
 
-        SocketStreamHandleClient* client() const { return m_client; }
-        void setClient(SocketStreamHandleClient*);
+    SocketStreamHandleClient& client() const { return m_client; }
 
-    protected:
-        SocketStreamHandleBase(const URL&, SocketStreamHandleClient*);
+protected:
+    SocketStreamHandleBase(const URL&, SocketStreamHandleClient&);
 
-        bool sendPendingData();
-        virtual int platformSend(const char* data, int length) = 0;
-        virtual void platformClose() = 0;
+    bool sendPendingData();
+    virtual int platformSend(const char* data, int length) = 0;
+    virtual void platformClose() = 0;
 
-        URL m_url;
-        SocketStreamHandleClient* m_client;
-        StreamBuffer<char, 1024 * 1024> m_buffer;
-        SocketStreamState m_state;
-    };
+    URL m_url;
+    SocketStreamHandleClient& m_client;
+    StreamBuffer<char, 1024 * 1024> m_buffer;
+    SocketStreamState m_state;
+};
 
 }  // namespace WebCore

Modified: trunk/Source/WebCore/platform/network/cf/SocketStreamHandle.h (203216 => 203217)


--- trunk/Source/WebCore/platform/network/cf/SocketStreamHandle.h	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/cf/SocketStreamHandle.h	2016-07-14 07:05:40 UTC (rev 203217)
@@ -47,7 +47,7 @@
 
 class SocketStreamHandle : public ThreadSafeRefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
 public:
-    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient* client, NetworkingContext& networkingContext, bool usesEphemeralSession) { return adoptRef(*new SocketStreamHandle(url, client, networkingContext, usesEphemeralSession)); }
+    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient& client, NetworkingContext& networkingContext, bool usesEphemeralSession) { return adoptRef(*new SocketStreamHandle(url, client, networkingContext, usesEphemeralSession)); }
 
     virtual ~SocketStreamHandle();
 
@@ -55,7 +55,7 @@
     virtual int platformSend(const char* data, int length);
     virtual void platformClose();
 
-    SocketStreamHandle(const URL&, SocketStreamHandleClient*, NetworkingContext&, bool usesEphemeralSession);
+    SocketStreamHandle(const URL&, SocketStreamHandleClient&, NetworkingContext&, bool usesEphemeralSession);
     void createStreams();
     void scheduleStreams();
     void chooseProxy();

Modified: trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp (203216 => 203217)


--- trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -67,7 +67,7 @@
 
 namespace WebCore {
 
-SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient* client, NetworkingContext& networkingContext, bool usesEphemeralSession)
+SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient& client, NetworkingContext& networkingContext, bool usesEphemeralSession)
     : SocketStreamHandleBase(url, client)
     , m_connectingSubstate(New)
     , m_connectionType(Unknown)
@@ -74,7 +74,7 @@
     , m_sentStoredCredentials(false)
     , m_networkingContext(networkingContext)
 {
-    LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
+    LOG(Network, "SocketStreamHandle %p new client %p", this, &m_client);
 
     ASSERT(url.protocolIs("ws") || url.protocolIs("wss"));
 
@@ -87,7 +87,7 @@
     if (url.protocolIs("ws")
         && !usesEphemeralSession
         && _CFNetworkIsKnownHSTSHostWithSession(m_httpsURL.get(), nullptr)) {
-        m_client->didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "WebSocket connection failed because it violates HTTP Strict Transport Security."));
+        m_client.didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "WebSocket connection failed because it violates HTTP Strict Transport Security."));
         return;
     }
 #endif
@@ -388,7 +388,7 @@
 
     if (!CFHTTPAuthenticationRequiresUserNameAndPassword(authentication.get())) {
         // That's all we can offer...
-        m_client->didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy authentication scheme is not supported for WebSockets"));
+        m_client.didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy authentication scheme is not supported for WebSockets"));
         return;
     }
 
@@ -399,7 +399,7 @@
 
     if (!methodCF || !realmCF) {
         // This shouldn't happen, but on some OS versions we get incomplete authentication data, see <rdar://problem/10416316>.
-        m_client->didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "WebSocket proxy authentication couldn't be handled"));
+        m_client.didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "WebSocket proxy authentication couldn't be handled"));
         return;
     }
 
@@ -418,7 +418,7 @@
 
         if (!proxyAuthorizationString) {
             // Fails e.g. for NTLM auth.
-            m_client->didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy authentication scheme is not supported for WebSockets"));
+            m_client.didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy authentication scheme is not supported for WebSockets"));
             return;
         }
 
@@ -430,7 +430,7 @@
 
     // FIXME: On platforms where AuthBrokerAgent is not available, ask the client if credentials could not be found.
 
-    m_client->didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy credentials are not available"));
+    m_client.didFailSocketStream(*this, SocketStreamError(0, m_url.string(), "Proxy credentials are not available"));
 }
 
 CFStringRef SocketStreamHandle::copyCFStreamDescription(void* info)
@@ -505,7 +505,7 @@
                     addCONNECTCredentials(proxyResponse.get());
                     return;
                 default:
-                    m_client->didFailSocketStream(*this, SocketStreamError(static_cast<int>(proxyResponseCode), m_url.string(), "Proxy connection could not be established, unexpected response code"));
+                    m_client.didFailSocketStream(*this, SocketStreamError(static_cast<int>(proxyResponseCode), m_url.string(), "Proxy connection could not be established, unexpected response code"));
                     platformClose();
                     return;
                 }
@@ -512,7 +512,7 @@
             }
             m_connectingSubstate = Connected;
             m_state = Open;
-            m_client->didOpenSocketStream(*this);
+            m_client.didOpenSocketStream(*this);
         }
 
         // Not an "else if", we could have made a client call above, and it could close the connection.
@@ -533,7 +533,7 @@
         if (!length)
             return;
 
-        m_client->didReceiveSocketStreamData(*this, reinterpret_cast<const char*>(ptr), length);
+        m_client.didReceiveSocketStreamData(*this, reinterpret_cast<const char*>(ptr), length);
 
         return;
     }
@@ -583,7 +583,7 @@
             }
             m_connectingSubstate = Connected;
             m_state = Open;
-            m_client->didOpenSocketStream(*this);
+            m_client.didOpenSocketStream(*this);
         }
 
         // Not an "else if", we could have made a client call above, and it could close the connection.
@@ -636,7 +636,7 @@
         description = String(descriptionCF.get());
     }
 
-    m_client->didFailSocketStream(*this, SocketStreamError(static_cast<int>(errorCode), m_url.string(), description));
+    m_client.didFailSocketStream(*this, SocketStreamError(static_cast<int>(errorCode), m_url.string(), description));
 }
 
 SocketStreamHandle::~SocketStreamHandle()
@@ -664,7 +664,7 @@
     ASSERT(!m_readStream == !m_writeStream);
     if (!m_readStream) {
         if (m_connectingSubstate == New || m_connectingSubstate == ExecutingPACFile)
-            m_client->didCloseSocketStream(*this);
+            m_client.didCloseSocketStream(*this);
         return;
     }
 
@@ -682,7 +682,7 @@
     m_readStream = 0;
     m_writeStream = 0;
 
-    m_client->didCloseSocketStream(*this);
+    m_client.didCloseSocketStream(*this);
 }
 
 unsigned short SocketStreamHandle::port() const

Modified: trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h (203216 => 203217)


--- trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/curl/SocketStreamHandle.h	2016-07-14 07:05:40 UTC (rev 203217)
@@ -51,12 +51,12 @@
 
 class SocketStreamHandle : public ThreadSafeRefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
 public:
-    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient* client, NetworkingContext&, bool) { return adoptRef(*new SocketStreamHandle(url, client)); }
+    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient& client, NetworkingContext&, bool) { return adoptRef(*new SocketStreamHandle(url, client)); }
 
     virtual ~SocketStreamHandle();
 
 private:
-    SocketStreamHandle(const URL&, SocketStreamHandleClient*);
+    SocketStreamHandle(const URL&, SocketStreamHandleClient&);
 
     int platformSend(const char* data, int length) override;
     void platformClose() override;

Modified: trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp (203216 => 203217)


--- trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -42,10 +42,10 @@
 
 namespace WebCore {
 
-SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient* client)
+SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient& client)
     : SocketStreamHandleBase(url, client)
 {
-    LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
+    LOG(Network, "SocketStreamHandle %p new client %p", this, &m_client);
     ASSERT(isMainThread());
     startThread();
 }
@@ -80,8 +80,7 @@
 
     stopThread();
 
-    if (m_client)
-        m_client->didCloseSocketStream(*this);
+    m_client.didCloseSocketStream(*this);
 }
 
 bool SocketStreamHandle::readData(CURL* curlHandle)
@@ -256,8 +255,8 @@
 
     for (auto& socketData : receiveData) {
         if (socketData.size > 0) {
-            if (m_client && state() == Open)
-                m_client->didReceiveSocketStreamData(*this, socketData.data.get(), socketData.size);
+            if (state() == Open)
+                m_client.didReceiveSocketStreamData(*this, socketData.data.get(), socketData.size);
         } else
             platformClose();
     }
@@ -269,8 +268,7 @@
 
     m_state = Open;
 
-    if (m_client)
-        m_client->didOpenSocketStream(*this);
+    m_client.didOpenSocketStream(*this);
 }
 
 std::unique_ptr<char[]> SocketStreamHandle::createCopy(const char* data, int length)

Modified: trunk/Source/WebCore/platform/network/soup/SocketStreamHandle.h (203216 => 203217)


--- trunk/Source/WebCore/platform/network/soup/SocketStreamHandle.h	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/soup/SocketStreamHandle.h	2016-07-14 07:05:40 UTC (rev 203217)
@@ -48,14 +48,14 @@
 
 class SocketStreamHandle final : public RefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
 public:
-    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient* client, NetworkingContext&, bool) { return adoptRef(*new SocketStreamHandle(url, client)); }
-    static Ref<SocketStreamHandle> create(GSocketConnection* socketConnection, SocketStreamHandleClient* client) { return adoptRef(*new SocketStreamHandle(socketConnection, client)); }
+    static Ref<SocketStreamHandle> create(const URL& url, SocketStreamHandleClient& client, NetworkingContext&, bool) { return adoptRef(*new SocketStreamHandle(url, client)); }
+    static Ref<SocketStreamHandle> create(GSocketConnection* socketConnection, SocketStreamHandleClient& client) { return adoptRef(*new SocketStreamHandle(socketConnection, client)); }
 
     virtual ~SocketStreamHandle();
 
 private:
-    SocketStreamHandle(const URL&, SocketStreamHandleClient*);
-    SocketStreamHandle(GSocketConnection*, SocketStreamHandleClient*);
+    SocketStreamHandle(const URL&, SocketStreamHandleClient&);
+    SocketStreamHandle(GSocketConnection*, SocketStreamHandleClient&);
 
     int platformSend(const char* data, int length) override;
     void platformClose() override;

Modified: trunk/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp (203216 => 203217)


--- trunk/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebCore/platform/network/soup/SocketStreamHandleSoup.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -48,11 +48,11 @@
 
 namespace WebCore {
 
-SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient* client)
+SocketStreamHandle::SocketStreamHandle(const URL& url, SocketStreamHandleClient& client)
     : SocketStreamHandleBase(url, client)
     , m_cancellable(adoptGRef(g_cancellable_new()))
 {
-    LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
+    LOG(Network, "SocketStreamHandle %p new client %p", this, &m_client);
     unsigned port = url.hasPort() ? url.port() : (url.protocolIs("wss") ? 443 : 80);
 
     GRefPtr<GSocketClient> socketClient = adoptGRef(g_socket_client_new());
@@ -64,11 +64,11 @@
         reinterpret_cast<GAsyncReadyCallback>(connectedCallback), protectedThis.leakRef());
 }
 
-SocketStreamHandle::SocketStreamHandle(GSocketConnection* socketConnection, SocketStreamHandleClient* client)
+SocketStreamHandle::SocketStreamHandle(GSocketConnection* socketConnection, SocketStreamHandleClient& client)
     : SocketStreamHandleBase(URL(), client)
     , m_cancellable(adoptGRef(g_cancellable_new()))
 {
-    LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
+    LOG(Network, "SocketStreamHandle %p new client %p", this, &m_client);
     GRefPtr<GSocketConnection> connection = socketConnection;
     connected(WTFMove(connection));
 }
@@ -76,7 +76,6 @@
 SocketStreamHandle::~SocketStreamHandle()
 {
     LOG(Network, "SocketStreamHandle %p delete", this);
-    setClient(nullptr);
 }
 
 void SocketStreamHandle::connected(GRefPtr<GSocketConnection>&& socketConnection)
@@ -91,7 +90,7 @@
         reinterpret_cast<GAsyncReadyCallback>(readReadyCallback), protectedThis.leakRef());
 
     m_state = Open;
-    m_client->didOpenSocketStream(*this);
+    m_client.didOpenSocketStream(*this);
 }
 
 void SocketStreamHandle::connectedCallback(GSocketClient* client, GAsyncResult* result, SocketStreamHandle* handle)
@@ -124,7 +123,7 @@
 
     // The client can close the handle, potentially removing the last reference.
     RefPtr<SocketStreamHandle> protectedThis(this);
-    m_client->didReceiveSocketStreamData(*this, m_readBuffer.get(), bytesRead);
+    m_client.didReceiveSocketStreamData(*this, m_readBuffer.get(), bytesRead);
     if (m_inputStream) {
         g_input_stream_read_async(m_inputStream.get(), m_readBuffer.get(), READ_BUFFER_SIZE, G_PRIORITY_DEFAULT, m_cancellable.get(),
             reinterpret_cast<GAsyncReadyCallback>(readReadyCallback), protectedThis.leakRef());
@@ -150,7 +149,7 @@
 
 void SocketStreamHandle::didFail(SocketStreamError&& error)
 {
-    m_client->didFailSocketStream(*this, WTFMove(error));
+    m_client.didFailSocketStream(*this, WTFMove(error));
 }
 
 void SocketStreamHandle::writeReady()
@@ -207,7 +206,7 @@
     m_inputStream = nullptr;
     m_readBuffer = nullptr;
 
-    m_client->didCloseSocketStream(*this);
+    m_client.didCloseSocketStream(*this);
 }
 
 void SocketStreamHandle::beginWaitingForSocketWritability()

Modified: trunk/Source/WebKit2/ChangeLog (203216 => 203217)


--- trunk/Source/WebKit2/ChangeLog	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebKit2/ChangeLog	2016-07-14 07:05:40 UTC (rev 203217)
@@ -1,3 +1,13 @@
+2016-07-13  Alex Christensen  <[email protected]>
+
+        Modernize WebSocket handle
+        https://bugs.webkit.org/show_bug.cgi?id=159750
+
+        Reviewed by Brady Eidson.
+
+        * UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp:
+        (WebKit::connectionCallback):
+
 2016-07-13  Carlos Garcia Campos  <[email protected]>
 
         REGRESSION(r202273): [GTK] Redirected X window is resized to the previous size on size allocate

Modified: trunk/Source/WebKit2/UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp (203216 => 203217)


--- trunk/Source/WebKit2/UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp	2016-07-14 06:36:25 UTC (rev 203216)
+++ trunk/Source/WebKit2/UIProcess/InspectorServer/soup/WebSocketServerSoup.cpp	2016-07-14 07:05:40 UTC (rev 203217)
@@ -47,7 +47,7 @@
 #endif
 
     auto webSocketConnection = std::make_unique<WebSocketServerConnection>(server->client(), server);
-    webSocketConnection->setSocketHandle(SocketStreamHandle::create(connection, webSocketConnection.get()));
+    webSocketConnection->setSocketHandle(SocketStreamHandle::create(connection, *webSocketConnection));
     server->didAcceptConnection(WTFMove(webSocketConnection));
 
     return TRUE;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to