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 "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/bind.h" | 9 #include "base/bind.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 spdy_websocket_stream_.reset(); | 297 spdy_websocket_stream_.reset(); |
298 } | 298 } |
299 | 299 |
300 CompleteIO(result); | 300 CompleteIO(result); |
301 } | 301 } |
302 | 302 |
303 void WebSocketJob::OnSentSpdyHeaders() { | 303 void WebSocketJob::OnSentSpdyHeaders() { |
304 DCHECK_NE(INITIALIZED, state_); | 304 DCHECK_NE(INITIALIZED, state_); |
305 if (state_ != CONNECTING) | 305 if (state_ != CONNECTING) |
306 return; | 306 return; |
| 307 size_t original_length = handshake_request_->original_length(); |
| 308 handshake_request_.reset(); |
307 if (delegate_) | 309 if (delegate_) |
308 delegate_->OnSentData(socket_.get(), handshake_request_->original_length()); | 310 delegate_->OnSentData(socket_.get(), original_length); |
309 handshake_request_.reset(); | |
310 } | 311 } |
311 | 312 |
312 void WebSocketJob::OnSpdyResponseHeadersUpdated( | 313 void WebSocketJob::OnSpdyResponseHeadersUpdated( |
313 const SpdyHeaderBlock& response_headers) { | 314 const SpdyHeaderBlock& response_headers) { |
314 DCHECK_NE(INITIALIZED, state_); | 315 DCHECK_NE(INITIALIZED, state_); |
315 if (state_ != CONNECTING) | 316 if (state_ != CONNECTING) |
316 return; | 317 return; |
317 // TODO(toyoshim): Fallback to non-spdy connection? | 318 // TODO(toyoshim): Fallback to non-spdy connection? |
318 handshake_response_->ParseResponseHeaderBlock(response_headers, | 319 handshake_response_->ParseResponseHeaderBlock(response_headers, |
319 challenge_, | 320 challenge_, |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 } | 417 } |
417 | 418 |
418 void WebSocketJob::OnSentHandshakeRequest( | 419 void WebSocketJob::OnSentHandshakeRequest( |
419 SocketStream* socket, int amount_sent) { | 420 SocketStream* socket, int amount_sent) { |
420 DCHECK_EQ(state_, CONNECTING); | 421 DCHECK_EQ(state_, CONNECTING); |
421 handshake_request_sent_ += amount_sent; | 422 handshake_request_sent_ += amount_sent; |
422 DCHECK_LE(handshake_request_sent_, handshake_request_->raw_length()); | 423 DCHECK_LE(handshake_request_sent_, handshake_request_->raw_length()); |
423 if (handshake_request_sent_ >= handshake_request_->raw_length()) { | 424 if (handshake_request_sent_ >= handshake_request_->raw_length()) { |
424 // handshake request has been sent. | 425 // handshake request has been sent. |
425 // notify original size of handshake request to delegate. | 426 // notify original size of handshake request to delegate. |
| 427 // Reset the handshake_request_ first in case this object is deleted by the |
| 428 // delegate. |
| 429 size_t original_length = handshake_request_->original_length(); |
| 430 handshake_request_.reset(); |
426 if (delegate_) | 431 if (delegate_) |
427 delegate_->OnSentData( | 432 delegate_->OnSentData(socket, original_length); |
428 socket, | |
429 handshake_request_->original_length()); | |
430 handshake_request_.reset(); | |
431 } | 433 } |
432 } | 434 } |
433 | 435 |
434 void WebSocketJob::OnReceivedHandshakeResponse( | 436 void WebSocketJob::OnReceivedHandshakeResponse( |
435 SocketStream* socket, const char* data, int len) { | 437 SocketStream* socket, const char* data, int len) { |
436 DCHECK_EQ(state_, CONNECTING); | 438 DCHECK_EQ(state_, CONNECTING); |
437 if (handshake_response_->HasResponse()) { | 439 if (handshake_response_->HasResponse()) { |
438 // If we already has handshake response, received data should be frame | 440 // If we already has handshake response, received data should be frame |
439 // data, not handshake message. | 441 // data, not handshake message. |
440 received_data_after_handshake_.insert( | 442 received_data_after_handshake_.insert( |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
693 | 695 |
694 scoped_refptr<IOBufferWithSize> next_buffer = send_buffer_queue_.front(); | 696 scoped_refptr<IOBufferWithSize> next_buffer = send_buffer_queue_.front(); |
695 send_buffer_queue_.pop_front(); | 697 send_buffer_queue_.pop_front(); |
696 current_send_buffer_ = | 698 current_send_buffer_ = |
697 new DrainableIOBuffer(next_buffer.get(), next_buffer->size()); | 699 new DrainableIOBuffer(next_buffer.get(), next_buffer->size()); |
698 SendDataInternal(current_send_buffer_->data(), | 700 SendDataInternal(current_send_buffer_->data(), |
699 current_send_buffer_->BytesRemaining()); | 701 current_send_buffer_->BytesRemaining()); |
700 } | 702 } |
701 | 703 |
702 } // namespace net | 704 } // namespace net |
OLD | NEW |