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

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

Issue 6621025: Move socket stream messages to content, in preparation for moving its dispatc... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 9 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
« no previous file with comments | « chrome/common/render_messages_internal.h ('k') | chrome/common/utility_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/common/socket_stream_dispatcher.h" 5 #include "chrome/common/socket_stream_dispatcher.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/id_map.h" 9 #include "base/id_map.h"
10 #include "base/message_loop.h" 10 #include "base/message_loop.h"
11 #include "base/ref_counted.h" 11 #include "base/ref_counted.h"
12 #include "base/task.h" 12 #include "base/task.h"
13 #include "chrome/common/child_thread.h" 13 #include "chrome/common/child_thread.h"
14 #include "chrome/common/render_messages.h" 14 #include "content/common/socket_stream.h"
15 #include "chrome/common/net/socket_stream.h" 15 #include "content/common/socket_stream_messages.h"
16 #include "googleurl/src/gurl.h" 16 #include "googleurl/src/gurl.h"
17 #include "ipc/ipc_message.h"
18 #include "webkit/glue/websocketstreamhandle_bridge.h" 17 #include "webkit/glue/websocketstreamhandle_bridge.h"
19 #include "webkit/glue/websocketstreamhandle_delegate.h" 18 #include "webkit/glue/websocketstreamhandle_delegate.h"
20 19
21 // IPCWebSocketStreamHandleBridge is owned by each SocketStreamHandle. 20 // IPCWebSocketStreamHandleBridge is owned by each SocketStreamHandle.
22 // It communicates with the main browser process via SocketStreamDispatcher. 21 // It communicates with the main browser process via SocketStreamDispatcher.
23 class IPCWebSocketStreamHandleBridge 22 class IPCWebSocketStreamHandleBridge
24 : public webkit_glue::WebSocketStreamHandleBridge { 23 : public webkit_glue::WebSocketStreamHandleBridge {
25 public: 24 public:
26 IPCWebSocketStreamHandleBridge( 25 IPCWebSocketStreamHandleBridge(
27 ChildThread* child_thread, 26 ChildThread* child_thread,
28 WebKit::WebSocketStreamHandle* handle, 27 WebKit::WebSocketStreamHandle* handle,
29 webkit_glue::WebSocketStreamHandleDelegate* delegate) 28 webkit_glue::WebSocketStreamHandleDelegate* delegate)
30 : socket_id_(chrome_common_net::kNoSocketId), 29 : socket_id_(content_common::kNoSocketId),
31 child_thread_(child_thread), 30 child_thread_(child_thread),
32 handle_(handle), 31 handle_(handle),
33 delegate_(delegate) {} 32 delegate_(delegate) {}
34 33
35 // Returns the handle having given id or NULL if there is no such handle. 34 // Returns the handle having given id or NULL if there is no such handle.
36 static IPCWebSocketStreamHandleBridge* FromSocketId(int id); 35 static IPCWebSocketStreamHandleBridge* FromSocketId(int id);
37 36
38 // webkit_glue::WebSocketStreamHandleBridge methods. 37 // webkit_glue::WebSocketStreamHandleBridge methods.
39 virtual void Connect(const GURL& url); 38 virtual void Connect(const GURL& url);
40 virtual bool Send(const std::vector<char>& data); 39 virtual bool Send(const std::vector<char>& data);
(...skipping 23 matching lines...) Expand all
64 63
65 /* static */ 64 /* static */
66 IPCWebSocketStreamHandleBridge* IPCWebSocketStreamHandleBridge::FromSocketId( 65 IPCWebSocketStreamHandleBridge* IPCWebSocketStreamHandleBridge::FromSocketId(
67 int id) { 66 int id) {
68 return all_bridges.Lookup(id); 67 return all_bridges.Lookup(id);
69 } 68 }
70 69
71 IPCWebSocketStreamHandleBridge::~IPCWebSocketStreamHandleBridge() { 70 IPCWebSocketStreamHandleBridge::~IPCWebSocketStreamHandleBridge() {
72 DVLOG(1) << "IPCWebSocketStreamHandleBridge destructor socket_id=" 71 DVLOG(1) << "IPCWebSocketStreamHandleBridge destructor socket_id="
73 << socket_id_; 72 << socket_id_;
74 if (socket_id_ != chrome_common_net::kNoSocketId) { 73 if (socket_id_ != content_common::kNoSocketId) {
75 child_thread_->Send(new ViewHostMsg_Close(socket_id_)); 74 child_thread_->Send(new SocketStreamHostMsg_Close(socket_id_));
76 socket_id_ = chrome_common_net::kNoSocketId; 75 socket_id_ = content_common::kNoSocketId;
77 } 76 }
78 } 77 }
79 78
80 void IPCWebSocketStreamHandleBridge::Connect(const GURL& url) { 79 void IPCWebSocketStreamHandleBridge::Connect(const GURL& url) {
81 DCHECK(child_thread_); 80 DCHECK(child_thread_);
82 DVLOG(1) << "Connect url=" << url; 81 DVLOG(1) << "Connect url=" << url;
83 child_thread_->message_loop()->PostTask( 82 child_thread_->message_loop()->PostTask(
84 FROM_HERE, 83 FROM_HERE,
85 NewRunnableMethod(this, &IPCWebSocketStreamHandleBridge::DoConnect, 84 NewRunnableMethod(this, &IPCWebSocketStreamHandleBridge::DoConnect,
86 url)); 85 url));
87 } 86 }
88 87
89 bool IPCWebSocketStreamHandleBridge::Send( 88 bool IPCWebSocketStreamHandleBridge::Send(
90 const std::vector<char>& data) { 89 const std::vector<char>& data) {
91 DVLOG(1) << "Send data.size=" << data.size(); 90 DVLOG(1) << "Send data.size=" << data.size();
92 if (child_thread_->Send( 91 if (child_thread_->Send(
93 new ViewHostMsg_SocketStream_SendData(socket_id_, data))) { 92 new SocketStreamHostMsg_SendData(socket_id_, data))) {
94 if (delegate_) 93 if (delegate_)
95 delegate_->WillSendData(handle_, &data[0], data.size()); 94 delegate_->WillSendData(handle_, &data[0], data.size());
96 return true; 95 return true;
97 } 96 }
98 return false; 97 return false;
99 } 98 }
100 99
101 void IPCWebSocketStreamHandleBridge::Close() { 100 void IPCWebSocketStreamHandleBridge::Close() {
102 DVLOG(1) << "Close socket_id" << socket_id_; 101 DVLOG(1) << "Close socket_id" << socket_id_;
103 child_thread_->Send(new ViewHostMsg_SocketStream_Close(socket_id_)); 102 child_thread_->Send(new SocketStreamHostMsg_Close(socket_id_));
104 } 103 }
105 104
106 void IPCWebSocketStreamHandleBridge::OnConnected(int max_pending_send_allowed) { 105 void IPCWebSocketStreamHandleBridge::OnConnected(int max_pending_send_allowed) {
107 DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnConnected socket_id=" 106 DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnConnected socket_id="
108 << socket_id_; 107 << socket_id_;
109 if (delegate_) 108 if (delegate_)
110 delegate_->DidOpenStream(handle_, max_pending_send_allowed); 109 delegate_->DidOpenStream(handle_, max_pending_send_allowed);
111 } 110 }
112 111
113 void IPCWebSocketStreamHandleBridge::OnSentData(int amount_sent) { 112 void IPCWebSocketStreamHandleBridge::OnSentData(int amount_sent) {
114 if (delegate_) 113 if (delegate_)
115 delegate_->DidSendData(handle_, amount_sent); 114 delegate_->DidSendData(handle_, amount_sent);
116 } 115 }
117 116
118 void IPCWebSocketStreamHandleBridge::OnReceivedData( 117 void IPCWebSocketStreamHandleBridge::OnReceivedData(
119 const std::vector<char>& data) { 118 const std::vector<char>& data) {
120 if (delegate_) 119 if (delegate_)
121 delegate_->DidReceiveData(handle_, &data[0], data.size()); 120 delegate_->DidReceiveData(handle_, &data[0], data.size());
122 } 121 }
123 122
124 void IPCWebSocketStreamHandleBridge::OnClosed() { 123 void IPCWebSocketStreamHandleBridge::OnClosed() {
125 DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnClosed"; 124 DVLOG(1) << "IPCWebSocketStreamHandleBridge::OnClosed";
126 if (socket_id_ != chrome_common_net::kNoSocketId) { 125 if (socket_id_ != content_common::kNoSocketId) {
127 all_bridges.Remove(socket_id_); 126 all_bridges.Remove(socket_id_);
128 socket_id_ = chrome_common_net::kNoSocketId; 127 socket_id_ = content_common::kNoSocketId;
129 } 128 }
130 if (delegate_) 129 if (delegate_)
131 delegate_->DidClose(handle_); 130 delegate_->DidClose(handle_);
132 delegate_ = NULL; 131 delegate_ = NULL;
133 Release(); 132 Release();
134 } 133 }
135 134
136 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) { 135 void IPCWebSocketStreamHandleBridge::DoConnect(const GURL& url) {
137 DCHECK(child_thread_); 136 DCHECK(child_thread_);
138 DCHECK_EQ(socket_id_, chrome_common_net::kNoSocketId); 137 DCHECK_EQ(socket_id_, content_common::kNoSocketId);
139 if (delegate_) 138 if (delegate_)
140 delegate_->WillOpenStream(handle_, url); 139 delegate_->WillOpenStream(handle_, url);
141 140
142 socket_id_ = all_bridges.Add(this); 141 socket_id_ = all_bridges.Add(this);
143 DCHECK_NE(socket_id_, chrome_common_net::kNoSocketId); 142 DCHECK_NE(socket_id_, content_common::kNoSocketId);
144 AddRef(); // Released in OnClosed(). 143 AddRef(); // Released in OnClosed().
145 if (child_thread_->Send( 144 if (child_thread_->Send(new SocketStreamHostMsg_Connect(url, socket_id_))) {
146 new ViewHostMsg_SocketStream_Connect(url, socket_id_))) {
147 DVLOG(1) << "Connect socket_id=" << socket_id_; 145 DVLOG(1) << "Connect socket_id=" << socket_id_;
148 // TODO(ukai): timeout to OnConnected. 146 // TODO(ukai): timeout to OnConnected.
149 } else { 147 } else {
150 LOG(ERROR) << "IPC SocketStream_Connect failed."; 148 LOG(ERROR) << "IPC SocketStream_Connect failed.";
151 OnClosed(); 149 OnClosed();
152 } 150 }
153 } 151 }
154 152
155 SocketStreamDispatcher::SocketStreamDispatcher() { 153 SocketStreamDispatcher::SocketStreamDispatcher() {
156 } 154 }
157 155
158 /* static */ 156 /* static */
159 webkit_glue::WebSocketStreamHandleBridge* 157 webkit_glue::WebSocketStreamHandleBridge*
160 SocketStreamDispatcher::CreateBridge( 158 SocketStreamDispatcher::CreateBridge(
161 WebKit::WebSocketStreamHandle* handle, 159 WebKit::WebSocketStreamHandle* handle,
162 webkit_glue::WebSocketStreamHandleDelegate* delegate) { 160 webkit_glue::WebSocketStreamHandleDelegate* delegate) {
163 return new IPCWebSocketStreamHandleBridge( 161 return new IPCWebSocketStreamHandleBridge(
164 ChildThread::current(), handle, delegate); 162 ChildThread::current(), handle, delegate);
165 } 163 }
166 164
167 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) { 165 bool SocketStreamDispatcher::OnMessageReceived(const IPC::Message& msg) {
168 bool handled = true; 166 bool handled = true;
169 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg) 167 IPC_BEGIN_MESSAGE_MAP(SocketStreamDispatcher, msg)
170 IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_Connected, OnConnected) 168 IPC_MESSAGE_HANDLER(SocketStreamMsg_Connected, OnConnected)
171 IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_SentData, OnSentData) 169 IPC_MESSAGE_HANDLER(SocketStreamMsg_SentData, OnSentData)
172 IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_ReceivedData, OnReceivedData) 170 IPC_MESSAGE_HANDLER(SocketStreamMsg_ReceivedData, OnReceivedData)
173 IPC_MESSAGE_HANDLER(ViewMsg_SocketStream_Closed, OnClosed) 171 IPC_MESSAGE_HANDLER(SocketStreamMsg_Closed, OnClosed)
174 IPC_MESSAGE_UNHANDLED(handled = false) 172 IPC_MESSAGE_UNHANDLED(handled = false)
175 IPC_END_MESSAGE_MAP() 173 IPC_END_MESSAGE_MAP()
176 return handled; 174 return handled;
177 } 175 }
178 176
179 void SocketStreamDispatcher::OnConnected(int socket_id, 177 void SocketStreamDispatcher::OnConnected(int socket_id,
180 int max_pending_send_allowed) { 178 int max_pending_send_allowed) {
181 DVLOG(1) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id 179 DVLOG(1) << "SocketStreamDispatcher::OnConnected socket_id=" << socket_id
182 << " max_pending_send_allowed=" << max_pending_send_allowed; 180 << " max_pending_send_allowed=" << max_pending_send_allowed;
183 IPCWebSocketStreamHandleBridge* bridge = 181 IPCWebSocketStreamHandleBridge* bridge =
(...skipping 24 matching lines...) Expand all
208 } 206 }
209 207
210 void SocketStreamDispatcher::OnClosed(int socket_id) { 208 void SocketStreamDispatcher::OnClosed(int socket_id) {
211 IPCWebSocketStreamHandleBridge* bridge = 209 IPCWebSocketStreamHandleBridge* bridge =
212 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id); 210 IPCWebSocketStreamHandleBridge::FromSocketId(socket_id);
213 if (bridge) 211 if (bridge)
214 bridge->OnClosed(); 212 bridge->OnClosed();
215 else 213 else
216 DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id; 214 DLOG(ERROR) << "No SocketStreamHandleBridge for socket_id=" << socket_id;
217 } 215 }
OLDNEW
« no previous file with comments | « chrome/common/render_messages_internal.h ('k') | chrome/common/utility_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698