| 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(); | 
| } | 
|  | 
|  |