Changeset 86829 in webkit
- Timestamp:
- May 19, 2011 2:33:12 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r86827 r86829 1 2011-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 1 24 2011-05-19 Emil A Eklund <eae@chromium.org> 2 25 -
trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.cpp
r86669 r86829 33 33 #include "ThreadableWebSocketChannelClientWrapper.h" 34 34 35 #include "CrossThreadCopier.h" 36 #include "CrossThreadTask.h" 35 37 #include "WebSocketChannelClient.h" 36 38 #include <wtf/PassRefPtr.h> 39 #include <wtf/RefPtr.h> 37 40 38 41 namespace WebCore { … … 44 47 , m_bufferedAmount(0) 45 48 , m_suspended(false) 46 , m_pendingConnected(false)47 , m_pendingClosed(false)48 49 { 49 50 } … … 98 99 void ThreadableWebSocketChannelClientWrapper::didConnect() 99 100 { 100 m_pending Connected = true;101 m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didConnectCallback, AllowCrossThreadAccess(this))); 101 102 if (!m_suspended) 102 processPending Events();103 processPendingTasks(); 103 104 } 104 105 105 106 void ThreadableWebSocketChannelClientWrapper::didReceiveMessage(const String& message) 106 107 { 107 m_pending Messages.append(message);108 m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didReceiveMessageCallback, AllowCrossThreadAccess(this), message)); 108 109 if (!m_suspended) 109 processPending Events();110 processPendingTasks(); 110 111 } 111 112 112 113 void ThreadableWebSocketChannelClientWrapper::didClose(unsigned long unhandledBufferedAmount) 113 114 { 114 m_pendingClosed = true; 115 m_bufferedAmount = unhandledBufferedAmount; 115 m_pendingTasks.append(createCallbackTask(&ThreadableWebSocketChannelClientWrapper::didCloseCallback, AllowCrossThreadAccess(this), unhandledBufferedAmount)); 116 116 if (!m_suspended) 117 processPending Events();117 processPendingTasks(); 118 118 } 119 119 … … 126 126 { 127 127 m_suspended = false; 128 processPending Events();128 processPendingTasks(); 129 129 } 130 130 131 void ThreadableWebSocketChannelClientWrapper::processPending Events()131 void ThreadableWebSocketChannelClientWrapper::processPendingTasks() 132 132 { 133 133 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 } 139 139 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 140 void ThreadableWebSocketChannelClientWrapper::didConnectCallback(ScriptExecutionContext* context, RefPtr<ThreadableWebSocketChannelClientWrapper> wrapper) 141 { 142 ASSERT_UNUSED(context, !context); 143 if (wrapper->m_client) 144 wrapper->m_client->didConnect(); 145 } 146 146 147 if (m_pendingClosed) { 148 m_pendingClosed = false; 149 if (m_client) 150 m_client->didClose(m_bufferedAmount); 151 } 147 void 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 154 void 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); 152 159 } 153 160 -
trunk/Source/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h
r86669 r86829 35 35 36 36 #include "PlatformString.h" 37 #include "ScriptExecutionContext.h" 37 38 #include <wtf/Forward.h> 39 #include <wtf/OwnPtr.h> 38 40 #include <wtf/Threading.h> 39 41 #include <wtf/Vector.h> … … 69 71 ThreadableWebSocketChannelClientWrapper(WebSocketChannelClient*); 70 72 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); 72 77 73 78 WebSocketChannelClient* m_client; … … 76 81 unsigned long m_bufferedAmount; 77 82 bool m_suspended; 78 bool m_pendingConnected; 79 Vector<String> m_pendingMessages; 80 bool m_pendingClosed; 83 Vector<OwnPtr<ScriptExecutionContext::Task> > m_pendingTasks; 81 84 }; 82 85
Note: See TracChangeset
for help on using the changeset viewer.