Title: [86829] trunk/Source/WebCore
- Revision
- 86829
- Author
- [email protected]
- Date
- 2011-05-19 02:33:12 -0700 (Thu, 19 May 2011)
Log Message
2011-05-19 Yuta Kitamura <[email protected]>
Reviewed by Kent Tamura.
WebSocket: Use ScriptContext::Task to hold pending events of ThreadableWebSocketChannelClientWrapper
https://bugs.webkit.org/show_bug.cgi?id=61034
Refactoring only. No new tests.
* websockets/ThreadableWebSocketChannelClientWrapper.cpp:
(WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
(WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
(WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
(WebCore::ThreadableWebSocketChannelClientWrapper::resume):
(WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
(WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
(WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
* websockets/ThreadableWebSocketChannelClientWrapper.h:
Remove m_pendingConnected, m_pendingMessages and m_pendingClosed, and use ScriptContext::Task
to hold these pending events.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (86828 => 86829)
--- trunk/Source/WebCore/ChangeLog 2011-05-19 09:22:47 UTC (rev 86828)
+++ trunk/Source/WebCore/ChangeLog 2011-05-19 09:33:12 UTC (rev 86829)
@@ -1,3 +1,26 @@
+2011-05-19 Yuta Kitamura <[email protected]>
+
+ Reviewed by Kent Tamura.
+
+ WebSocket: Use ScriptContext::Task to hold pending events of ThreadableWebSocketChannelClientWrapper
+ https://bugs.webkit.org/show_bug.cgi?id=61034
+
+ Refactoring only. No new tests.
+
+ * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
+ (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
+ * websockets/ThreadableWebSocketChannelClientWrapper.h:
+ Remove m_pendingConnected, m_pendingMessages and m_pendingClosed, and use ScriptContext::Task
+ to hold these pending events.
+
2011-05-19 Emil A Eklund <[email protected]>
Reviewed by Alexey Proskuryakov.
Modified: trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp (86828 => 86829)
--- trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2011-05-19 09:22:47 UTC (rev 86828)
+++ trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2011-05-19 09:33:12 UTC (rev 86829)
@@ -32,8 +32,11 @@
#if ENABLE(WEB_SOCKETS)
#include "ThreadableWebSocketChannelClientWrapper.h"
+#include "CrossThreadCopier.h"
+#include "CrossThreadTask.h"
#include "WebSocketChannelClient.h"
#include <wtf/PassRefPtr.h>
+#include <wtf/RefPtr.h>
namespace WebCore {
@@ -43,8 +46,6 @@
, m_sent(false)
, m_bufferedAmount(0)
, m_suspended(false)
- , m_pendingConnected(false)
- , m_pendingClosed(false)
{
}
@@ -97,24 +98,23 @@
void ThreadableWebSocketChannelClientWrapper::didConnect()
{
- m_pendingConnected = true;
+ m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didConnectCallback, AllowCrossThreadAccess(this)));
if (!m_suspended)
- processPendingEvents();
+ processPendingTasks();
}
void ThreadableWebSocketChannelClientWrapper::didReceiveMessage(const String& message)
{
- m_pendingMessages.append(message);
+ m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback, AllowCrossThreadAccess(this), message));
if (!m_suspended)
- processPendingEvents();
+ processPendingTasks();
}
void ThreadableWebSocketChannelClientWrapper::didClose(unsigned long unhandledBufferedAmount)
{
- m_pendingClosed = true;
- m_bufferedAmount = unhandledBufferedAmount;
+ m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didCloseCallback, AllowCrossThreadAccess(this), unhandledBufferedAmount));
if (!m_suspended)
- processPendingEvents();
+ processPendingTasks();
}
void ThreadableWebSocketChannelClientWrapper::suspend()
@@ -125,32 +125,39 @@
void ThreadableWebSocketChannelClientWrapper::resume()
{
m_suspended = false;
- processPendingEvents();
+ processPendingTasks();
}
-void ThreadableWebSocketChannelClientWrapper::processPendingEvents()
+void ThreadableWebSocketChannelClientWrapper::processPendingTasks()
{
ASSERT(!m_suspended);
- if (m_pendingConnected) {
- m_pendingConnected = false;
- if (m_client)
- m_client->didConnect();
- }
+ Vector<OwnPtr<ScriptExecutionContext::Task> > tasks;
+ tasks.swap(m_pendingTasks);
+ for (Vector<OwnPtr<ScriptExecutionContext::Task> >::const_iterator iter = tasks.begin(); iter != tasks.end(); ++iter)
+ (*iter)->performTask(0);
+}
- Vector<String> messages;
- messages.swap(m_pendingMessages);
- for (Vector<String>::const_iterator iter = messages.begin(); iter != messages.end(); ++iter) {
- if (m_client)
- m_client->didReceiveMessage(*iter);
- }
+void ThreadableWebSocketChannelClientWrapper::didConnectCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper)
+{
+ ASSERT_UNUSED(context, !context);
+ if (wrapper->m_client)
+ wrapper->m_client->didConnect();
+}
- if (m_pendingClosed) {
- m_pendingClosed = false;
- if (m_client)
- m_client->didClose(m_bufferedAmount);
- }
+void ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper, String message)
+{
+ ASSERT_UNUSED(context, !context);
+ if (wrapper->m_client)
+ wrapper->m_client->didReceiveMessage(message);
}
+void ThreadableWebSocketChannelClientWrapper::didCloseCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper, unsigned long unhandledBufferedAmount)
+{
+ ASSERT_UNUSED(context, !context);
+ if (wrapper->m_client)
+ wrapper->m_client->didClose(unhandledBufferedAmount);
+}
+
} // namespace WebCore
#endif
Modified: trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h (86828 => 86829)
--- trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h 2011-05-19 09:22:47 UTC (rev 86828)
+++ trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h 2011-05-19 09:33:12 UTC (rev 86829)
@@ -34,7 +34,9 @@
#if ENABLE(WEB_SOCKETS)
#include "PlatformString.h"
+#include "ScriptExecutionContext.h"
#include <wtf/Forward.h>
+#include <wtf/OwnPtr.h>
#include <wtf/Threading.h>
#include <wtf/Vector.h>
@@ -68,16 +70,17 @@
protected:
ThreadableWebSocketChannelClientWrapper(WebSocketChannelClient*);
- void processPendingEvents();
+ void processPendingTasks();
+ static void didConnectCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>);
+ static void didReceiveMessageCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>, String message);
+ static void didCloseCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>, unsigned long unhandledBufferedAmount);
WebSocketChannelClient* m_client;
bool m_syncMethodDone;
bool m_sent;
unsigned long m_bufferedAmount;
bool m_suspended;
- bool m_pendingConnected;
- Vector<String> m_pendingMessages;
- bool m_pendingClosed;
+ Vector<OwnPtr<ScriptExecutionContext::Task> > m_pendingTasks;
};
} // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes