Chromium Code Reviews| Index: Source/web/WebSocketImpl.cpp |
| diff --git a/Source/web/WebSocketImpl.cpp b/Source/web/WebSocketImpl.cpp |
| index b8bd5fcfb7c7fb0e36cbceff3bc3bfc336fce2ec..dc964f53d51645d8482bb4eac4790c4049e7e55f 100644 |
| --- a/Source/web/WebSocketImpl.cpp |
| +++ b/Source/web/WebSocketImpl.cpp |
| @@ -42,6 +42,7 @@ |
| #include "public/platform/WebURL.h" |
| #include "public/web/WebDocument.h" |
| #include "wtf/ArrayBuffer.h" |
| +#include "wtf/text/CString.h" |
| #include "wtf/text/WTFString.h" |
| using namespace WebCore; |
| @@ -51,6 +52,9 @@ namespace blink { |
| WebSocketImpl::WebSocketImpl(const WebDocument& document, WebSocketClient* client) |
| : m_client(client) |
| , m_binaryType(BinaryTypeBlob) |
| + , m_isClosingOrClosed(false) |
| + , m_bufferedAmount(0) |
| + , m_bufferedAmountAfterClose(0) |
| { |
| RefPtrWillBeRawPtr<Document> coreDocument = PassRefPtrWillBeRawPtr<Document>(document); |
| if (RuntimeEnabledFeatures::experimentalWebSocketEnabled()) { |
| @@ -95,21 +99,44 @@ WebString WebSocketImpl::extensions() |
| bool WebSocketImpl::sendText(const WebString& message) |
| { |
| + size_t size = message.utf8().length(); |
| + m_bufferedAmount += size; |
| + if (m_isClosingOrClosed) |
| + m_bufferedAmountAfterClose += size; |
| + |
| + // FIXME: Deprecate this call. |
| + m_client->didUpdateBufferedAmount(m_bufferedAmount); |
| + |
| + if (m_isClosingOrClosed) |
|
yhirano
2014/06/19 07:49:43
I added return here in order not to send messages
|
| + return true; |
| + |
| return m_private->send(message) == WebSocketChannel::SendSuccess; |
| } |
| bool WebSocketImpl::sendArrayBuffer(const WebArrayBuffer& webArrayBuffer) |
| { |
| + size_t size = webArrayBuffer.byteLength(); |
| + m_bufferedAmount += size; |
| + if (m_isClosingOrClosed) |
| + m_bufferedAmountAfterClose += size; |
| + |
| + // FIXME: Deprecate this call. |
| + m_client->didUpdateBufferedAmount(m_bufferedAmount); |
| + |
| + if (m_isClosingOrClosed) |
| + return true; |
| + |
| return m_private->send(*PassRefPtr<ArrayBuffer>(webArrayBuffer), 0, webArrayBuffer.byteLength()) == WebSocketChannel::SendSuccess; |
| } |
| unsigned long WebSocketImpl::bufferedAmount() const |
| { |
| - return m_private->bufferedAmount(); |
| + return m_bufferedAmount; |
| } |
| void WebSocketImpl::close(int code, const WebString& reason) |
| { |
| + m_isClosingOrClosed = true; |
| m_private->close(code, reason); |
| } |
| @@ -126,6 +153,9 @@ void WebSocketImpl::disconnect() |
| void WebSocketImpl::didConnect(const String& subprotocol, const String& extensions) |
| { |
| + m_client->didConnect(subprotocol, extensions); |
| + |
| + // FIXME: Deprecate these statements. |
| m_subprotocol = subprotocol; |
| m_extensions = extensions; |
| m_client->didConnect(); |
| @@ -153,9 +183,13 @@ void WebSocketImpl::didReceiveMessageError() |
| m_client->didReceiveMessageError(); |
| } |
| -void WebSocketImpl::didUpdateBufferedAmount(unsigned long bufferedAmount) |
| +void WebSocketImpl::didConsumeBufferedAmount(unsigned long consumed) |
| { |
| - m_client->didUpdateBufferedAmount(bufferedAmount); |
| + m_client->didConsumeBufferedAmount(consumed); |
| + |
| + // FIXME: Deprecate the following statements. |
| + m_bufferedAmount -= consumed; |
| + m_client->didUpdateBufferedAmount(m_bufferedAmount); |
| } |
| void WebSocketImpl::didStartClosingHandshake() |
| @@ -163,9 +197,13 @@ void WebSocketImpl::didStartClosingHandshake() |
| m_client->didStartClosingHandshake(); |
| } |
| -void WebSocketImpl::didClose(unsigned long bufferedAmount, ClosingHandshakeCompletionStatus status, unsigned short code, const String& reason) |
| +void WebSocketImpl::didClose(ClosingHandshakeCompletionStatus status, unsigned short code, const String& reason) |
| { |
| - m_client->didClose(bufferedAmount, static_cast<WebSocketClient::ClosingHandshakeCompletionStatus>(status), code, WebString(reason)); |
| + m_isClosingOrClosed = true; |
| + m_client->didClose(static_cast<WebSocketClient::ClosingHandshakeCompletionStatus>(status), code, WebString(reason)); |
| + |
| + // FIXME: Deprecate this call. |
| + m_client->didClose(m_bufferedAmount - m_bufferedAmountAfterClose, static_cast<WebSocketClient::ClosingHandshakeCompletionStatus>(status), code, WebString(reason)); |
| } |
| } // namespace blink |