Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(313)

Side by Side Diff: trunk/src/content/common/socket_stream_dispatcher.cc

Issue 14335011: Revert 196728 "Websocket should fire 'error' event if no server ..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/id_map.h" 10 #include "base/id_map.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/string16.h"
15 #include "base/utf_string_conversions.h"
16 #include "content/common/child_thread.h" 14 #include "content/common/child_thread.h"
17 #include "content/common/socket_stream.h" 15 #include "content/common/socket_stream.h"
18 #include "content/common/socket_stream_handle_data.h" 16 #include "content/common/socket_stream_handle_data.h"
19 #include "content/common/socket_stream_messages.h" 17 #include "content/common/socket_stream_messages.h"
20 #include "googleurl/src/gurl.h" 18 #include "googleurl/src/gurl.h"
21 #include "net/base/net_errors.h"
22 #include "webkit/glue/websocketstreamhandle_bridge.h" 19 #include "webkit/glue/websocketstreamhandle_bridge.h"
23 #include "webkit/glue/websocketstreamhandle_delegate.h" 20 #include "webkit/glue/websocketstreamhandle_delegate.h"
24 21
25 namespace content { 22 namespace content {
26 23
27 // IPCWebSocketStreamHandleBridge is owned by each SocketStreamHandle. 24 // IPCWebSocketStreamHandleBridge is owned by each SocketStreamHandle.
28 // It communicates with the main browser process via SocketStreamDispatcher. 25 // It communicates with the main browser process via SocketStreamDispatcher.
29 class IPCWebSocketStreamHandleBridge 26 class IPCWebSocketStreamHandleBridge
30 : public webkit_glue::WebSocketStreamHandleBridge { 27 : public webkit_glue::WebSocketStreamHandleBridge {
31 public: 28 public:
(...skipping 12 matching lines...) Expand all
44 // webkit_glue::WebSocketStreamHandleBridge methods. 41 // webkit_glue::WebSocketStreamHandleBridge methods.
45 virtual void Connect(const GURL& url) OVERRIDE; 42 virtual void Connect(const GURL& url) OVERRIDE;
46 virtual bool Send(const std::vector<char>& data) OVERRIDE; 43 virtual bool Send(const std::vector<char>& data) OVERRIDE;
47 virtual void Close() OVERRIDE; 44 virtual void Close() OVERRIDE;
48 45
49 // Called by SocketStreamDispatcher. 46 // Called by SocketStreamDispatcher.
50 void OnConnected(int max_amount_send_allowed); 47 void OnConnected(int max_amount_send_allowed);
51 void OnSentData(int amount_sent); 48 void OnSentData(int amount_sent);
52 void OnReceivedData(const std::vector<char>& data); 49 void OnReceivedData(const std::vector<char>& data);
53 void OnClosed(); 50 void OnClosed();
54 void OnFailed(int error_code, const char* error_msg);
55 51
56 private: 52 private:
57 virtual ~IPCWebSocketStreamHandleBridge(); 53 virtual ~IPCWebSocketStreamHandleBridge();
58 54
59 void DoConnect(const GURL& url); 55 void DoConnect(const GURL& url);
60 void DoClose(); 56 void DoClose();
61 57
62 // The ID for this bridge and corresponding SocketStream instance in the 58 // The ID for this bridge and corresponding SocketStream instance in the
63 // browser process. 59 // browser process.
64 int socket_id_; 60 int socket_id_;
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 if (socket_id_ != kNoSocketId) { 152 if (socket_id_ != kNoSocketId) {
157 all_bridges.Get().Remove(socket_id_); 153 all_bridges.Get().Remove(socket_id_);
158 socket_id_ = kNoSocketId; 154 socket_id_ = kNoSocketId;
159 } 155 }
160 if (delegate_) 156 if (delegate_)
161 delegate_->DidClose(handle_); 157 delegate_->DidClose(handle_);
162 delegate_ = NULL; 158 delegate_ = NULL;
163 Release(); 159 Release();
164 } 160 }
165 161
166 void IPCWebSocketStreamHandleBridge::OnFailed(int error_code,
167 const char* error_msg) {
168 DVLOG(1) << "Bridge #" << socket_id_ << " OnFailed (error_code=" << error_code
169 << ")";
170 if (delegate_)
171 delegate_->DidFail(handle_, error_code, ASCIIToUTF16(error_msg));
172 }
173
174 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { 162 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) {
175 DCHECK(child_thread_); 163 DCHECK(child_thread_);
176 DCHECK_EQ(socket_id_, kNoSocketId); 164 DCHECK_EQ(socket_id_, kNoSocketId);
177 if (delegate_) 165 if (delegate_)
178 delegate_->WillOpenStream(handle_, url); 166 delegate_->WillOpenStream(handle_, url);
179 167
180 socket_id_ = all_bridges.Get().Add(this); 168 socket_id_ = all_bridges.Get().Add(this);
181 DCHECK_NE(socket_id_, kNoSocketId); 169 DCHECK_NE(socket_id_, kNoSocketId);
182 int render_view_id = MSG_ROUTING_NONE; 170 int render_view_id = MSG_ROUTING_NONE;
183 const SocketStreamHandleData* data = 171 const SocketStreamHandleData* data =
(...skipping 28 matching lines...) Expand all
212 ChildThread::current(), handle, delegate); 200 ChildThread::current(), handle, delegate);
213 } 201 }
214 202
215 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) { 203 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) {
216 bool handled = true; 204 bool handled = true;
217 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg) 205 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg)
218 IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected) 206 IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected)
219 IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData) 207 IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData)
220 IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData) 208 IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData)
221 IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed) 209 IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed)
222 IPC_MESSAGE_HANDLER(SocketStreamMsg_Failed, OnFailed)
223 IPC_MESSAGE_UNHANDLED(handled = false) 210 IPC_MESSAGE_UNHANDLED(handled = false)
224 IPC_END_MESSAGE_MAP() 211 IPC_END_MESSAGE_MAP()
225 return handled; 212 return handled;
226 } 213 }
227 214
228 void SocketStreamDispatcher::OnConnected(int socket_id, 215 void SocketStreamDispatcher::OnConnected(int socket_id,
229 int max_pending_send_allowed) { 216 int max_pending_send_allowed) {
230 DVLOG(1) << "SocketStreamDispatcher::OnConnected (max_pending_send_allowed=" 217 DVLOG(1) << "SocketStreamDispatcher::OnConnected (max_pending_send_allowed="
231 << max_pending_send_allowed << ") to socket_id=" << socket_id; 218 << max_pending_send_allowed << ") to socket_id=" << socket_id;
232 219
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 DVLOG(1) << "SocketStreamDispatcher::OnClosed to socket_id=" << socket_id; 254 DVLOG(1) << "SocketStreamDispatcher::OnClosed to socket_id=" << socket_id;
268 255
269 IPCWebSocketStreamHandleBridge* bridge = 256 IPCWebSocketStreamHandleBridge* bridge =
270 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); 257 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id);
271 if (bridge) 258 if (bridge)
272 bridge->OnClosed(); 259 bridge->OnClosed();
273 else 260 else
274 DLOG(ERROR) << "No bridge for socket_id=" << socket_id; 261 DLOG(ERROR) << "No bridge for socket_id=" << socket_id;
275 } 262 }
276 263
277 void SocketStreamDispatcher::OnFailed(int socket_id, int error_code) {
278 IPCWebSocketStreamHandleBridge* bridge =
279 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id);
280 if (bridge)
281 bridge->OnFailed(error_code, net::ErrorToString(error_code));
282 else
283 DLOG(ERROR) << "No bridge for socket_id=" << socket_id;
284 }
285
286 } // namespace content 264 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/common/socket_stream_dispatcher.h ('k') | trunk/src/content/common/socket_stream_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698