Diff
Modified: trunk/Source/WebCore/ChangeLog (101506 => 101507)
--- trunk/Source/WebCore/ChangeLog 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/ChangeLog 2011-11-30 14:47:07 UTC (rev 101507)
@@ -1,3 +1,37 @@
+2011-11-30 Takashi Toyoshima <[email protected]>
+
+ Add didUpdateBufferedAmount() callback to SocketStreamHandleClient
+ and WebSocketChannelClient.
+ https://bugs.webkit.org/show_bug.cgi?id=73290
+
+ Reviewed by Kent Tamura.
+
+ No new tests because this callback is not used in WebCore.
+
+ * platform/network/SocketStreamHandleBase.cpp: Invoke new callback.
+ (WebCore::SocketStreamHandleBase::send):
+ (WebCore::SocketStreamHandleBase::sendPendingData):
+ * platform/network/SocketStreamHandleBase.h: Change returning value type.
+ (WebCore::SocketStreamHandleBase::bufferedAmount):
+ * platform/network/SocketStreamHandleClient.h: Add new callback definition.
+ (WebCore::SocketStreamHandleClient::didUpdateBufferedAmount):
+ * websockets/ThreadableWebSocketChannelClientWrapper.cpp: Add new callback handling.
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback):
+ * websockets/ThreadableWebSocketChannelClientWrapper.h: Add new callback inheritance and its helper method.
+ * websockets/WebSocket.cpp: Add new callback handling.
+ (WebCore::WebSocket::didUpdateBufferedAmount):
+ * websockets/WebSocket.h: Add new callback inheritance.
+ * websockets/WebSocketChannel.cpp: Add new callback handling.
+ (WebCore::WebSocketChannel::didUpdateBufferedAmount):
+ * websockets/WebSocketChannel.h: Add new callback inheritacne.
+ * websockets/WebSocketChannelClient.h: Add new callback definition.
+ (WebCore::WebSocketChannelClient::didUpdateBufferedAmount):
+ * websockets/WorkerThreadableWebSocketChannel.cpp: Add new callback handling.
+ (WebCore::workerContextDidUpdateBufferedAmount):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
+ * websockets/WorkerThreadableWebSocketChannel.h: Add new callback inheritance and its helper method.
+
2011-11-30 Kentaro Hara <[email protected]>
[Refactoring] In preprocessor.pm, remove double quotations from $defines
Modified: trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp (101506 => 101507)
--- trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/platform/network/SocketStreamHandleBase.cpp 2011-11-30 14:47:07 UTC (rev 101507)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -60,6 +60,8 @@
return false;
}
m_buffer.append(data, length);
+ if (m_client)
+ m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle*>(this), bufferedAmount());
return true;
}
int bytesWritten = 0;
@@ -71,8 +73,11 @@
// FIXME: report error to indicate that buffer has no more space.
return false;
}
- if (bytesWritten < length)
+ if (bytesWritten < length) {
m_buffer.append(data + bytesWritten, length - bytesWritten);
+ if (m_client)
+ m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle*>(this), bufferedAmount());
+ }
return true;
}
@@ -119,6 +124,8 @@
ASSERT(m_buffer.size() - bytesWritten <= bufferSize);
remainingData.append(m_buffer.data() + bytesWritten, m_buffer.size() - bytesWritten);
m_buffer.swap(remainingData);
+ if (m_client)
+ m_client->didUpdateBufferedAmount(static_cast<SocketStreamHandle*>(this), bufferedAmount());
return true;
}
Modified: trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h (101506 => 101507)
--- trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/platform/network/SocketStreamHandleBase.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -50,7 +50,7 @@
bool send(const char* data, int length);
void close(); // Disconnect after all data in buffer are sent.
void disconnect();
- int bufferedAmount() const { return m_buffer.size(); }
+ size_t bufferedAmount() const { return m_buffer.size(); }
SocketStreamHandleClient* client() const { return m_client; }
void setClient(SocketStreamHandleClient*);
Modified: trunk/Source/WebCore/platform/network/SocketStreamHandleClient.h (101506 => 101507)
--- trunk/Source/WebCore/platform/network/SocketStreamHandleClient.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/platform/network/SocketStreamHandleClient.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
- * Copyright (C) 2009 Google Inc. All rights reserved.
+ * Copyright (C) 2009, 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
@@ -46,6 +46,7 @@
virtual void didOpenSocketStream(SocketStreamHandle*) { }
virtual void didCloseSocketStream(SocketStreamHandle*) { }
virtual void didReceiveSocketStreamData(SocketStreamHandle*, const char* /*data*/, int /*length*/) { }
+ virtual void didUpdateBufferedAmount(SocketStreamHandle*, size_t bufferedAmount) { }
virtual void didFailSocketStream(SocketStreamHandle*, const SocketStreamError&) { }
Modified: trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp (101506 => 101507)
--- trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2011-11-30 14:47:07 UTC (rev 101507)
@@ -143,6 +143,13 @@
processPendingTasks();
}
+void ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount(unsigned long bufferedAmount)
+{
+ m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback, AllowCrossThreadAccess(this), bufferedAmount));
+ if (!m_suspended)
+ processPendingTasks();
+}
+
void ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake()
{
m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback, AllowCrossThreadAccess(this)));
@@ -198,6 +205,13 @@
wrapper->m_client->didReceiveBinaryData(binaryData);
}
+void ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmountCallback(ScriptExecutionContext* context, ThreadableWebSocketChannelClientWrapper* wrapper, unsigned long bufferedAmount)
+{
+ ASSERT_UNUSED(context, !context);
+ if (wrapper->m_client)
+ wrapper->m_client->didUpdateBufferedAmount(bufferedAmount);
+}
+
void ThreadableWebSocketChannelClientWrapper::didStartClosingHandshakeCallback(ScriptExecutionContext* context, ThreadableWebSocketChannelClientWrapper* wrapper)
{
ASSERT_UNUSED(context, !context);
Modified: trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h (101506 => 101507)
--- trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -74,6 +74,7 @@
void didConnect();
void didReceiveMessage(const String& message);
void didReceiveBinaryData(PassOwnPtr<Vector<char> >);
+ void didUpdateBufferedAmount(unsigned long bufferedAmount);
void didStartClosingHandshake();
void didClose(unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus, unsigned short code, const String& reason);
@@ -87,6 +88,7 @@
static void didConnectCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*);
static void didReceiveMessageCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*, const String& message);
static void didReceiveBinaryDataCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*, PassOwnPtr<Vector<char> >);
+ static void didUpdateBufferedAmountCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*, unsigned long bufferedAmount);
static void didStartClosingHandshakeCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*);
static void didCloseCallback(ScriptExecutionContext*, ThreadableWebSocketChannelClientWrapper*, unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus, unsigned short code, const String& reason);
Modified: trunk/Source/WebCore/websockets/WebSocket.cpp (101506 => 101507)
--- trunk/Source/WebCore/websockets/WebSocket.cpp 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WebSocket.cpp 2011-11-30 14:47:07 UTC (rev 101507)
@@ -505,6 +505,11 @@
dispatchEvent(Event::create(eventNames().errorEvent, false, false));
}
+void WebSocket::didUpdateBufferedAmount(unsigned long bufferedAmount)
+{
+ LOG(Network, "WebSocket %p didUpdateBufferedAmount %lu", this, bufferedAmount);
+}
+
void WebSocket::didStartClosingHandshake()
{
LOG(Network, "WebSocket %p didStartClosingHandshake", this);
Modified: trunk/Source/WebCore/websockets/WebSocket.h (101506 => 101507)
--- trunk/Source/WebCore/websockets/WebSocket.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WebSocket.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -106,6 +106,7 @@
virtual void didReceiveMessage(const String& message);
virtual void didReceiveBinaryData(PassOwnPtr<Vector<char> >);
virtual void didReceiveMessageError();
+ virtual void didUpdateBufferedAmount(unsigned long bufferedAmount);
virtual void didStartClosingHandshake();
virtual void didClose(unsigned long unhandledBufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const String& reason);
Modified: trunk/Source/WebCore/websockets/WebSocketChannel.cpp (101506 => 101507)
--- trunk/Source/WebCore/websockets/WebSocketChannel.cpp 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WebSocketChannel.cpp 2011-11-30 14:47:07 UTC (rev 101507)
@@ -325,6 +325,12 @@
break;
}
+void WebSocketChannel::didUpdateBufferedAmount(SocketStreamHandle* handle, size_t bufferedAmount)
+{
+ if (m_client)
+ m_client->didUpdateBufferedAmount(bufferedAmount);
+}
+
void WebSocketChannel::didFailSocketStream(SocketStreamHandle* handle, const SocketStreamError& error)
{
LOG(Network, "WebSocketChannel %p didFailSocketStream", this);
Modified: trunk/Source/WebCore/websockets/WebSocketChannel.h (101506 => 101507)
--- trunk/Source/WebCore/websockets/WebSocketChannel.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WebSocketChannel.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -81,6 +81,7 @@
virtual void didOpenSocketStream(SocketStreamHandle*);
virtual void didCloseSocketStream(SocketStreamHandle*);
virtual void didReceiveSocketStreamData(SocketStreamHandle*, const char*, int);
+ virtual void didUpdateBufferedAmount(SocketStreamHandle*, size_t bufferedAmount);
virtual void didFailSocketStream(SocketStreamHandle*, const SocketStreamError&);
virtual void didReceiveAuthenticationChallenge(SocketStreamHandle*, const AuthenticationChallenge&);
virtual void didCancelAuthenticationChallenge(SocketStreamHandle*, const AuthenticationChallenge&);
Modified: trunk/Source/WebCore/websockets/WebSocketChannelClient.h (101506 => 101507)
--- trunk/Source/WebCore/websockets/WebSocketChannelClient.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WebSocketChannelClient.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -46,6 +46,7 @@
virtual void didReceiveMessage(const String&) { }
virtual void didReceiveBinaryData(PassOwnPtr<Vector<char> >) { }
virtual void didReceiveMessageError() { }
+ virtual void didUpdateBufferedAmount(unsigned long bufferedAmount) { }
virtual void didStartClosingHandshake() { }
enum ClosingHandshakeCompletionStatus {
ClosingHandshakeIncomplete,
Modified: trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp (101506 => 101507)
--- trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp 2011-11-30 14:47:07 UTC (rev 101507)
@@ -299,6 +299,18 @@
m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&workerContextDidReceiveBinaryData, m_workerClientWrapper, binaryData), m_taskMode);
}
+static void workerContextDidUpdateBufferedAmount(ScriptExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, unsigned long bufferedAmount)
+{
+ ASSERT_UNUSED(context, context->isWorkerContext());
+ workerClientWrapper->didUpdateBufferedAmount(bufferedAmount);
+}
+
+void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned long bufferedAmount)
+{
+ ASSERT(isMainThread());
+ m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&workerContextDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount), m_taskMode);
+}
+
static void workerContextDidStartClosingHandshake(ScriptExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper)
{
ASSERT_UNUSED(context, context->isWorkerContext());
Modified: trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h (101506 => 101507)
--- trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h 2011-11-30 14:33:40 UTC (rev 101506)
+++ trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h 2011-11-30 14:47:07 UTC (rev 101507)
@@ -107,6 +107,7 @@
virtual void didConnect();
virtual void didReceiveMessage(const String& message);
virtual void didReceiveBinaryData(PassOwnPtr<Vector<char> >);
+ virtual void didUpdateBufferedAmount(unsigned long bufferedAmount);
virtual void didStartClosingHandshake();
virtual void didClose(unsigned long unhandledBufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const String& reason);