Index: net/websockets/websocket_job.cc |
diff --git a/net/websockets/websocket_job.cc b/net/websockets/websocket_job.cc |
index 63e65a4e9c94327ae21780d037ee149376cf6d41..f569eea71c180fe0030468cafa3020751f542807 100644 |
--- a/net/websockets/websocket_job.cc |
+++ b/net/websockets/websocket_job.cc |
@@ -304,9 +304,10 @@ void WebSocketJob::OnSentSpdyHeaders() { |
DCHECK_NE(INITIALIZED, state_); |
if (state_ != CONNECTING) |
return; |
- if (delegate_) |
- delegate_->OnSentData(socket_.get(), handshake_request_->original_length()); |
+ size_t original_length = handshake_request_->original_length(); |
handshake_request_.reset(); |
+ if (delegate_) |
+ delegate_->OnSentData(socket_.get(), original_length); |
} |
void WebSocketJob::OnSpdyResponseHeadersUpdated( |
@@ -423,11 +424,12 @@ void WebSocketJob::OnSentHandshakeRequest( |
if (handshake_request_sent_ >= handshake_request_->raw_length()) { |
// handshake request has been sent. |
// notify original size of handshake request to delegate. |
- if (delegate_) |
- delegate_->OnSentData( |
- socket, |
- handshake_request_->original_length()); |
+ // Reset the handshake_request_ first in case this object is deleted by the |
+ // delegate. |
+ size_t original_length = handshake_request_->original_length(); |
handshake_request_.reset(); |
+ if (delegate_) |
+ delegate_->OnSentData(socket, original_length); |
} |
} |