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

Unified Diff: content/renderer/media/rtc_peer_connection_handler.cc

Issue 1335023002: Add UMA metrics and finch experiment for DTLS1.2 in WebRTC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 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
Index: content/renderer/media/rtc_peer_connection_handler.cc
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc
index 9c50906e3da92bdc7f2f1c1453b6b17860d07e04..81bd46e21f10b76890fee5c9c280f9bb2b1d234e 100644
--- a/content/renderer/media/rtc_peer_connection_handler.cc
+++ b/content/renderer/media/rtc_peer_connection_handler.cc
@@ -14,6 +14,7 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "base/metrics/histogram.h"
+#include "base/metrics/sparse_histogram.h"
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/thread_task_runner_handle.h"
@@ -31,6 +32,7 @@
#include "content/renderer/media/webrtc_audio_device_impl.h"
#include "content/renderer/media/webrtc_uma_histograms.h"
#include "content/renderer/render_thread_impl.h"
+#include "net/third_party/nss/ssl/sslproto.h"
Ryan Sleevi 2015/09/22 21:21:10 BUG: You should not be directly including NSS head
#include "third_party/WebKit/public/platform/WebMediaConstraints.h"
#include "third_party/WebKit/public/platform/WebRTCConfiguration.h"
#include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h"
@@ -62,6 +64,69 @@ enum RtcpMux {
RTCP_MUX_MAX
};
+#define SSLCIPHER_ENTRY(cipher) \
+ { webrtc::SslCipherType_##cipher, cipher }
+
+uint16 ConvertWebRtcSslCipherToStandard(int cipher) {
+ static struct {
+ webrtc::SslCipherType webrtc_cipher;
+ uint16 cipher;
+ } kWebRtcSslCipherMapping[] = {
+ // TLS v1.0 ciphersuites from RFC2246.
+ {webrtc::SslCipherType_TLS_RSA_RC4_128_SHA, TLS_RSA_WITH_RC4_128_SHA},
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_3DES_EDE_CBC_SHA),
+
+ // AES ciphersuites from RFC3268.
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA),
+
+ // ECC ciphersuites from RFC4492.
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA),
+
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_RC4_128_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA),
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA),
+
+ // TLS v1.2 ciphersuites.
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA256),
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA256),
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256),
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256),
+
+ // TLS v1.2 GCM ciphersuites from RFC5288.
+ SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_GCM_SHA256),
+ // SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_GCM_SHA384),
+ SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256),
+ // SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384),
+ // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_128_GCM_SHA256),
+ // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_256_GCM_SHA384),
+
+ // ECDH HMAC based ciphersuites from RFC5289.
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256),
+ // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384),
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256),
+ // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384),
+
+ // ECDH GCM based ciphersuites from RFC5289.
+ SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
+ // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
+ SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256),
+ // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384),
+ };
+
+ for (auto c : kWebRtcSslCipherMapping) {
+ if (c.webrtc_cipher == cipher)
+ return c.cipher;
+ }
Ryan Sleevi 2015/09/22 21:21:10 This is very inefficient for what it does - given
davidben 2015/09/22 21:29:46 +1 to that. TLS already provides standard well-kno
+ return 0;
+}
+
// Converter functions from libjingle types to WebKit types.
blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState
GetWebKitIceGatheringState(
@@ -531,8 +596,31 @@ class PeerConnectionUMAObserver : public webrtc::UMAObserver {
UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP",
counter, counter_max);
break;
+ case webrtc::kEnumCounterAudioSrtpCipher:
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Audio.Srtp",
+ counter, counter_max);
+ break;
+ case webrtc::kEnumCounterAudioSslCipher:
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Audio.Ssl",
+ ConvertWebRtcSslCipherToStandard(counter));
+ break;
+ case webrtc::kEnumCounterVideoSrtpCipher:
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Video.Srtp",
+ counter, counter_max);
+ break;
+ case webrtc::kEnumCounterVideoSslCipher:
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Video.Ssl",
+ ConvertWebRtcSslCipherToStandard(counter));
+ break;
+ case webrtc::kEnumCounterDataSrtpCipher:
+ UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Data.Srtp",
+ counter, counter_max);
+ break;
+ case webrtc::kEnumCounterDataSslCipher:
+ UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Data.Ssl",
+ ConvertWebRtcSslCipherToStandard(counter));
+ break;
default:
- NOTREACHED();
break;
}
}

Powered by Google App Engine
This is Rietveld 408576698