Chromium Code Reviews| 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; |
| } |
| } |