Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Unified Diff: net/http/http_network_transaction.cc

Issue 1127623005: Gather metrics classifying the cause of the TLS fallback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@fallback-required
Patch Set: missing header Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_stream_factory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..60f44ba7ccce4838673f16764ac013cc4e5373ee 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -14,6 +14,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/metrics/field_trial.h"
#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
#include "base/profiler/scoped_tracker.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
@@ -95,12 +96,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 +132,9 @@ HttpNetworkTransaction::HttpNetworkTransaction(RequestPriority priority,
request_(NULL),
priority_(priority),
headers_valid_(false),
+ server_ssl_failure_state_(SSL_FAILURE_NONE),
fallback_error_code_(ERR_SSL_INAPPROPRIATE_FALLBACK),
+ fallback_failure_state_(SSL_FAILURE_NONE),
request_headers_(),
read_buf_len_(0),
total_received_bytes_(0),
@@ -502,12 +507,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 +1358,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 +1481,15 @@ 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_SPARSE_SLOWLY("Net.SSLFallbackErrorCode",
+ -fallback_error_code_);
+ UMA_HISTOGRAM_ENUMERATION("Net.SSLFallbackFailureState",
+ fallback_failure_state_, SSL_FAILURE_MAX);
+ }
}
HttpResponseHeaders* HttpNetworkTransaction::GetResponseHeaders() const {
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_stream_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698