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 |