| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/common/socket_stream_dispatcher.h" | 5 #include "content/common/socket_stream_dispatcher.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | |
| 9 #include "base/bind.h" | 8 #include "base/bind.h" |
| 10 #include "base/id_map.h" | 9 #include "base/id_map.h" |
| 11 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 12 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 13 #include "base/message_loop.h" | 12 #include "base/message_loop.h" |
| 14 #include "content/common/child_thread.h" | 13 #include "content/common/child_thread.h" |
| 15 #include "content/common/socket_stream.h" | 14 #include "content/common/socket_stream.h" |
| 16 #include "content/common/socket_stream_handle_data.h" | 15 #include "content/common/socket_stream_handle_data.h" |
| 17 #include "content/common/socket_stream_messages.h" | 16 #include "content/common/socket_stream_messages.h" |
| 18 #include "googleurl/src/gurl.h" | 17 #include "googleurl/src/gurl.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 39 // webkit_glue::WebSocketStreamHandleBridge methods. | 38 // webkit_glue::WebSocketStreamHandleBridge methods. |
| 40 virtual void Connect(const GURL& url); | 39 virtual void Connect(const GURL& url); |
| 41 virtual bool Send(const std::vector<char>& data); | 40 virtual bool Send(const std::vector<char>& data); |
| 42 virtual void Close(); | 41 virtual void Close(); |
| 43 | 42 |
| 44 // Called by SocketStreamDispatcher. | 43 // Called by SocketStreamDispatcher. |
| 45 void OnConnected(int max_amount_send_allowed); | 44 void OnConnected(int max_amount_send_allowed); |
| 46 void OnSentData(int amount_sent); | 45 void OnSentData(int amount_sent); |
| 47 void OnReceivedData(const std::vector<char>& data); | 46 void OnReceivedData(const std::vector<char>& data); |
| 48 void OnClosed(); | 47 void OnClosed(); |
| 48 void OnFailed(int error_code); |
| 49 | 49 |
| 50 private: | 50 private: |
| 51 virtual ~IPCWebSocketStreamHandleBridge(); | 51 virtual ~IPCWebSocketStreamHandleBridge(); |
| 52 | 52 |
| 53 void DoConnect(const GURL& url); | 53 void DoConnect(const GURL& url); |
| 54 void DoClose(); | 54 void DoClose(); |
| 55 int socket_id_; | 55 int socket_id_; |
| 56 | 56 |
| 57 ChildThread* child_thread_; | 57 ChildThread* child_thread_; |
| 58 WebKit::WebSocketStreamHandle* handle_; | 58 WebKit::WebSocketStreamHandle* handle_; |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 if (socket_id_ != content::kNoSocketId) { | 132 if (socket_id_ != content::kNoSocketId) { |
| 133 all_bridges.Get().Remove(socket_id_); | 133 all_bridges.Get().Remove(socket_id_); |
| 134 socket_id_ = content::kNoSocketId; | 134 socket_id_ = content::kNoSocketId; |
| 135 } | 135 } |
| 136 if (delegate_) | 136 if (delegate_) |
| 137 delegate_->DidClose(handle_); | 137 delegate_->DidClose(handle_); |
| 138 delegate_ = NULL; | 138 delegate_ = NULL; |
| 139 Release(); | 139 Release(); |
| 140 } | 140 } |
| 141 | 141 |
| 142 void IPCWebSocketStreamHandleBridge::OnFailed(int error_code) { |
| 143 DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnFailed"; |
| 144 if (delegate_) { |
| 145 delegate_->DidFail(handle_, error_code); |
| 146 } |
| 147 } |
| 148 |
| 142 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { | 149 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { |
| 143 DCHECK(child_thread_); | 150 DCHECK(child_thread_); |
| 144 DCHECK_EQ(socket_id_, content::kNoSocketId); | 151 DCHECK_EQ(socket_id_, content::kNoSocketId); |
| 145 if (delegate_) | 152 if (delegate_) |
| 146 delegate_->WillOpenStream(handle_, url); | 153 delegate_->WillOpenStream(handle_, url); |
| 147 | 154 |
| 148 socket_id_ = all_bridges.Get().Add(this); | 155 socket_id_ = all_bridges.Get().Add(this); |
| 149 DCHECK_NE(socket_id_, content::kNoSocketId); | 156 DCHECK_NE(socket_id_, content::kNoSocketId); |
| 150 int render_view_id = MSG_ROUTING_NONE; | 157 int render_view_id = MSG_ROUTING_NONE; |
| 151 const SocketStreamHandleData* data = | 158 const SocketStreamHandleData* data = |
| (...skipping 28 matching lines...) Expand all Loading... |
| 180 ChildThread::current(), handle, delegate); | 187 ChildThread::current(), handle, delegate); |
| 181 } | 188 } |
| 182 | 189 |
| 183 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) { | 190 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) { |
| 184 bool handled = true; | 191 bool handled = true; |
| 185 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg) | 192 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg) |
| 186 IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected) | 193 IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected) |
| 187 IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData) | 194 IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData) |
| 188 IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData) | 195 IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData) |
| 189 IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed) | 196 IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed) |
| 197 IPC_MESSAGE_HANDLER(SocketStreamMsg_Failed, OnFailed) |
| 190 IPC_MESSAGE_UNHANDLED(handled = false) | 198 IPC_MESSAGE_UNHANDLED(handled = false) |
| 191 IPC_END_MESSAGE_MAP() | 199 IPC_END_MESSAGE_MAP() |
| 192 return handled; | 200 return handled; |
| 193 } | 201 } |
| 194 | 202 |
| 195 void SocketStreamDispatcher::OnConnected(int socket_id, | 203 void SocketStreamDispatcher::OnConnected(int socket_id, |
| 196 int max_pending_send_allowed) { | 204 int max_pending_send_allowed) { |
| 197 DVLOG(1) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id | 205 DVLOG(1) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id |
| 198 << " max_pending_send_allowed=" << max_pending_send_allowed; | 206 << " max_pending_send_allowed=" << max_pending_send_allowed; |
| 199 IPCWebSocketStreamHandleBridge* bridge = | 207 IPCWebSocketStreamHandleBridge* bridge = |
| (...skipping 24 matching lines...) Expand all Loading... |
| 224 } | 232 } |
| 225 | 233 |
| 226 void SocketStreamDispatcher::OnClosed(int socket_id) { | 234 void SocketStreamDispatcher::OnClosed(int socket_id) { |
| 227 IPCWebSocketStreamHandleBridge* bridge = | 235 IPCWebSocketStreamHandleBridge* bridge = |
| 228 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); | 236 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); |
| 229 if (bridge) | 237 if (bridge) |
| 230 bridge->OnClosed(); | 238 bridge->OnClosed(); |
| 231 else | 239 else |
| 232 DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; | 240 DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; |
| 233 } | 241 } |
| 242 |
| 243 void SocketStreamDispatcher::OnFailed(int socket_id, int error_code) { |
| 244 IPCWebSocketStreamHandleBridge* bridge = |
| 245 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); |
| 246 if (bridge) |
| 247 bridge->OnFailed(error_code); |
| 248 else |
| 249 DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; |
| 250 } |
| OLD | NEW |