| Index: trunk/Source/modules/websockets/NewWebSocketChannelImpl.cpp
|
| ===================================================================
|
| --- trunk/Source/modules/websockets/NewWebSocketChannelImpl.cpp (revision 176310)
|
| +++ trunk/Source/modules/websockets/NewWebSocketChannelImpl.cpp (working copy)
|
| @@ -115,6 +115,7 @@
|
| , m_identifier(0)
|
| , m_sendingQuota(0)
|
| , m_receivedDataSizeForFlowControl(receivedDataSizeForFlowControlHighWaterMark * 2) // initial quota
|
| + , m_bufferedAmount(0)
|
| , m_sentSizeOfTopMessage(0)
|
| , m_sourceURLAtConstruction(sourceURL)
|
| , m_lineNumberAtConstruction(lineNumber)
|
| @@ -228,6 +229,12 @@
|
| return SendSuccess;
|
| }
|
|
|
| +unsigned long NewWebSocketChannelImpl::bufferedAmount() const
|
| +{
|
| + WTF_LOG(Network, "NewWebSocketChannelImpl %p bufferedAmount()", this);
|
| + return m_bufferedAmount;
|
| +}
|
| +
|
| void NewWebSocketChannelImpl::close(int code, const String& reason)
|
| {
|
| WTF_LOG(Network, "NewWebSocketChannelImpl %p close(%d, %s)", this, code, reason.utf8().data());
|
| @@ -298,7 +305,7 @@
|
| void NewWebSocketChannelImpl::sendInternal()
|
| {
|
| ASSERT(m_handle);
|
| - unsigned long consumedBufferedAmount = 0;
|
| + unsigned long bufferedAmount = m_bufferedAmount;
|
| while (!m_messages.isEmpty() && m_sendingQuota > 0 && !m_blobLoader) {
|
| bool final = false;
|
| Message* message = m_messages.first().get();
|
| @@ -311,7 +318,6 @@
|
| m_handle->send(final, type, message->text.data() + m_sentSizeOfTopMessage, size);
|
| m_sentSizeOfTopMessage += size;
|
| m_sendingQuota -= size;
|
| - consumedBufferedAmount += size;
|
| break;
|
| }
|
| case MessageTypeBlob:
|
| @@ -326,7 +332,6 @@
|
| m_handle->send(final, type, static_cast<const char*>(message->arrayBuffer->data()) + m_sentSizeOfTopMessage, size);
|
| m_sentSizeOfTopMessage += size;
|
| m_sendingQuota -= size;
|
| - consumedBufferedAmount += size;
|
| break;
|
| }
|
| case MessageTypeVector: {
|
| @@ -337,7 +342,6 @@
|
| m_handle->send(final, type, message->vectorData->data() + m_sentSizeOfTopMessage, size);
|
| m_sentSizeOfTopMessage += size;
|
| m_sendingQuota -= size;
|
| - consumedBufferedAmount += size;
|
| break;
|
| }
|
| }
|
| @@ -346,8 +350,9 @@
|
| m_sentSizeOfTopMessage = 0;
|
| }
|
| }
|
| - if (m_client && consumedBufferedAmount > 0)
|
| - m_client->didConsumeBufferedAmount(consumedBufferedAmount);
|
| + if (m_client && m_bufferedAmount != bufferedAmount) {
|
| + m_client->didUpdateBufferedAmount(m_bufferedAmount);
|
| + }
|
| }
|
|
|
| void NewWebSocketChannelImpl::flowControlIfNecessary()
|
| @@ -378,7 +383,7 @@
|
| m_client = 0;
|
| WebSocketChannelClient::ClosingHandshakeCompletionStatus status =
|
| wasClean ? WebSocketChannelClient::ClosingHandshakeComplete : WebSocketChannelClient::ClosingHandshakeIncomplete;
|
| - client->didClose(status, code, reason);
|
| + client->didClose(m_bufferedAmount, status, code, reason);
|
| // client->didClose may delete this object.
|
| }
|
|
|
|
|