Diff
Modified: trunk/Source/WebCore/ChangeLog (87138 => 87139)
--- trunk/Source/WebCore/ChangeLog 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/ChangeLog 2011-05-24 09:15:49 UTC (rev 87139)
@@ -1,3 +1,26 @@
+2011-05-24 Yuta Kitamura <[email protected]>
+
+ Reviewed by Kent Tamura.
+
+ WebSocket: Add fail() to WebSocketChannel and its family
+ https://bugs.webkit.org/show_bug.cgi?id=61277
+
+ This is the first part of refactoring effort described in bug 61115.
+ Existing error reports will be modified to use fail() in a later patch.
+
+ No change in behavior, thus no new tests.
+
+ * websockets/ThreadableWebSocketChannel.h:
+ * websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::fail):
+ * websockets/WebSocketChannel.h:
+ * websockets/WorkerThreadableWebSocketChannel.cpp:
+ (WebCore::WorkerThreadableWebSocketChannel::fail):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::fail):
+ (WebCore::WorkerThreadableWebSocketChannel::mainThreadFail):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
+ * websockets/WorkerThreadableWebSocketChannel.h:
+
2011-05-24 Andras Becsi <[email protected]>
Reviewed by Csaba Osztrogonác.
Modified: trunk/Source/WebCore/websockets/ThreadableWebSocketChannel.h (87138 => 87139)
--- trunk/Source/WebCore/websockets/ThreadableWebSocketChannel.h 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/websockets/ThreadableWebSocketChannel.h 2011-05-24 09:15:49 UTC (rev 87139)
@@ -53,6 +53,8 @@
virtual bool send(const String& message) = 0;
virtual unsigned long bufferedAmount() const = 0;
virtual void close() = 0;
+ // Log the reason text and close the connection. Will call didClose().
+ virtual void fail(const String& reason) = 0;
virtual void disconnect() = 0; // Will suppress didClose().
virtual void suspend() = 0;
Modified: trunk/Source/WebCore/websockets/WebSocketChannel.cpp (87138 => 87139)
--- trunk/Source/WebCore/websockets/WebSocketChannel.cpp 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/websockets/WebSocketChannel.cpp 2011-05-24 09:15:49 UTC (rev 87139)
@@ -121,6 +121,16 @@
m_handle->close(); // will call didClose()
}
+void WebSocketChannel::fail(const String& reason)
+{
+ LOG(Network, "WebSocketChannel %p fail: %s", this, reason.utf8().data());
+ ASSERT(!m_suspended);
+ if (m_context)
+ m_context->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, reason, 0, m_handshake.clientOrigin(), 0);
+ if (m_handle)
+ m_handle->close(); // Will call didClose().
+}
+
void WebSocketChannel::disconnect()
{
LOG(Network, "WebSocketChannel %p disconnect", this);
Modified: trunk/Source/WebCore/websockets/WebSocketChannel.h (87138 => 87139)
--- trunk/Source/WebCore/websockets/WebSocketChannel.h 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/websockets/WebSocketChannel.h 2011-05-24 09:15:49 UTC (rev 87139)
@@ -58,7 +58,8 @@
virtual bool send(const String& message);
virtual unsigned long bufferedAmount() const;
virtual void close();
- virtual void disconnect(); // Will suppress didClose().
+ virtual void fail(const String& reason);
+ virtual void disconnect();
virtual void suspend();
virtual void resume();
Modified: trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp (87138 => 87139)
--- trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp 2011-05-24 09:15:49 UTC (rev 87139)
@@ -88,6 +88,12 @@
m_bridge->close();
}
+void WorkerThreadableWebSocketChannel::fail(const String& reason)
+{
+ if (m_bridge)
+ m_bridge->fail(reason);
+}
+
void WorkerThreadableWebSocketChannel::disconnect()
{
m_bridge->disconnect();
@@ -171,6 +177,14 @@
m_mainWebSocketChannel = 0;
}
+void WorkerThreadableWebSocketChannel::Peer::fail(const String& reason)
+{
+ ASSERT(isMainThread());
+ if (!m_mainWebSocketChannel)
+ return;
+ m_mainWebSocketChannel->fail(reason);
+}
+
void WorkerThreadableWebSocketChannel::Peer::disconnect()
{
ASSERT(isMainThread());
@@ -286,8 +300,7 @@
{
ASSERT(m_workerClientWrapper);
ASSERT(m_peer);
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadConnect, AllowCrossThreadAccess(m_peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadConnect, AllowCrossThreadAccess(m_peer)));
}
void WorkerThreadableWebSocketChannel::mainThreadSend(ScriptExecutionContext* context, Peer* peer, const String& message)
@@ -305,9 +318,7 @@
return false;
ASSERT(m_peer);
setMethodNotCompleted();
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSend,
- AllowCrossThreadAccess(m_peer), message));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSend, AllowCrossThreadAccess(m_peer), message));
RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
@@ -329,8 +340,7 @@
return 0;
ASSERT(m_peer);
setMethodNotCompleted();
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, AllowCrossThreadAccess(m_peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, AllowCrossThreadAccess(m_peer)));
RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
@@ -351,10 +361,24 @@
void WorkerThreadableWebSocketChannel::Bridge::close()
{
ASSERT(m_peer);
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadClose, AllowCrossThreadAccess(m_peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadClose, AllowCrossThreadAccess(m_peer)));
}
+void WorkerThreadableWebSocketChannel::mainThreadFail(ScriptExecutionContext* context, Peer* peer, const String& reason)
+{
+ ASSERT(isMainThread());
+ ASSERT_UNUSED(context, context->isDocument());
+ ASSERT(peer);
+
+ peer->fail(reason);
+}
+
+void WorkerThreadableWebSocketChannel::Bridge::fail(const String& reason)
+{
+ ASSERT(m_peer);
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadFail, AllowCrossThreadAccess(m_peer), reason));
+}
+
void WorkerThreadableWebSocketChannel::mainThreadDestroy(ScriptExecutionContext* context, Peer* peer)
{
ASSERT(isMainThread());
@@ -370,8 +394,7 @@
if (m_peer) {
Peer* peer = m_peer;
m_peer = 0;
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&mainThreadDestroy, AllowCrossThreadAccess(peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&mainThreadDestroy, AllowCrossThreadAccess(peer)));
}
m_workerContext = 0;
}
@@ -388,8 +411,7 @@
void WorkerThreadableWebSocketChannel::Bridge::suspend()
{
ASSERT(m_peer);
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSuspend, AllowCrossThreadAccess(m_peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSuspend, AllowCrossThreadAccess(m_peer)));
}
void WorkerThreadableWebSocketChannel::mainThreadResume(ScriptExecutionContext* context, Peer* peer)
@@ -404,8 +426,7 @@
void WorkerThreadableWebSocketChannel::Bridge::resume()
{
ASSERT(m_peer);
- m_loaderProxy.postTaskToLoader(
- createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadResume, AllowCrossThreadAccess(m_peer)));
+ m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadResume, AllowCrossThreadAccess(m_peer)));
}
void WorkerThreadableWebSocketChannel::Bridge::clearClientWrapper()
Modified: trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h (87138 => 87139)
--- trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h 2011-05-24 09:05:20 UTC (rev 87138)
+++ trunk/Source/WebCore/websockets/WorkerThreadableWebSocketChannel.h 2011-05-24 09:15:49 UTC (rev 87139)
@@ -64,6 +64,7 @@
virtual bool send(const String& message);
virtual unsigned long bufferedAmount() const;
virtual void close();
+ virtual void fail(const String& reason);
virtual void disconnect(); // Will suppress didClose().
virtual void suspend();
virtual void resume();
@@ -91,6 +92,7 @@
void send(const String& message);
void bufferedAmount();
void close();
+ void fail(const String& reason);
void disconnect();
void suspend();
void resume();
@@ -120,6 +122,7 @@
bool send(const String& message);
unsigned long bufferedAmount();
void close();
+ void fail(const String& reason);
void disconnect();
void suspend();
void resume();
@@ -154,6 +157,7 @@
static void mainThreadSend(ScriptExecutionContext*, Peer*, const String& message);
static void mainThreadBufferedAmount(ScriptExecutionContext*, Peer*);
static void mainThreadClose(ScriptExecutionContext*, Peer*);
+ static void mainThreadFail(ScriptExecutionContext*, Peer*, const String& reason);
static void mainThreadDestroy(ScriptExecutionContext*, Peer*);
static void mainThreadSuspend(ScriptExecutionContext*, Peer*);
static void mainThreadResume(ScriptExecutionContext*, Peer*);