<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[202367] trunk/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/202367">202367</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-06-22 23:10:48 -0700 (Wed, 22 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/201880">r201880</a>): WebSockets based remote inspector is broken since <a href="http://trac.webkit.org/projects/webkit/changeset/201880">r201880</a>
https://bugs.webkit.org/show_bug.cgi?id=158613

Reviewed by Michael Catanzaro.

In <a href="http://trac.webkit.org/projects/webkit/changeset/201880">r201880</a> SocketStreamHandleClient was modified to receive references instead of
pointers. WebSocketServerConnection also implements SocketStreamHandleClient but since it's doesn't use
override, it was unnoticed and not updated, so we ended up using the default empty implementation instead of
the WebSocketServerConnection one.

* UIProcess/InspectorServer/WebSocketServerConnection.cpp:
(WebKit::WebSocketServerConnection::WebSocketServerConnection):
(WebKit::WebSocketServerConnection::setSocketHandle):
(WebKit::WebSocketServerConnection::shutdownNow):
(WebKit::WebSocketServerConnection::didCloseSocketStream):
(WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
(WebKit::WebSocketServerConnection::didUpdateBufferedAmount):
(WebKit::WebSocketServerConnection::didFailSocketStream): Deleted.
* UIProcess/InspectorServer/WebSocketServerConnection.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessInspectorServerWebSocketServerConnectioncpp">trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessInspectorServerWebSocketServerConnectionh">trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (202366 => 202367)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-06-23 05:46:10 UTC (rev 202366)
+++ trunk/Source/WebKit2/ChangeLog        2016-06-23 06:10:48 UTC (rev 202367)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-06-22  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        REGRESSION(r201880): WebSockets based remote inspector is broken since r201880
+        https://bugs.webkit.org/show_bug.cgi?id=158613
+
+        Reviewed by Michael Catanzaro.
+
+        In r201880 SocketStreamHandleClient was modified to receive references instead of
+        pointers. WebSocketServerConnection also implements SocketStreamHandleClient but since it's doesn't use
+        override, it was unnoticed and not updated, so we ended up using the default empty implementation instead of
+        the WebSocketServerConnection one.
+
+        * UIProcess/InspectorServer/WebSocketServerConnection.cpp:
+        (WebKit::WebSocketServerConnection::WebSocketServerConnection):
+        (WebKit::WebSocketServerConnection::setSocketHandle):
+        (WebKit::WebSocketServerConnection::shutdownNow):
+        (WebKit::WebSocketServerConnection::didCloseSocketStream):
+        (WebKit::WebSocketServerConnection::didReceiveSocketStreamData):
+        (WebKit::WebSocketServerConnection::didUpdateBufferedAmount):
+        (WebKit::WebSocketServerConnection::didFailSocketStream): Deleted.
+        * UIProcess/InspectorServer/WebSocketServerConnection.h:
+
</ins><span class="cx"> 2016-06-22  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS][WK2] Expand sandbox to read voice services preferences
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessInspectorServerWebSocketServerConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp (202366 => 202367)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp        2016-06-23 05:46:10 UTC (rev 202366)
+++ trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp        2016-06-23 06:10:48 UTC (rev 202367)
</span><span class="lines">@@ -47,11 +47,8 @@
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> WebSocketServerConnection::WebSocketServerConnection(WebSocketServerClient* client, WebSocketServer* server)
</span><del>-    : m_identifier(0)
-    , m_mode(HTTP)
-    , m_server(server)
</del><ins>+    : m_server(server)
</ins><span class="cx">     , m_client(client)
</span><del>-    , m_shutdownAfterSend(false)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -60,10 +57,10 @@
</span><span class="cx">     shutdownNow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebSocketServerConnection::setSocketHandle(PassRefPtr&lt;WebCore::SocketStreamHandle&gt; socket)
</del><ins>+void WebSocketServerConnection::setSocketHandle(Ref&lt;SocketStreamHandle&gt;&amp;&amp; socket)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_socket);
</span><del>-    m_socket = socket;
</del><ins>+    m_socket = WTFMove(socket);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebSocketServerConnection::shutdownNow()
</span><span class="lines">@@ -70,7 +67,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_socket)
</span><span class="cx">         return;
</span><del>-    RefPtr&lt;SocketStreamHandle&gt; socket = m_socket.release();
</del><ins>+    auto socket = WTFMove(m_socket);
</ins><span class="cx">     socket-&gt;close();
</span><span class="cx">     m_shutdownAfterSend = false;
</span><span class="cx"> }
</span><span class="lines">@@ -123,7 +120,7 @@
</span><span class="cx">     m_socket-&gt;send(data, length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebSocketServerConnection::didCloseSocketStream(SocketStreamHandle*)
</del><ins>+void WebSocketServerConnection::didCloseSocketStream(SocketStreamHandle&amp;)
</ins><span class="cx"> {
</span><span class="cx">     // Destroy the SocketStreamHandle now to prevent closing an already closed socket later.
</span><span class="cx">     m_socket = nullptr;
</span><span class="lines">@@ -136,7 +133,7 @@
</span><span class="cx">     m_server-&gt;didCloseWebSocketServerConnection(this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebSocketServerConnection::didReceiveSocketStreamData(SocketStreamHandle*, const char* data, int length)
</del><ins>+void WebSocketServerConnection::didReceiveSocketStreamData(SocketStreamHandle&amp;, const char* data, int length)
</ins><span class="cx"> {
</span><span class="cx">     // Each didReceiveData call adds more data to our buffer.
</span><span class="cx">     // We clear the buffer when we have handled data from it.
</span><span class="lines">@@ -155,17 +152,12 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebSocketServerConnection::didUpdateBufferedAmount(WebCore::SocketStreamHandle*, size_t)
</del><ins>+void WebSocketServerConnection::didUpdateBufferedAmount(SocketStreamHandle&amp;, size_t)
</ins><span class="cx"> {
</span><span class="cx">     if (m_shutdownAfterSend &amp;&amp; !m_socket-&gt;bufferedAmount())
</span><span class="cx">         shutdownNow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebSocketServerConnection::didFailSocketStream(SocketStreamHandle*, const SocketStreamError&amp;)
-{
-    // Possible read or write error.
-}
-
</del><span class="cx"> void WebSocketServerConnection::readHTTPMessage()
</span><span class="cx"> {
</span><span class="cx">     String failureReason;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessInspectorServerWebSocketServerConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h (202366 => 202367)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h        2016-06-23 05:46:10 UTC (rev 202366)
+++ trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h        2016-06-23 06:10:48 UTC (rev 202367)
</span><span class="lines">@@ -46,7 +46,7 @@
</span><span class="cx"> class WebSocketServer;
</span><span class="cx"> class WebSocketServerClient;
</span><span class="cx"> 
</span><del>-class WebSocketServerConnection : public WebCore::SocketStreamHandleClient {
</del><ins>+class WebSocketServerConnection final : public WebCore::SocketStreamHandleClient {
</ins><span class="cx"> public:
</span><span class="cx">     enum WebSocketServerMode { HTTP, WebSocket };
</span><span class="cx">     WebSocketServerConnection(WebSocketServerClient*, WebSocketServer*);
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx"> 
</span><span class="cx">     unsigned identifier() const { return m_identifier; }
</span><span class="cx">     void setIdentifier(unsigned id) { m_identifier = id; }
</span><del>-    void setSocketHandle(PassRefPtr&lt;WebCore::SocketStreamHandle&gt;);
</del><ins>+    void setSocketHandle(Ref&lt;WebCore::SocketStreamHandle&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // Sending data over the connection.
</span><span class="cx">     void sendWebSocketMessage(const String&amp; message);
</span><span class="lines">@@ -65,13 +65,12 @@
</span><span class="cx">     void shutdownNow();
</span><span class="cx">     void shutdownAfterSendOrNow();
</span><span class="cx"> 
</span><ins>+private:
</ins><span class="cx">     // SocketStreamHandleClient implementation.
</span><del>-    virtual void didCloseSocketStream(WebCore::SocketStreamHandle*);
-    virtual void didReceiveSocketStreamData(WebCore::SocketStreamHandle*, const char* data, int length);
-    virtual void didUpdateBufferedAmount(WebCore::SocketStreamHandle*, size_t bufferedAmount);
-    virtual void didFailSocketStream(WebCore::SocketStreamHandle*, const WebCore::SocketStreamError&amp;);
</del><ins>+    void didCloseSocketStream(WebCore::SocketStreamHandle&amp;) override;
+    void didReceiveSocketStreamData(WebCore::SocketStreamHandle&amp;, const char* data, int length) override;
+    void didUpdateBufferedAmount(WebCore::SocketStreamHandle&amp;, size_t bufferedAmount) override;
</ins><span class="cx"> 
</span><del>-private:
</del><span class="cx">     // HTTP Mode.
</span><span class="cx">     void readHTTPMessage();
</span><span class="cx"> 
</span><span class="lines">@@ -80,14 +79,13 @@
</span><span class="cx">     void readWebSocketFrames();
</span><span class="cx">     bool readWebSocketFrame();
</span><span class="cx"> 
</span><del>-protected:
-    unsigned m_identifier;
</del><ins>+    unsigned m_identifier { 0 };
</ins><span class="cx">     Vector&lt;char&gt; m_bufferedData;
</span><del>-    WebSocketServerMode m_mode;
</del><ins>+    WebSocketServerMode m_mode { HTTP };
</ins><span class="cx">     RefPtr&lt;WebCore::SocketStreamHandle&gt; m_socket;
</span><del>-    WebSocketServer* m_server;
-    WebSocketServerClient* m_client;
-    bool m_shutdownAfterSend;
</del><ins>+    WebSocketServer* m_server { nullptr };
+    WebSocketServerClient* m_client { nullptr };
+    bool m_shutdownAfterSend { false };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>