Index: Source/modules/websockets/WebSocket.cpp |
diff --git a/Source/modules/websockets/WebSocket.cpp b/Source/modules/websockets/WebSocket.cpp |
index 1452cae0b26a0db80fa64eb0c1105f44b6a38bc5..7a5380798f601d660c93019ca9328ea6a1e8caed 100644 |
--- a/Source/modules/websockets/WebSocket.cpp |
+++ b/Source/modules/websockets/WebSocket.cpp |
@@ -227,11 +227,13 @@ WebSocket::WebSocket(ExecutionContext* context) |
: ActiveDOMObject(context) |
, m_state(CONNECTING) |
, m_bufferedAmount(0) |
+ , m_bufferedAmountDecrease(0) |
, m_bufferedAmountAfterClose(0) |
, m_binaryType(BinaryTypeBlob) |
, m_subprotocol("") |
, m_extensions("") |
, m_eventQueue(EventQueue::create(this)) |
+ , m_bufferedAmountDecreaseTimer(this, &WebSocket::decreaseBufferedAmount) |
{ |
ScriptWrappable::init(this); |
} |
@@ -372,6 +374,15 @@ void WebSocket::updateBufferedAmountAfterClose(unsigned long payloadSize) |
logError("WebSocket is already in CLOSING or CLOSED state."); |
} |
+void WebSocket::decreaseBufferedAmount(Timer<WebSocket>*) |
+{ |
+ ASSERT(m_bufferedAmount >= m_bufferedAmountDecrease); |
+ WTF_LOG(Network, "WebSocket %p decreaseBufferedAmount() %lu => %lu", this, m_bufferedAmount, m_bufferedAmount - m_bufferedAmountDecrease); |
+ |
+ m_bufferedAmount -= m_bufferedAmountDecrease; |
+ m_bufferedAmountDecrease = 0; |
+} |
+ |
void WebSocket::releaseChannel() |
{ |
ASSERT(m_channel); |
@@ -639,12 +650,23 @@ void WebSocket::didReceiveMessageError() |
m_eventQueue->dispatch(Event::create(EventTypeNames::error)); |
} |
-void WebSocket::didUpdateBufferedAmount(unsigned long bufferedAmount) |
+void WebSocket::didIncreaseBufferedAmount(unsigned long amount) |
+{ |
+ WTF_LOG(Network, "WebSocket %p didIncreaseBufferedAmount() %lu => %lu", this, m_bufferedAmount, m_bufferedAmount + amount); |
+ if (m_state == CLOSED) |
+ return; |
+ m_bufferedAmount += amount; |
+} |
+ |
+void WebSocket::didDecreaseBufferedAmount(unsigned long amount) |
{ |
- WTF_LOG(Network, "WebSocket %p didUpdateBufferedAmount() New bufferedAmount is %lu", this, bufferedAmount); |
+ ASSERT(m_bufferedAmount >= amount); |
+ WTF_LOG(Network, "WebSocket %p didDecreaseBufferedAmount(%lu)", this, amount); |
if (m_state == CLOSED) |
return; |
- m_bufferedAmount = bufferedAmount; |
+ m_bufferedAmountDecrease += amount; |
+ if (!m_bufferedAmountDecreaseTimer.isActive()) |
+ m_bufferedAmountDecreaseTimer.startOneShot(0, FROM_HERE); |
} |
void WebSocket::didStartClosingHandshake() |
@@ -659,7 +681,6 @@ void WebSocket::didClose(unsigned long unhandledBufferedAmount, ClosingHandshake |
if (!m_channel) |
return; |
bool wasClean = m_state == CLOSING && !unhandledBufferedAmount && closingHandshakeCompletion == ClosingHandshakeComplete && code != WebSocketChannel::CloseEventCodeAbnormalClosure; |
- |
m_state = CLOSED; |
tyoshino (SeeGerritForStatus)
2014/06/09 09:24:26
is this change accidental?
anyway i'm fine with e
yhirano
2014/06/09 11:59:51
Reverted
|
m_bufferedAmount = unhandledBufferedAmount; |
tyoshino (SeeGerritForStatus)
2014/06/09 09:24:26
is it possible unhandledBufferedAmount and m_buffe
yhirano
2014/06/09 11:59:51
I noticed I didn't understand why unhandledBuffere
tyoshino (SeeGerritForStatus)
2014/06/10 07:24:56
Took a look at the code and history of it. I agree
|
m_eventQueue->dispatch(CloseEvent::create(wasClean, code, reason)); |