OLD | NEW |
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 "net/websockets/websocket_job.h" | 5 #include "net/websockets/websocket_job.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/string_tokenizer.h" | 9 #include "base/string_tokenizer.h" |
10 #include "googleurl/src/gurl.h" | 10 #include "googleurl/src/gurl.h" |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 | 137 |
138 void WebSocketJob::RestartWithAuth( | 138 void WebSocketJob::RestartWithAuth( |
139 const string16& username, | 139 const string16& username, |
140 const string16& password) { | 140 const string16& password) { |
141 state_ = CONNECTING; | 141 state_ = CONNECTING; |
142 socket_->RestartWithAuth(username, password); | 142 socket_->RestartWithAuth(username, password); |
143 } | 143 } |
144 | 144 |
145 void WebSocketJob::DetachDelegate() { | 145 void WebSocketJob::DetachDelegate() { |
146 state_ = CLOSED; | 146 state_ = CLOSED; |
147 Singleton<WebSocketThrottle>::get()->RemoveFromQueue(this); | 147 WebSocketThrottle::GetInstance()->RemoveFromQueue(this); |
148 Singleton<WebSocketThrottle>::get()->WakeupSocketIfNecessary(); | 148 WebSocketThrottle::GetInstance()->WakeupSocketIfNecessary(); |
149 | 149 |
150 scoped_refptr<WebSocketJob> protect(this); | 150 scoped_refptr<WebSocketJob> protect(this); |
151 | 151 |
152 delegate_ = NULL; | 152 delegate_ = NULL; |
153 if (socket_) | 153 if (socket_) |
154 socket_->DetachDelegate(); | 154 socket_->DetachDelegate(); |
155 socket_ = NULL; | 155 socket_ = NULL; |
156 if (callback_) { | 156 if (callback_) { |
157 waiting_ = false; | 157 waiting_ = false; |
158 callback_ = NULL; | 158 callback_ = NULL; |
159 Release(); // Balanced with OnStartOpenConnection(). | 159 Release(); // Balanced with OnStartOpenConnection(). |
160 } | 160 } |
161 } | 161 } |
162 | 162 |
163 int WebSocketJob::OnStartOpenConnection( | 163 int WebSocketJob::OnStartOpenConnection( |
164 SocketStream* socket, CompletionCallback* callback) { | 164 SocketStream* socket, CompletionCallback* callback) { |
165 DCHECK(!callback_); | 165 DCHECK(!callback_); |
166 state_ = CONNECTING; | 166 state_ = CONNECTING; |
167 addresses_.Copy(socket->address_list().head(), true); | 167 addresses_.Copy(socket->address_list().head(), true); |
168 Singleton<WebSocketThrottle>::get()->PutInQueue(this); | 168 WebSocketThrottle::GetInstance()->PutInQueue(this); |
169 if (!waiting_) | 169 if (!waiting_) |
170 return OK; | 170 return OK; |
171 callback_ = callback; | 171 callback_ = callback; |
172 AddRef(); // Balanced when callback_ becomes NULL. | 172 AddRef(); // Balanced when callback_ becomes NULL. |
173 return ERR_IO_PENDING; | 173 return ERR_IO_PENDING; |
174 } | 174 } |
175 | 175 |
176 void WebSocketJob::OnConnected( | 176 void WebSocketJob::OnConnected( |
177 SocketStream* socket, int max_pending_send_allowed) { | 177 SocketStream* socket, int max_pending_send_allowed) { |
178 if (state_ == CLOSED) | 178 if (state_ == CLOSED) |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 receive_frame_handler_->GetCurrentBufferSize()); | 230 receive_frame_handler_->GetCurrentBufferSize()); |
231 receive_frame_handler_->ReleaseCurrentBuffer(); | 231 receive_frame_handler_->ReleaseCurrentBuffer(); |
232 } | 232 } |
233 if (delegate_ && received_data.size() > 0) | 233 if (delegate_ && received_data.size() > 0) |
234 delegate_->OnReceivedData( | 234 delegate_->OnReceivedData( |
235 socket, received_data.data(), received_data.size()); | 235 socket, received_data.data(), received_data.size()); |
236 } | 236 } |
237 | 237 |
238 void WebSocketJob::OnClose(SocketStream* socket) { | 238 void WebSocketJob::OnClose(SocketStream* socket) { |
239 state_ = CLOSED; | 239 state_ = CLOSED; |
240 Singleton<WebSocketThrottle>::get()->RemoveFromQueue(this); | 240 WebSocketThrottle::GetInstance()->RemoveFromQueue(this); |
241 Singleton<WebSocketThrottle>::get()->WakeupSocketIfNecessary(); | 241 WebSocketThrottle::GetInstance()->WakeupSocketIfNecessary(); |
242 | 242 |
243 scoped_refptr<WebSocketJob> protect(this); | 243 scoped_refptr<WebSocketJob> protect(this); |
244 | 244 |
245 SocketStream::Delegate* delegate = delegate_; | 245 SocketStream::Delegate* delegate = delegate_; |
246 delegate_ = NULL; | 246 delegate_ = NULL; |
247 socket_ = NULL; | 247 socket_ = NULL; |
248 if (callback_) { | 248 if (callback_) { |
249 waiting_ = false; | 249 waiting_ = false; |
250 callback_ = NULL; | 250 callback_ = NULL; |
251 Release(); // Balanced with OnStartOpenConnection(). | 251 Release(); // Balanced with OnStartOpenConnection(). |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 receive_frame_handler_->ReleaseCurrentBuffer(); | 398 receive_frame_handler_->ReleaseCurrentBuffer(); |
399 } | 399 } |
400 | 400 |
401 state_ = OPEN; | 401 state_ = OPEN; |
402 if (delegate_) | 402 if (delegate_) |
403 delegate_->OnReceivedData( | 403 delegate_->OnReceivedData( |
404 socket_, received_data.data(), received_data.size()); | 404 socket_, received_data.data(), received_data.size()); |
405 | 405 |
406 handshake_response_.reset(); | 406 handshake_response_.reset(); |
407 | 407 |
408 Singleton<WebSocketThrottle>::get()->RemoveFromQueue(this); | 408 WebSocketThrottle::GetInstance()->RemoveFromQueue(this); |
409 Singleton<WebSocketThrottle>::get()->WakeupSocketIfNecessary(); | 409 WebSocketThrottle::GetInstance()->WakeupSocketIfNecessary(); |
410 return; | 410 return; |
411 } | 411 } |
412 | 412 |
413 AddRef(); // Balanced in OnCanSetCookieCompleted | 413 AddRef(); // Balanced in OnCanSetCookieCompleted |
414 | 414 |
415 int policy = OK; | 415 int policy = OK; |
416 if (socket_->context()->cookie_policy()) { | 416 if (socket_->context()->cookie_policy()) { |
417 GURL url_for_cookies = GetURLForCookies(); | 417 GURL url_for_cookies = GetURLForCookies(); |
418 policy = socket_->context()->cookie_policy()->CanSetCookie( | 418 policy = socket_->context()->cookie_policy()->CanSetCookie( |
419 url_for_cookies, | 419 url_for_cookies, |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
499 socket_->Close(); | 499 socket_->Close(); |
500 return; | 500 return; |
501 } | 501 } |
502 current_buffer_ = new DrainableIOBuffer( | 502 current_buffer_ = new DrainableIOBuffer( |
503 send_frame_handler_->GetCurrentBuffer(), | 503 send_frame_handler_->GetCurrentBuffer(), |
504 send_frame_handler_->GetCurrentBufferSize()); | 504 send_frame_handler_->GetCurrentBufferSize()); |
505 socket_->SendData(current_buffer_->data(), current_buffer_->BytesRemaining()); | 505 socket_->SendData(current_buffer_->data(), current_buffer_->BytesRemaining()); |
506 } | 506 } |
507 | 507 |
508 } // namespace net | 508 } // namespace net |
OLD | NEW |