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

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

Issue 10458057: Websocket should fire 'error' event if no server available (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 8 years, 6 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
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698