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 <vector> | 5 #include <vector> |
6 | 6 |
7 #include "webkit/tools/test_shell/simple_socket_stream_bridge.h" | 7 #include "webkit/tools/test_shell/simple_socket_stream_bridge.h" |
8 | 8 |
9 #include "base/atomicops.h" | 9 #include "base/atomicops.h" |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
60 void DoClose(); | 60 void DoClose(); |
61 | 61 |
62 // Runs on |message_loop_|; | 62 // Runs on |message_loop_|; |
63 void DoOnConnected(int max_amount_send_allowed); | 63 void DoOnConnected(int max_amount_send_allowed); |
64 void DoOnSentData(int amount_sent); | 64 void DoOnSentData(int amount_sent); |
65 void DoOnReceivedData(std::vector<char>* data); | 65 void DoOnReceivedData(std::vector<char>* data); |
66 void DoOnClose(); | 66 void DoOnClose(); |
67 void DoOnError(int error_code, const char* error_msg); | 67 void DoOnError(int error_code, const char* error_msg); |
68 | 68 |
69 int socket_id_; | 69 int socket_id_; |
70 MessageLoop* message_loop_; | 70 base::MessageLoop* message_loop_; |
71 WebKit::WebSocketStreamHandle* handle_; | 71 WebKit::WebSocketStreamHandle* handle_; |
72 webkit_glue::WebSocketStreamHandleDelegate* delegate_; | 72 webkit_glue::WebSocketStreamHandleDelegate* delegate_; |
73 | 73 |
74 scoped_refptr<net::SocketStreamJob> socket_; | 74 scoped_refptr<net::SocketStreamJob> socket_; |
75 // Number of pending tasks to handle net::SocketStream::Delegate methods. | 75 // Number of pending tasks to handle net::SocketStream::Delegate methods. |
76 base::subtle::Atomic32 num_pending_tasks_; | 76 base::subtle::Atomic32 num_pending_tasks_; |
77 | 77 |
78 DISALLOW_COPY_AND_ASSIGN(WebSocketStreamHandleBridgeImpl); | 78 DISALLOW_COPY_AND_ASSIGN(WebSocketStreamHandleBridgeImpl); |
79 }; | 79 }; |
80 | 80 |
81 WebSocketStreamHandleBridgeImpl::WebSocketStreamHandleBridgeImpl( | 81 WebSocketStreamHandleBridgeImpl::WebSocketStreamHandleBridgeImpl( |
82 WebKit::WebSocketStreamHandle* handle, | 82 WebKit::WebSocketStreamHandle* handle, |
83 webkit_glue::WebSocketStreamHandleDelegate* delegate) | 83 webkit_glue::WebSocketStreamHandleDelegate* delegate) |
84 : socket_id_(kNoSocketId), | 84 : socket_id_(kNoSocketId), |
85 message_loop_(MessageLoop::current()), | 85 message_loop_(base::MessageLoop::current()), |
86 handle_(handle), | 86 handle_(handle), |
87 delegate_(delegate), | 87 delegate_(delegate), |
88 num_pending_tasks_(0) { | 88 num_pending_tasks_(0) { |
89 net::WebSocketJob::EnsureInit(); | 89 net::WebSocketJob::EnsureInit(); |
90 } | 90 } |
91 | 91 |
92 WebSocketStreamHandleBridgeImpl::~WebSocketStreamHandleBridgeImpl() { | 92 WebSocketStreamHandleBridgeImpl::~WebSocketStreamHandleBridgeImpl() { |
93 DCHECK_EQ(socket_id_, kNoSocketId); | 93 DCHECK_EQ(socket_id_, kNoSocketId); |
94 } | 94 } |
95 | 95 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
160 void WebSocketStreamHandleBridgeImpl::OnError( | 160 void WebSocketStreamHandleBridgeImpl::OnError( |
161 const net::SocketStream* socket, int error_code) { | 161 const net::SocketStream* socket, int error_code) { |
162 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, 1); | 162 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, 1); |
163 message_loop_->PostTask( | 163 message_loop_->PostTask( |
164 FROM_HERE, | 164 FROM_HERE, |
165 base::Bind(&WebSocketStreamHandleBridgeImpl::DoOnError, this, | 165 base::Bind(&WebSocketStreamHandleBridgeImpl::DoOnError, this, |
166 error_code, net::ErrorToString(error_code))); | 166 error_code, net::ErrorToString(error_code))); |
167 } | 167 } |
168 | 168 |
169 void WebSocketStreamHandleBridgeImpl::DoConnect(const GURL& url) { | 169 void WebSocketStreamHandleBridgeImpl::DoConnect(const GURL& url) { |
170 DCHECK(MessageLoop::current() == g_io_thread); | 170 DCHECK(base::MessageLoop::current() == g_io_thread); |
171 socket_ = net::SocketStreamJob::CreateSocketStreamJob( | 171 socket_ = net::SocketStreamJob::CreateSocketStreamJob( |
172 url, this, g_request_context->transport_security_state(), | 172 url, |
brettw
2013/05/06 17:43:33
Ditto.
xhwang
2013/05/07 00:11:07
Done.
| |
173 this, | |
174 g_request_context->transport_security_state(), | |
173 g_request_context->ssl_config_service()); | 175 g_request_context->ssl_config_service()); |
174 socket_->set_context(g_request_context); | 176 socket_->set_context(g_request_context); |
175 socket_->Connect(); | 177 socket_->Connect(); |
176 } | 178 } |
177 | 179 |
178 void WebSocketStreamHandleBridgeImpl::DoSend(std::vector<char>* data) { | 180 void WebSocketStreamHandleBridgeImpl::DoSend(std::vector<char>* data) { |
179 DCHECK(MessageLoop::current() == g_io_thread); | 181 DCHECK(base::MessageLoop::current() == g_io_thread); |
180 scoped_ptr<std::vector<char> > scoped_data(data); | 182 scoped_ptr<std::vector<char> > scoped_data(data); |
181 if (!socket_) | 183 if (!socket_) |
182 return; | 184 return; |
183 if (!socket_->SendData(&(data->at(0)), data->size())) | 185 if (!socket_->SendData(&(data->at(0)), data->size())) |
184 socket_->Close(); | 186 socket_->Close(); |
185 } | 187 } |
186 | 188 |
187 void WebSocketStreamHandleBridgeImpl::DoClose() { | 189 void WebSocketStreamHandleBridgeImpl::DoClose() { |
188 DCHECK(MessageLoop::current() == g_io_thread); | 190 DCHECK(base::MessageLoop::current() == g_io_thread); |
189 if (!socket_) | 191 if (!socket_) |
190 return; | 192 return; |
191 socket_->Close(); | 193 socket_->Close(); |
192 } | 194 } |
193 | 195 |
194 void WebSocketStreamHandleBridgeImpl::DoOnConnected( | 196 void WebSocketStreamHandleBridgeImpl::DoOnConnected( |
195 int max_pending_send_allowed) { | 197 int max_pending_send_allowed) { |
196 DCHECK(MessageLoop::current() == message_loop_); | 198 DCHECK(base::MessageLoop::current() == message_loop_); |
197 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); | 199 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); |
198 if (delegate_) | 200 if (delegate_) |
199 delegate_->DidOpenStream(handle_, max_pending_send_allowed); | 201 delegate_->DidOpenStream(handle_, max_pending_send_allowed); |
200 } | 202 } |
201 | 203 |
202 void WebSocketStreamHandleBridgeImpl::DoOnSentData(int amount_sent) { | 204 void WebSocketStreamHandleBridgeImpl::DoOnSentData(int amount_sent) { |
203 DCHECK(MessageLoop::current() == message_loop_); | 205 DCHECK(base::MessageLoop::current() == message_loop_); |
204 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); | 206 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); |
205 if (delegate_) | 207 if (delegate_) |
206 delegate_->DidSendData(handle_, amount_sent); | 208 delegate_->DidSendData(handle_, amount_sent); |
207 } | 209 } |
208 | 210 |
209 void WebSocketStreamHandleBridgeImpl::DoOnReceivedData( | 211 void WebSocketStreamHandleBridgeImpl::DoOnReceivedData( |
210 std::vector<char>* data) { | 212 std::vector<char>* data) { |
211 DCHECK(MessageLoop::current() == message_loop_); | 213 DCHECK(base::MessageLoop::current() == message_loop_); |
212 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); | 214 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); |
213 scoped_ptr<std::vector<char> > scoped_data(data); | 215 scoped_ptr<std::vector<char> > scoped_data(data); |
214 if (delegate_) | 216 if (delegate_) |
215 delegate_->DidReceiveData(handle_, &(data->at(0)), data->size()); | 217 delegate_->DidReceiveData(handle_, &(data->at(0)), data->size()); |
216 } | 218 } |
217 | 219 |
218 void WebSocketStreamHandleBridgeImpl::DoOnClose() { | 220 void WebSocketStreamHandleBridgeImpl::DoOnClose() { |
219 DCHECK(MessageLoop::current() == message_loop_); | 221 DCHECK(base::MessageLoop::current() == message_loop_); |
220 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); | 222 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); |
221 // Don't handle OnClose if there are pending tasks. | 223 // Don't handle OnClose if there are pending tasks. |
222 DCHECK_EQ(num_pending_tasks_, 0); | 224 DCHECK_EQ(num_pending_tasks_, 0); |
223 DCHECK(!socket_); | 225 DCHECK(!socket_); |
224 DCHECK_EQ(socket_id_, kNoSocketId); | 226 DCHECK_EQ(socket_id_, kNoSocketId); |
225 webkit_glue::WebSocketStreamHandleDelegate* delegate = delegate_; | 227 webkit_glue::WebSocketStreamHandleDelegate* delegate = delegate_; |
226 delegate_ = NULL; | 228 delegate_ = NULL; |
227 if (delegate) | 229 if (delegate) |
228 delegate->DidClose(handle_); | 230 delegate->DidClose(handle_); |
229 Release(); | 231 Release(); |
230 } | 232 } |
231 | 233 |
232 void WebSocketStreamHandleBridgeImpl::DoOnError( | 234 void WebSocketStreamHandleBridgeImpl::DoOnError( |
233 int error_code, const char* error_msg) { | 235 int error_code, const char* error_msg) { |
234 DCHECK(MessageLoop::current() == message_loop_); | 236 DCHECK(MessageLoop::current() == message_loop_); |
235 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); | 237 base::subtle::NoBarrier_AtomicIncrement(&num_pending_tasks_, -1); |
236 if (delegate_) | 238 if (delegate_) |
237 delegate_->DidFail(handle_, error_code, ASCIIToUTF16(error_msg)); | 239 delegate_->DidFail(handle_, error_code, ASCIIToUTF16(error_msg)); |
238 } | 240 } |
239 | 241 |
240 } // namespace | 242 } // namespace |
241 | 243 |
242 /* static */ | 244 /* static */ |
243 void SimpleSocketStreamBridge::InitializeOnIOThread( | 245 void SimpleSocketStreamBridge::InitializeOnIOThread( |
244 net::URLRequestContext* request_context) { | 246 net::URLRequestContext* request_context) { |
245 g_io_thread = MessageLoop::current(); | 247 g_io_thread = base::MessageLoop::current(); |
246 g_request_context = request_context; | 248 g_request_context = request_context; |
247 } | 249 } |
248 | 250 |
249 void SimpleSocketStreamBridge::Cleanup() { | 251 void SimpleSocketStreamBridge::Cleanup() { |
250 g_io_thread = NULL; | 252 g_io_thread = NULL; |
251 g_request_context = NULL; | 253 g_request_context = NULL; |
252 } | 254 } |
253 | 255 |
254 /* static */ | 256 /* static */ |
255 webkit_glue::WebSocketStreamHandleBridge* SimpleSocketStreamBridge::Create( | 257 webkit_glue::WebSocketStreamHandleBridge* SimpleSocketStreamBridge::Create( |
256 WebKit::WebSocketStreamHandle* handle, | 258 WebKit::WebSocketStreamHandle* handle, |
257 webkit_glue::WebSocketStreamHandleDelegate* delegate) { | 259 webkit_glue::WebSocketStreamHandleDelegate* delegate) { |
258 return new WebSocketStreamHandleBridgeImpl(handle, delegate); | 260 return new WebSocketStreamHandleBridgeImpl(handle, delegate); |
259 } | 261 } |
OLD | NEW |