Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2094)

Unified Diff: Source/modules/websockets/WebSocket.cpp

Issue 311993006: [WebSocket] bufferedAmount should not decrease inside a task. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698