Index: net/http/http_network_transaction.cc |
diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc |
index 29967723d4b1a1b7a6eec19cedb8044247672746..bbe48b2f9aa6ac1a76898aa73556f368e0600bbf 100644 |
--- a/net/http/http_network_transaction.cc |
+++ b/net/http/http_network_transaction.cc |
@@ -149,6 +149,7 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority, |
request_headers_(), |
read_buf_len_(0), |
total_received_bytes_(0), |
+ total_sent_bytes_(0), |
next_state_(STATE_NONE), |
establishing_tunnel_(false), |
websocket_handshake_stream_base_create_helper_(NULL) { |
@@ -305,6 +306,7 @@ void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) { |
if (stream_.get()) { |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
HttpStream* new_stream = NULL; |
if (keep_alive && stream_->CanReuseConnection()) { |
// We should call connection_->set_idle_time(), but this doesn't occur |
@@ -320,8 +322,9 @@ void HttpNetworkTransaction::DidDrainBodyForAuthRestart(bool keep_alive) { |
stream_->Close(true); |
next_state_ = STATE_CREATE_STREAM; |
} else { |
- // Renewed streams shouldn't carry over received bytes. |
+ // Renewed streams shouldn't carry over sent or received bytes. |
DCHECK_EQ(0, new_stream->GetTotalReceivedBytes()); |
+ DCHECK_EQ(0, new_stream->GetTotalSentBytes()); |
next_state_ = STATE_INIT_STREAM; |
} |
stream_.reset(new_stream); |
@@ -391,6 +394,13 @@ int64 HttpNetworkTransaction::GetTotalReceivedBytes() const { |
return total_received_bytes; |
} |
+int64_t HttpNetworkTransaction::GetTotalSentBytes() const { |
+ int64_t total_sent_bytes = total_sent_bytes_; |
+ if (stream_) |
+ total_sent_bytes += stream_->GetTotalSentBytes(); |
+ return total_sent_bytes; |
+} |
+ |
void HttpNetworkTransaction::DoneReading() {} |
const HttpResponseInfo* HttpNetworkTransaction::GetResponseInfo() const { |
@@ -475,8 +485,10 @@ void HttpNetworkTransaction::OnStreamReady(const SSLConfig& used_ssl_config, |
DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_); |
DCHECK(stream_request_.get()); |
- if (stream_) |
+ if (stream_) { |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
+ } |
stream_.reset(stream); |
server_ssl_config_ = used_ssl_config; |
proxy_info_ = used_proxy_info; |
@@ -575,8 +587,10 @@ void HttpNetworkTransaction::OnHttpsProxyTunnelResponse( |
response_ = response_info; |
server_ssl_config_ = used_ssl_config; |
proxy_info_ = used_proxy_info; |
- if (stream_) |
+ if (stream_) { |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
+ } |
stream_.reset(stream); |
stream_request_.reset(); // we're done with the stream request |
OnIOComplete(ERR_HTTPS_PROXY_TUNNEL_RESPONSE); |
@@ -810,8 +824,10 @@ int HttpNetworkTransaction::DoInitStreamComplete(int result) { |
result = HandleIOError(result); |
// The stream initialization failed, so this stream will never be useful. |
- if (stream_) |
- total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ if (stream_) { |
+ total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
+ } |
stream_.reset(); |
} |
@@ -1185,6 +1201,7 @@ int HttpNetworkTransaction::HandleCertificateRequest(int error) { |
// renegotiation. |
DCHECK(!stream_request_.get()); |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
stream_->Close(true); |
stream_.reset(); |
} |
@@ -1408,8 +1425,10 @@ int HttpNetworkTransaction::HandleIOError(int error) { |
void HttpNetworkTransaction::ResetStateForRestart() { |
ResetStateForAuthRestart(); |
- if (stream_) |
+ if (stream_) { |
total_received_bytes_ += stream_->GetTotalReceivedBytes(); |
+ total_sent_bytes_ += stream_->GetTotalSentBytes(); |
+ } |
stream_.reset(); |
} |