Changeset 204512 in webkit
- Timestamp:
- Aug 16, 2016 10:14:42 AM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 15 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r204509 r204512 1 2016-08-16 Alex Christensen <achristensen@webkit.org> 2 3 Clean up WebSockets 4 https://bugs.webkit.org/show_bug.cgi?id=160889 5 6 Reviewed by Darin Adler. 7 8 We should use size_t's instead of ints for data lengths. 9 SocketStreamHandleClient is now purely virtual. 10 A few places that will need SocketStreamHandleImpls instead of SocketStreamHandles now have them. 11 This patch doesn't change behavior. 12 13 * Modules/websockets/WebSocketChannel.cpp: 14 (WebCore::WebSocketChannel::didCloseSocketStream): 15 (WebCore::WebSocketChannel::didReceiveSocketStreamData): 16 * Modules/websockets/WebSocketChannel.h: 17 * platform/network/SocketStreamHandle.cpp: 18 (WebCore::SocketStreamHandle::state): 19 (WebCore::SocketStreamHandle::send): 20 * platform/network/SocketStreamHandle.h: 21 (WebCore::SocketStreamHandle::~SocketStreamHandle): 22 (WebCore::SocketStreamHandle::bufferedAmount): 23 (WebCore::SocketStreamHandle::client): Deleted. 24 * platform/network/SocketStreamHandleClient.h: 25 (WebCore::SocketStreamHandleClient::~SocketStreamHandleClient): 26 (WebCore::SocketStreamHandleClient::didOpenSocketStream): Deleted. 27 (WebCore::SocketStreamHandleClient::didCloseSocketStream): Deleted. 28 (WebCore::SocketStreamHandleClient::didReceiveSocketStreamData): Deleted. 29 (WebCore::SocketStreamHandleClient::didUpdateBufferedAmount): Deleted. 30 (WebCore::SocketStreamHandleClient::didFailSocketStream): Deleted. 31 * platform/network/cf/SocketStreamHandleImpl.h: 32 (WebCore::SocketStreamHandleImpl::create): 33 * platform/network/cf/SocketStreamHandleImplCFNet.cpp: 34 (WebCore::SocketStreamHandleImpl::~SocketStreamHandleImpl): 35 (WebCore::SocketStreamHandleImpl::platformSend): 36 (WebCore::SocketStreamHandleImpl::platformClose): 37 * platform/network/curl/SocketStreamHandleImpl.h: 38 (WebCore::SocketStreamHandleImpl::create): 39 * platform/network/soup/SocketStreamHandleImpl.h: 40 * platform/network/soup/SocketStreamHandleImplSoup.cpp: 41 (WebCore::SocketStreamHandleImpl::create): 42 1 43 2016-08-16 Chris Dumez <cdumez@apple.com> 2 44 -
trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp
r204466 r204512 309 309 } 310 310 311 void WebSocketChannel::didReceiveSocketStreamData(SocketStreamHandle& handle, const char* data, int len) 312 { 313 LOG(Network, "WebSocketChannel %p didReceiveSocketStreamData() Received %d bytes", this, len); 311 void WebSocketChannel::didReceiveSocketStreamData(SocketStreamHandle& handle, const char* data, Optional<size_t> len) 312 { 313 if (len) 314 LOG(Network, "WebSocketChannel %p didReceiveSocketStreamData() Received %zu bytes", this, len.value()); 315 else 316 LOG(Network, "WebSocketChannel %p didReceiveSocketStreamData() Received no bytes", this); 314 317 Ref<WebSocketChannel> protectedThis(*this); // The client can close the channel, potentially removing the last reference. 315 318 ASSERT(&handle == m_handle); … … 317 320 return; 318 321 } 319 if ( len <= 0) {322 if (!len || !len.value()) { 320 323 handle.disconnect(); 321 324 return; … … 328 331 if (m_shouldDiscardReceivedData) 329 332 return; 330 if (!appendToBuffer(data, len )) {333 if (!appendToBuffer(data, len.value())) { 331 334 m_shouldDiscardReceivedData = true; 332 335 fail("Ran out of memory while receiving WebSocket data."); 333 336 return; 334 337 } 335 while (!m_suspended && m_client && !m_buffer.isEmpty()) 338 while (!m_suspended && m_client && !m_buffer.isEmpty()) { 336 339 if (!processBuffer()) 337 340 break; 341 } 338 342 } 339 343 -
trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h
r204465 r204512 81 81 82 82 // SocketStreamHandleClient functions. 83 void didOpenSocketStream(SocketStreamHandle&) override;84 void didCloseSocketStream(SocketStreamHandle&) override;85 void didReceiveSocketStreamData(SocketStreamHandle&, const char*, int) override;86 void didUpdateBufferedAmount(SocketStreamHandle&, size_t bufferedAmount) override;87 void didFailSocketStream(SocketStreamHandle&, const SocketStreamError&) override;83 void didOpenSocketStream(SocketStreamHandle&) final; 84 void didCloseSocketStream(SocketStreamHandle&) final; 85 void didReceiveSocketStreamData(SocketStreamHandle&, const char*, Optional<size_t>) final; 86 void didUpdateBufferedAmount(SocketStreamHandle&, size_t bufferedAmount) final; 87 void didFailSocketStream(SocketStreamHandle&, const SocketStreamError&) final; 88 88 89 89 enum CloseEventCode { -
trunk/Source/WebCore/platform/network/SocketStreamHandle.cpp
r204483 r204512 50 50 } 51 51 52 bool SocketStreamHandle::send(const char* data, int length)52 bool SocketStreamHandle::send(const char* data, size_t length) 53 53 { 54 54 if (m_state == Connecting || m_state == Closing) … … 63 63 return true; 64 64 } 65 int bytesWritten = 0; 66 if (m_state == Open) 67 bytesWritten = platformSend(data, length); 68 if (bytesWritten < 0) 69 return false; 65 size_t bytesWritten = 0; 66 if (m_state == Open) { 67 if (auto result = platformSend(data, length)) 68 bytesWritten = result.value(); 69 else 70 return false; 71 } 70 72 if (m_buffer.size() + length - bytesWritten > bufferSize) { 71 73 // FIXME: report error to indicate that buffer has no more space. … … 111 113 bool pending; 112 114 do { 113 int bytesWritten = platformSend(m_buffer.firstBlockData(), m_buffer.firstBlockSize()); 114 pending = bytesWritten != static_cast<int>(m_buffer.firstBlockSize()); 115 if (bytesWritten <= 0) 115 auto result = platformSend(m_buffer.firstBlockData(), m_buffer.firstBlockSize()); 116 if (!result) 116 117 return false; 118 size_t bytesWritten = result.value(); 119 if (!bytesWritten) 120 return false; 121 pending = bytesWritten != m_buffer.firstBlockSize(); 117 122 ASSERT(m_buffer.size() - bytesWritten <= bufferSize); 118 123 m_buffer.consume(bytesWritten); -
trunk/Source/WebCore/platform/network/SocketStreamHandle.h
r204483 r204512 46 46 SocketStreamState state() const; 47 47 48 bool send(const char* data, int length);48 bool send(const char* data, size_t length); 49 49 void close(); // Disconnect after all data in buffer are sent. 50 50 void disconnect(); 51 51 size_t bufferedAmount() const { return m_buffer.size(); } 52 53 SocketStreamHandleClient& client() const { return m_client; }54 52 55 53 protected: … … 57 55 58 56 bool sendPendingData(); 59 virtual int platformSend(const char* data, int length) = 0;57 virtual Optional<size_t> platformSend(const char* data, size_t length) = 0; 60 58 virtual void platformClose() = 0; 61 59 -
trunk/Source/WebCore/platform/network/SocketStreamHandleClient.h
r204465 r204512 32 32 #pragma once 33 33 34 #include <wtf/Optional.h> 35 34 36 namespace WebCore { 35 37 … … 41 43 virtual ~SocketStreamHandleClient() { } 42 44 43 virtual void didOpenSocketStream(SocketStreamHandle&) { } 44 virtual void didCloseSocketStream(SocketStreamHandle&) { } 45 virtual void didReceiveSocketStreamData(SocketStreamHandle&, const char* /*data*/, int /*length*/) { } 46 virtual void didUpdateBufferedAmount(SocketStreamHandle&, size_t /*bufferedAmount*/) { } 47 48 virtual void didFailSocketStream(SocketStreamHandle&, const SocketStreamError&) { } 45 virtual void didOpenSocketStream(SocketStreamHandle&) = 0; 46 virtual void didCloseSocketStream(SocketStreamHandle&) = 0; 47 virtual void didReceiveSocketStreamData(SocketStreamHandle&, const char* data, Optional<size_t> length) = 0; 48 virtual void didUpdateBufferedAmount(SocketStreamHandle&, size_t bufferedAmount) = 0; 49 virtual void didFailSocketStream(SocketStreamHandle&, const SocketStreamError&) = 0; 49 50 }; 50 51 -
trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImpl.h
r204483 r204512 46 46 class SocketStreamHandleImpl : public SocketStreamHandle { 47 47 public: 48 static Ref<SocketStreamHandle > create(const URL& url, SocketStreamHandleClient& client, SessionID sessionID) { return adoptRef(*new SocketStreamHandleImpl(url, client, sessionID)); }48 static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, SessionID sessionID) { return adoptRef(*new SocketStreamHandleImpl(url, client, sessionID)); } 49 49 50 50 virtual ~SocketStreamHandleImpl(); 51 51 52 52 private: 53 virtual int platformSend(const char* data, int length);53 virtual Optional<size_t> platformSend(const char* data, size_t length); 54 54 virtual void platformClose(); 55 55 -
trunk/Source/WebCore/platform/network/cf/SocketStreamHandleImplCFNet.cpp
r204483 r204512 537 537 return; 538 538 539 m_client.didReceiveSocketStreamData(*this, reinterpret_cast<const char*>(ptr), length); 539 Optional<size_t> optionalLength; 540 if (length != -1) 541 optionalLength = length; 542 543 m_client.didReceiveSocketStreamData(*this, reinterpret_cast<const char*>(ptr), optionalLength); 540 544 541 545 return; … … 650 654 } 651 655 652 int SocketStreamHandleImpl::platformSend(const char* data, int length)656 Optional<size_t> SocketStreamHandleImpl::platformSend(const char* data, size_t length) 653 657 { 654 658 if (!CFWriteStreamCanAcceptBytes(m_writeStream.get())) 655 return 0; 656 657 return CFWriteStreamWrite(m_writeStream.get(), reinterpret_cast<const UInt8*>(data), length); 659 return Nullopt; 660 661 CFIndex result = CFWriteStreamWrite(m_writeStream.get(), reinterpret_cast<const UInt8*>(data), length); 662 if (result == -1) 663 return Nullopt; 664 665 ASSERT(result >= 0); 666 return static_cast<size_t>(result); 658 667 } 659 668 -
trunk/Source/WebCore/platform/network/curl/SocketStreamHandleImpl.h
r204483 r204512 51 51 class SocketStreamHandleImpl : public SocketStreamHandle { 52 52 public: 53 static Ref<SocketStreamHandle > create(const URL& url, SocketStreamHandleClient& client, SessionID) { return adoptRef(*new SocketStreamHandleImpl(url, client)); }53 static Ref<SocketStreamHandleImpl> create(const URL& url, SocketStreamHandleClient& client, SessionID) { return adoptRef(*new SocketStreamHandleImpl(url, client)); } 54 54 55 55 virtual ~SocketStreamHandleImpl(); … … 58 58 SocketStreamHandleImpl(const URL&, SocketStreamHandleClient&); 59 59 60 int platformSend(const char* data, int length) override;61 void platformClose() override;60 Optional<size_t> platformSend(const char* data, size_t length) final; 61 void platformClose() final; 62 62 63 63 bool readData(CURL*); … … 71 71 void didOpenSocket(); 72 72 73 static std::unique_ptr<char[]> createCopy(const char* data, int length);73 static std::unique_ptr<char[]> createCopy(const char* data, size_t length); 74 74 75 75 struct SocketData { 76 SocketData(std::unique_ptr<char[]>&& source, int length)76 SocketData(std::unique_ptr<char[]>&& source, size_t length) 77 77 { 78 78 data = WTFMove(source); … … 88 88 89 89 std::unique_ptr<char[]> data; 90 int size { 0 };90 size_t size { 0 }; 91 91 }; 92 92 -
trunk/Source/WebCore/platform/network/curl/SocketStreamHandleImplCurl.cpp
r204483 r204512 59 59 } 60 60 61 int SocketStreamHandleImpl::platformSend(const char* data, int length)61 Optional<size_t> SocketStreamHandleImpl::platformSend(const char* data, size_t length) 62 62 { 63 63 LOG(Network, "SocketStreamHandle %p platformSend", this); … … 90 90 ASSERT(!isMainThread()); 91 91 92 const int bufferSize = 1024;92 const size_t bufferSize = 1024; 93 93 std::unique_ptr<char[]> data(new char[bufferSize]); 94 94 size_t bytesRead = 0; … … 98 98 if (ret == CURLE_OK && bytesRead >= 0) { 99 99 m_mutexReceive.lock(); 100 m_receiveData.append(SocketData { WTFMove(data), static_cast<int>(bytesRead)});100 m_receiveData.append(SocketData { WTFMove(data), bytesRead }); 101 101 m_mutexReceive.unlock(); 102 102 … … 131 131 m_mutexSend.unlock(); 132 132 133 int totalBytesSent = 0;133 size_t totalBytesSent = 0; 134 134 while (totalBytesSent < sendData.size) { 135 135 size_t bytesSent = 0; … … 144 144 145 145 if (totalBytesSent < sendData.size) { 146 const int restLength = sendData.size - totalBytesSent;146 const size_t restLength = sendData.size - totalBytesSent; 147 147 auto copy = createCopy(sendData.data.get() + totalBytesSent, restLength); 148 148 -
trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImpl.h
r204483 r204512 48 48 class SocketStreamHandleImpl final : public SocketStreamHandle { 49 49 public: 50 static Ref<SocketStreamHandle > create(const URL&, SocketStreamHandleClient&, SessionID);50 static Ref<SocketStreamHandleImpl> create(const URL&, SocketStreamHandleClient&, SessionID); 51 51 static Ref<SocketStreamHandle> create(GSocketConnection*, SocketStreamHandleClient&); 52 52 … … 56 56 SocketStreamHandleImpl(const URL&, SocketStreamHandleClient&); 57 57 58 int platformSend(const char* data, int length) override;59 void platformClose() override;58 Optional<size_t> platformSend(const char* data, size_t length) final; 59 void platformClose() final; 60 60 61 61 void beginWaitingForSocketWritability(); -
trunk/Source/WebCore/platform/network/soup/SocketStreamHandleImplSoup.cpp
r204501 r204512 49 49 namespace WebCore { 50 50 51 Ref<SocketStreamHandle > SocketStreamHandleImpl::create(const URL& url, SocketStreamHandleClient& client, SessionID)51 Ref<SocketStreamHandleImpl> SocketStreamHandleImpl::create(const URL& url, SocketStreamHandleClient& client, SessionID) 52 52 { 53 53 Ref<SocketStreamHandleImpl> socket = adoptRef(*new SocketStreamHandleImpl(url, client)); … … 60 60 g_socket_client_connect_to_host_async(socketClient.get(), url.host().utf8().data(), port, socket->m_cancellable.get(), 61 61 reinterpret_cast<GAsyncReadyCallback>(connectedCallback), &protectedSocketStreamHandle.leakRef()); 62 return WTFMove(socket);62 return socket; 63 63 } 64 64 … … 129 129 // The client can close the handle, potentially removing the last reference. 130 130 RefPtr<SocketStreamHandle> protectedThis(this); 131 m_client.didReceiveSocketStreamData(*this, m_readBuffer.get(), bytesRead); 131 Optional<size_t> optionalLength; 132 if (bytesRead != -1) 133 optionalLength = static_cast<size_t>(bytesRead); 134 m_client.didReceiveSocketStreamData(*this, m_readBuffer.get(), optionalLength); 132 135 if (m_inputStream) { 133 136 g_input_stream_read_async(m_inputStream.get(), m_readBuffer.get(), READ_BUFFER_SIZE, G_PRIORITY_DEFAULT, m_cancellable.get(), … … 169 172 } 170 173 171 int SocketStreamHandleImpl::platformSend(const char* data, int length)174 Optional<size_t> SocketStreamHandleImpl::platformSend(const char* data, size_t length) 172 175 { 173 176 LOG(Network, "SocketStreamHandle %p platformSend", this); 174 177 if (!m_outputStream || !data) 175 return 0;178 return Nullopt; 176 179 177 180 GUniqueOutPtr<GError> error; … … 182 185 else 183 186 didFail(SocketStreamError(error->code, String(), error->message)); 184 return 0;187 return Nullopt; 185 188 } 186 189 187 190 // If we did not send all the bytes we were given, we know that 188 191 // SocketStreamHandle will need to send more in the future. 189 if (written < length)192 if (written == -1 || static_cast<size_t>(written) < length) 190 193 beginWaitingForSocketWritability(); 191 194 192 return written; 195 if (written == -1) 196 return Nullopt; 197 198 return static_cast<size_t>(written); 193 199 } 194 200 -
trunk/Source/WebKit2/ChangeLog
r204509 r204512 1 2016-08-16 Alex Christensen <achristensen@webkit.org> 2 3 Clean up WebSockets 4 https://bugs.webkit.org/show_bug.cgi?id=160889 5 6 Reviewed by Darin Adler. 7 8 * UIProcess/InspectorServer/WebSocketServerConnection.cpp: 9 (WebKit::WebSocketServerConnection::didCloseSocketStream): 10 (WebKit::WebSocketServerConnection::didReceiveSocketStreamData): 11 * UIProcess/InspectorServer/WebSocketServerConnection.h: 12 1 13 2016-08-16 Chris Dumez <cdumez@apple.com> 2 14 -
trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.cpp
r202367 r204512 134 134 } 135 135 136 void WebSocketServerConnection::didReceiveSocketStreamData(SocketStreamHandle&, const char* data, intlength)136 void WebSocketServerConnection::didReceiveSocketStreamData(SocketStreamHandle&, const char* data, Optional<size_t> length) 137 137 { 138 138 // Each didReceiveData call adds more data to our buffer. 139 139 // We clear the buffer when we have handled data from it. 140 m_bufferedData.append(data, length); 140 if (length) 141 m_bufferedData.append(data, length.value()); 141 142 142 143 switch (m_mode) { -
trunk/Source/WebKit2/UIProcess/InspectorServer/WebSocketServerConnection.h
r202367 r204512 25 25 */ 26 26 27 #ifndef WebSocketServerConnection_h 28 #define WebSocketServerConnection_h 27 #pragma once 29 28 30 29 #if ENABLE(INSPECTOR_SERVER) … … 38 37 namespace WebCore { 39 38 class HTTPHeaderMap; 39 class SocketStreamError; 40 40 class SocketStreamHandle; 41 41 } … … 68 68 private: 69 69 // SocketStreamHandleClient implementation. 70 void didCloseSocketStream(WebCore::SocketStreamHandle&) override; 71 void didReceiveSocketStreamData(WebCore::SocketStreamHandle&, const char* data, int length) override; 72 void didUpdateBufferedAmount(WebCore::SocketStreamHandle&, size_t bufferedAmount) override; 70 void didOpenSocketStream(WebCore::SocketStreamHandle&) final { } 71 void didCloseSocketStream(WebCore::SocketStreamHandle&) final; 72 void didReceiveSocketStreamData(WebCore::SocketStreamHandle&, const char* data, Optional<size_t> length) final; 73 void didUpdateBufferedAmount(WebCore::SocketStreamHandle&, size_t bufferedAmount) final; 74 void didFailSocketStream(WebCore::SocketStreamHandle&, const WebCore::SocketStreamError&) final { } 73 75 74 76 // HTTP Mode. … … 92 94 93 95 #endif // ENABLE(INSPECTOR_SERVER) 94 95 #endif // WebSocketServerConnection_h
Note: See TracChangeset
for help on using the changeset viewer.