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

Unified Diff: net/http/http_network_transaction.cc

Issue 1116063006: Only record fallback metrics on successful requests. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: sleevi comments Created 5 years, 8 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_impl_job.cc » ('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 9bf323d99c9a1599c3c20b28d5cf48e545af29bc..9d779a88d9d349808a5063d283e51a3bfc2c68e7 100644
--- a/net/http/http_network_transaction.cc
+++ b/net/http/http_network_transaction.cc
@@ -786,6 +786,8 @@ int HttpNetworkTransaction::DoCreateStreamComplete(int result) {
CopyConnectionAttemptsFromStreamRequest();
if (result == OK) {
+ if (request_->url.SchemeIsCryptographic())
+ RecordSSLFallbackMetrics();
next_state_ = STATE_INIT_STREAM;
DCHECK(stream_.get());
} else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) {
@@ -1530,6 +1532,50 @@ void HttpNetworkTransaction::ResetStateForAuthRestart() {
establishing_tunnel_ = false;
}
+void HttpNetworkTransaction::RecordSSLFallbackMetrics() {
+ // Note: these values are used in histograms, so new values must be appended.
+ enum FallbackVersion {
+ FALLBACK_NONE = 0, // SSL version fallback did not occur.
+ FALLBACK_SSL3 = 1, // Fell back to SSL 3.0.
+ FALLBACK_TLS1 = 2, // Fell back to TLS 1.0.
+ FALLBACK_TLS1_1 = 3, // Fell back to TLS 1.1.
+ FALLBACK_MAX,
+ };
+
+ FallbackVersion fallback = FALLBACK_NONE;
+ if (server_ssl_config_.version_fallback) {
+ switch (server_ssl_config_.version_max) {
+ case SSL_PROTOCOL_VERSION_SSL3:
+ fallback = FALLBACK_SSL3;
+ break;
+ case SSL_PROTOCOL_VERSION_TLS1:
+ fallback = FALLBACK_TLS1;
+ break;
+ case SSL_PROTOCOL_VERSION_TLS1_1:
+ fallback = FALLBACK_TLS1_1;
+ break;
+ default:
+ NOTREACHED();
+ }
+ }
+ UMA_HISTOGRAM_ENUMERATION("Net.ConnectionUsedSSLVersionFallback2", fallback,
+ FALLBACK_MAX);
+
+ // We also wish to measure the amount of fallback connections for a host that
+ // we know implements TLS up to 1.2. Ideally there would be no fallback here
+ // but high numbers of SSLv3 would suggest that SSLv3 fallback is being
+ // caused by network middleware rather than buggy HTTPS servers.
Ryan Sleevi 2015/05/02 00:37:34 Update this comment to reflect your explanation th
davidben 2015/05/04 17:51:17 Done.
+ const std::string& host = request_->url.host();
+ if (EndsWith(host, "google.com", true) &&
+ (host.size() == 10 || host[host.size() - 11] == '.')) {
+ UMA_HISTOGRAM_ENUMERATION("Net.GoogleConnectionUsedSSLVersionFallback2",
+ fallback, FALLBACK_MAX);
+ }
+
+ UMA_HISTOGRAM_BOOLEAN("Net.ConnectionUsedSSLDeprecatedCipherFallback2",
+ server_ssl_config_.enable_deprecated_cipher_suites);
+}
+
HttpResponseHeaders* HttpNetworkTransaction::GetResponseHeaders() const {
return response_.headers.get();
}
« no previous file with comments | « net/http/http_network_transaction.h ('k') | net/http/http_stream_factory_impl_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698