Chromium Code Reviews| Index: net/http/http_network_transaction.cc |
| diff --git a/net/http/http_network_transaction.cc b/net/http/http_network_transaction.cc |
| index 981fcb6abb003efef8362d272967df28d96309e0..8fd0595cf47d824727bf4a0c48ef2c74aeb579e8 100644 |
| --- a/net/http/http_network_transaction.cc |
| +++ b/net/http/http_network_transaction.cc |
| @@ -95,12 +95,14 @@ void ProcessAlternateProtocol( |
| base::Value* NetLogSSLVersionFallbackCallback( |
| const GURL* url, |
| int net_error, |
| + SSLFailureState ssl_failure_state, |
| uint16 version_before, |
| uint16 version_after, |
| NetLogCaptureMode /* capture_mode */) { |
| base::DictionaryValue* dict = new base::DictionaryValue(); |
| dict->SetString("host_and_port", GetHostAndPort(*url)); |
| dict->SetInteger("net_error", net_error); |
| + dict->SetInteger("ssl_failure_state", ssl_failure_state); |
| dict->SetInteger("version_before", version_before); |
| dict->SetInteger("version_after", version_after); |
| return dict; |
| @@ -129,7 +131,9 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority, |
| request_(NULL), |
| priority_(priority), |
| headers_valid_(false), |
| + server_ssl_failure_state_(kSSLFailureNone), |
| fallback_error_code_(ERR_SSL_INAPPROPRIATE_FALLBACK), |
| + fallback_failure_state_(kSSLFailureNone), |
| request_headers_(), |
| read_buf_len_(0), |
| total_received_bytes_(0), |
| @@ -502,12 +506,14 @@ void HttpNetworkTransaction::OnWebSocketHandshakeStreamReady( |
| } |
| void HttpNetworkTransaction::OnStreamFailed(int result, |
| - const SSLConfig& used_ssl_config) { |
| + const SSLConfig& used_ssl_config, |
| + SSLFailureState ssl_failure_state) { |
| DCHECK_EQ(STATE_CREATE_STREAM_COMPLETE, next_state_); |
| DCHECK_NE(OK, result); |
| DCHECK(stream_request_.get()); |
| DCHECK(!stream_.get()); |
| server_ssl_config_ = used_ssl_config; |
| + server_ssl_failure_state_ = ssl_failure_state; |
| OnIOComplete(result); |
| } |
| @@ -1351,10 +1357,11 @@ int HttpNetworkTransaction::HandleSSLHandshakeError(int error) { |
| if (should_fallback) { |
| net_log_.AddEvent( |
| NetLog::TYPE_SSL_VERSION_FALLBACK, |
| - base::Bind(&NetLogSSLVersionFallbackCallback, |
| - &request_->url, error, server_ssl_config_.version_max, |
| + base::Bind(&NetLogSSLVersionFallbackCallback, &request_->url, error, |
| + server_ssl_failure_state_, server_ssl_config_.version_max, |
| version_max)); |
| fallback_error_code_ = error; |
| + fallback_failure_state_ = server_ssl_failure_state_; |
| server_ssl_config_.version_max = version_max; |
| server_ssl_config_.version_fallback = true; |
| ResetConnectionAndRequestForResend(); |
| @@ -1473,6 +1480,16 @@ void HttpNetworkTransaction::RecordSSLFallbackMetrics() { |
| UMA_HISTOGRAM_BOOLEAN("Net.ConnectionUsedSSLDeprecatedCipherFallback2", |
| server_ssl_config_.enable_deprecated_cipher_suites); |
| + |
| + if (server_ssl_config_.version_fallback) { |
| + // Record the error code which triggered the fallback and the state the |
| + // handshake was in. |
| + UMA_HISTOGRAM_CUSTOM_ENUMERATION("Net.SSLFallbackErrorCode", |
| + -fallback_error_code_, |
| + net::GetAllErrorCodesForUma()); |
|
Alexei Svitkine (slow)
2015/05/15 14:39:36
It's more efficient to use UMA_HISTOGRAM_SPARSE_SL
davidben
2015/05/15 18:00:23
Done.
In that case should we switch all code that
Alexei Svitkine (slow)
2015/05/15 18:05:22
Yes, preferably all the places should be switched.
|
| + UMA_HISTOGRAM_ENUMERATION("Net.SSLFallbackFailureState", |
| + fallback_failure_state_, kSSLFailureMax); |
| + } |
| } |
| HttpResponseHeaders* HttpNetworkTransaction::GetResponseHeaders() const { |