Changeset 86829 in webkit


Ignore:
Timestamp:
May 19, 2011 2:33:12 AM (13 years ago)
Author:
yutak@chromium.org
Message:

2011-05-19 Yuta Kitamura <yutak@chromium.org>

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.
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r86827 r86829  
     12011-05-19  Yuta Kitamura  <yutak@chromium.org>
     2
     3        Reviewed by Kent Tamura.
     4
     5        WebSocket: Use ScriptContext::Task to hold pending events of ThreadableWebSocketChannelClientWrapper
     6        https://bugs.webkit.org/show_bug.cgi?id=61034
     7
     8        Refactoring only. No new tests.
     9
     10        * websockets/ThreadableWebSocketChannelClientWrapper.cpp:
     11        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
     12        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
     13        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
     14        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
     15        (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
     16        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
     17        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnectCallback):
     18        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback):
     19        (WebCore::ThreadableWebSocketChannelClientWrapper::didCloseCallback):
     20        * websockets/ThreadableWebSocketChannelClientWrapper.h:
     21        Remove m_pendingConnected, m_pendingMessages and m_pendingClosed, and use ScriptContext::Task
     22        to hold these pending events.
     23
    1242011-05-19  Emil A Eklund  <eae@chromium.org>
    225
  • trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp

    r86669 r86829  
    3333#include "ThreadableWebSocketChannelClientWrapper.h"
    3434
     35#include "CrossThreadCopier.h"
     36#include "CrossThreadTask.h"
    3537#include "WebSocketChannelClient.h"
    3638#include <wtf/PassRefPtr.h>
     39#include <wtf/RefPtr.h>
    3740
    3841namespace WebCore {
     
    4447    , m_bufferedAmount(0)
    4548    , m_suspended(false)
    46     , m_pendingConnected(false)
    47     , m_pendingClosed(false)
    4849{
    4950}
     
    9899void ThreadableWebSocketChannelClientWrapper::didConnect()
    99100{
    100     m_pendingConnected = true;
     101    m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didConnectCallback, AllowCrossThreadAccess(this)));
    101102    if (!m_suspended)
    102         processPendingEvents();
     103        processPendingTasks();
    103104}
    104105
    105106void ThreadableWebSocketChannelClientWrapper::didReceiveMessage(const String& message)
    106107{
    107     m_pendingMessages.append(message);
     108    m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback, AllowCrossThreadAccess(this), message));
    108109    if (!m_suspended)
    109         processPendingEvents();
     110        processPendingTasks();
    110111}
    111112
    112113void ThreadableWebSocketChannelClientWrapper::didClose(unsigned long unhandledBufferedAmount)
    113114{
    114     m_pendingClosed = true;
    115     m_bufferedAmount = unhandledBufferedAmount;
     115    m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didCloseCallback, AllowCrossThreadAccess(this), unhandledBufferedAmount));
    116116    if (!m_suspended)
    117         processPendingEvents();
     117        processPendingTasks();
    118118}
    119119
     
    126126{
    127127    m_suspended = false;
    128     processPendingEvents();
     128    processPendingTasks();
    129129}
    130130
    131 void ThreadableWebSocketChannelClientWrapper::processPendingEvents()
     131void ThreadableWebSocketChannelClientWrapper::processPendingTasks()
    132132{
    133133    ASSERT(!m_suspended);
    134     if (m_pendingConnected) {
    135         m_pendingConnected = false;
    136         if (m_client)
    137             m_client->didConnect();
    138     }
     134    Vector<OwnPtr<ScriptExecutionContext::Task> > tasks;
     135    tasks.swap(m_pendingTasks);
     136    for (Vector<OwnPtr<ScriptExecutionContext::Task> >::const_iterator iter = tasks.begin(); iter != tasks.end(); ++iter)
     137        (*iter)->performTask(0);
     138}
    139139
    140     Vector<String> messages;
    141     messages.swap(m_pendingMessages);
    142     for (Vector<String>::const_iterator iter = messages.begin(); iter != messages.end(); ++iter) {
    143         if (m_client)
    144             m_client->didReceiveMessage(*iter);
    145     }
     140void ThreadableWebSocketChannelClientWrapper::didConnectCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper)
     141{
     142    ASSERT_UNUSED(context, !context);
     143    if (wrapper->m_client)
     144        wrapper->m_client->didConnect();
     145}
    146146
    147     if (m_pendingClosed) {
    148         m_pendingClosed = false;
    149         if (m_client)
    150             m_client->didClose(m_bufferedAmount);
    151     }
     147void ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper, String message)
     148{
     149    ASSERT_UNUSED(context, !context);
     150    if (wrapper->m_client)
     151        wrapper->m_client->didReceiveMessage(message);
     152}
     153
     154void ThreadableWebSocketChannelClientWrapper::didCloseCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper, unsigned long unhandledBufferedAmount)
     155{
     156    ASSERT_UNUSED(context, !context);
     157    if (wrapper->m_client)
     158        wrapper->m_client->didClose(unhandledBufferedAmount);
    152159}
    153160
  • trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h

    r86669 r86829  
    3535
    3636#include "PlatformString.h"
     37#include "ScriptExecutionContext.h"
    3738#include <wtf/Forward.h>
     39#include <wtf/OwnPtr.h>
    3840#include <wtf/Threading.h>
    3941#include <wtf/Vector.h>
     
    6971    ThreadableWebSocketChannelClientWrapper(WebSocketChannelClient*);
    7072
    71     void processPendingEvents();
     73    void processPendingTasks();
     74    static void didConnectCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>);
     75    static void didReceiveMessageCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>, String message);
     76    static void didCloseCallback(ScriptExecutionContext*, RefPtr<ThreadableWebSocketChannelClientWrapper>, unsigned long unhandledBufferedAmount);
    7277
    7378    WebSocketChannelClient* m_client;
     
    7681    unsigned long m_bufferedAmount;
    7782    bool m_suspended;
    78     bool m_pendingConnected;
    79     Vector<String> m_pendingMessages;
    80     bool m_pendingClosed;
     83    Vector<OwnPtr<ScriptExecutionContext::Task> > m_pendingTasks;
    8184};
    8285
Note: See TracChangeset for help on using the changeset viewer.