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

Reply via email to