Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 5 #include "content/renderer/media/rtc_peer_connection_handler.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/lazy_instance.h" | 12 #include "base/lazy_instance.h" |
| 13 #include "base/location.h" | 13 #include "base/location.h" |
| 14 #include "base/logging.h" | 14 #include "base/logging.h" |
| 15 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
| 16 #include "base/metrics/histogram.h" | 16 #include "base/metrics/histogram.h" |
| 17 #include "base/metrics/sparse_histogram.h" | |
| 17 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
| 18 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 19 #include "base/thread_task_runner_handle.h" | 20 #include "base/thread_task_runner_handle.h" |
| 20 #include "base/trace_event/trace_event.h" | 21 #include "base/trace_event/trace_event.h" |
| 21 #include "content/public/common/content_switches.h" | 22 #include "content/public/common/content_switches.h" |
| 22 #include "content/renderer/media/media_stream_track.h" | 23 #include "content/renderer/media/media_stream_track.h" |
| 23 #include "content/renderer/media/peer_connection_tracker.h" | 24 #include "content/renderer/media/peer_connection_tracker.h" |
| 24 #include "content/renderer/media/remote_media_stream_impl.h" | 25 #include "content/renderer/media/remote_media_stream_impl.h" |
| 25 #include "content/renderer/media/rtc_data_channel_handler.h" | 26 #include "content/renderer/media/rtc_data_channel_handler.h" |
| 26 #include "content/renderer/media/rtc_dtmf_sender_handler.h" | 27 #include "content/renderer/media/rtc_dtmf_sender_handler.h" |
| 27 #include "content/renderer/media/rtc_media_constraints.h" | 28 #include "content/renderer/media/rtc_media_constraints.h" |
| 28 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" | 29 #include "content/renderer/media/webrtc/peer_connection_dependency_factory.h" |
| 29 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h" | 30 #include "content/renderer/media/webrtc/webrtc_media_stream_adapter.h" |
| 30 #include "content/renderer/media/webrtc_audio_capturer.h" | 31 #include "content/renderer/media/webrtc_audio_capturer.h" |
| 31 #include "content/renderer/media/webrtc_audio_device_impl.h" | 32 #include "content/renderer/media/webrtc_audio_device_impl.h" |
| 32 #include "content/renderer/media/webrtc_uma_histograms.h" | 33 #include "content/renderer/media/webrtc_uma_histograms.h" |
| 33 #include "content/renderer/render_thread_impl.h" | 34 #include "content/renderer/render_thread_impl.h" |
| 35 #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
| |
| 34 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" | 36 #include "third_party/WebKit/public/platform/WebMediaConstraints.h" |
| 35 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" | 37 #include "third_party/WebKit/public/platform/WebRTCConfiguration.h" |
| 36 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" | 38 #include "third_party/WebKit/public/platform/WebRTCDataChannelInit.h" |
| 37 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" | 39 #include "third_party/WebKit/public/platform/WebRTCICECandidate.h" |
| 38 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" | 40 #include "third_party/WebKit/public/platform/WebRTCOfferOptions.h" |
| 39 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" | 41 #include "third_party/WebKit/public/platform/WebRTCSessionDescription.h" |
| 40 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" | 42 #include "third_party/WebKit/public/platform/WebRTCSessionDescriptionRequest.h" |
| 41 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" | 43 #include "third_party/WebKit/public/platform/WebRTCVoidRequest.h" |
| 42 #include "third_party/WebKit/public/platform/WebURL.h" | 44 #include "third_party/WebKit/public/platform/WebURL.h" |
| 43 #include "third_party/libjingle/source/talk/session/media/mediasession.h" | 45 #include "third_party/libjingle/source/talk/session/media/mediasession.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 55 | 57 |
| 56 // Used to back histogram value of "WebRTC.PeerConnection.RtcpMux", | 58 // Used to back histogram value of "WebRTC.PeerConnection.RtcpMux", |
| 57 // so treat as append-only. | 59 // so treat as append-only. |
| 58 enum RtcpMux { | 60 enum RtcpMux { |
| 59 RTCP_MUX_DISABLED, | 61 RTCP_MUX_DISABLED, |
| 60 RTCP_MUX_ENABLED, | 62 RTCP_MUX_ENABLED, |
| 61 RTCP_MUX_NO_MEDIA, | 63 RTCP_MUX_NO_MEDIA, |
| 62 RTCP_MUX_MAX | 64 RTCP_MUX_MAX |
| 63 }; | 65 }; |
| 64 | 66 |
| 67 #define SSLCIPHER_ENTRY(cipher) \ | |
| 68 { webrtc::SslCipherType_##cipher, cipher } | |
| 69 | |
| 70 uint16 ConvertWebRtcSslCipherToStandard(int cipher) { | |
| 71 static struct { | |
| 72 webrtc::SslCipherType webrtc_cipher; | |
| 73 uint16 cipher; | |
| 74 } kWebRtcSslCipherMapping[] = { | |
| 75 // TLS v1.0 ciphersuites from RFC2246. | |
| 76 {webrtc::SslCipherType_TLS_RSA_RC4_128_SHA, TLS_RSA_WITH_RC4_128_SHA}, | |
| 77 SSLCIPHER_ENTRY(TLS_RSA_WITH_3DES_EDE_CBC_SHA), | |
| 78 | |
| 79 // AES ciphersuites from RFC3268. | |
| 80 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA), | |
| 81 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA), | |
| 82 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA), | |
| 83 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA), | |
| 84 | |
| 85 // ECC ciphersuites from RFC4492. | |
| 86 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_RC4_128_SHA), | |
| 87 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA), | |
| 88 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA), | |
| 89 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA), | |
| 90 | |
| 91 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_RC4_128_SHA), | |
| 92 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA), | |
| 93 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA), | |
| 94 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA), | |
| 95 | |
| 96 // TLS v1.2 ciphersuites. | |
| 97 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_CBC_SHA256), | |
| 98 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_CBC_SHA256), | |
| 99 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_CBC_SHA256), | |
| 100 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_CBC_SHA256), | |
| 101 | |
| 102 // TLS v1.2 GCM ciphersuites from RFC5288. | |
| 103 SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_128_GCM_SHA256), | |
| 104 // SSLCIPHER_ENTRY(TLS_RSA_WITH_AES_256_GCM_SHA384), | |
| 105 SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_128_GCM_SHA256), | |
| 106 // SSLCIPHER_ENTRY(TLS_DHE_RSA_WITH_AES_256_GCM_SHA384), | |
| 107 // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_128_GCM_SHA256), | |
| 108 // SSLCIPHER_ENTRY(TLS_DH_RSA_WITH_AES_256_GCM_SHA384), | |
| 109 | |
| 110 // ECDH HMAC based ciphersuites from RFC5289. | |
| 111 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256), | |
| 112 // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384), | |
| 113 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256), | |
| 114 // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384), | |
| 115 | |
| 116 // ECDH GCM based ciphersuites from RFC5289. | |
| 117 SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256), | |
| 118 // SSLCIPHER_ENTRY(TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384), | |
| 119 SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256), | |
| 120 // SSLCIPHER_ENTRY(TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384), | |
| 121 }; | |
| 122 | |
| 123 for (auto c : kWebRtcSslCipherMapping) { | |
| 124 if (c.webrtc_cipher == cipher) | |
| 125 return c.cipher; | |
| 126 } | |
|
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
| |
| 127 return 0; | |
| 128 } | |
| 129 | |
| 65 // Converter functions from libjingle types to WebKit types. | 130 // Converter functions from libjingle types to WebKit types. |
| 66 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState | 131 blink::WebRTCPeerConnectionHandlerClient::ICEGatheringState |
| 67 GetWebKitIceGatheringState( | 132 GetWebKitIceGatheringState( |
| 68 webrtc::PeerConnectionInterface::IceGatheringState state) { | 133 webrtc::PeerConnectionInterface::IceGatheringState state) { |
| 69 using blink::WebRTCPeerConnectionHandlerClient; | 134 using blink::WebRTCPeerConnectionHandlerClient; |
| 70 switch (state) { | 135 switch (state) { |
| 71 case webrtc::PeerConnectionInterface::kIceGatheringNew: | 136 case webrtc::PeerConnectionInterface::kIceGatheringNew: |
| 72 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateNew; | 137 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateNew; |
| 73 case webrtc::PeerConnectionInterface::kIceGatheringGathering: | 138 case webrtc::PeerConnectionInterface::kIceGatheringGathering: |
| 74 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateGathering; | 139 return WebRTCPeerConnectionHandlerClient::ICEGatheringStateGathering; |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 524 counter_max); | 589 counter_max); |
| 525 break; | 590 break; |
| 526 case webrtc::kEnumCounterIceCandidatePairTypeUdp: | 591 case webrtc::kEnumCounterIceCandidatePairTypeUdp: |
| 527 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_UDP", | 592 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_UDP", |
| 528 counter, counter_max); | 593 counter, counter_max); |
| 529 break; | 594 break; |
| 530 case webrtc::kEnumCounterIceCandidatePairTypeTcp: | 595 case webrtc::kEnumCounterIceCandidatePairTypeTcp: |
| 531 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP", | 596 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.CandidatePairType_TCP", |
| 532 counter, counter_max); | 597 counter, counter_max); |
| 533 break; | 598 break; |
| 599 case webrtc::kEnumCounterAudioSrtpCipher: | |
| 600 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Audio.Srtp", | |
| 601 counter, counter_max); | |
| 602 break; | |
| 603 case webrtc::kEnumCounterAudioSslCipher: | |
| 604 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Audio.Ssl", | |
| 605 ConvertWebRtcSslCipherToStandard(counter)); | |
| 606 break; | |
| 607 case webrtc::kEnumCounterVideoSrtpCipher: | |
| 608 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Video.Srtp", | |
| 609 counter, counter_max); | |
| 610 break; | |
| 611 case webrtc::kEnumCounterVideoSslCipher: | |
| 612 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Video.Ssl", | |
| 613 ConvertWebRtcSslCipherToStandard(counter)); | |
| 614 break; | |
| 615 case webrtc::kEnumCounterDataSrtpCipher: | |
| 616 UMA_HISTOGRAM_ENUMERATION("WebRTC.PeerConnection.Cipher.Data.Srtp", | |
| 617 counter, counter_max); | |
| 618 break; | |
| 619 case webrtc::kEnumCounterDataSslCipher: | |
| 620 UMA_HISTOGRAM_SPARSE_SLOWLY("WebRTC.PeerConnection.Cipher.Data.Ssl", | |
| 621 ConvertWebRtcSslCipherToStandard(counter)); | |
| 622 break; | |
| 534 default: | 623 default: |
| 535 NOTREACHED(); | |
| 536 break; | 624 break; |
| 537 } | 625 } |
| 538 } | 626 } |
| 539 | 627 |
| 540 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type, | 628 void AddHistogramSample(webrtc::PeerConnectionUMAMetricsName type, |
| 541 int value) override { | 629 int value) override { |
| 542 // Runs on libjingle's signaling thread. | 630 // Runs on libjingle's signaling thread. |
| 543 switch (type) { | 631 switch (type) { |
| 544 case webrtc::kTimeToConnect: | 632 case webrtc::kTimeToConnect: |
| 545 UMA_HISTOGRAM_MEDIUM_TIMES( | 633 UMA_HISTOGRAM_MEDIUM_TIMES( |
| (...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1611 } | 1699 } |
| 1612 | 1700 |
| 1613 void RTCPeerConnectionHandler::ResetUMAStats() { | 1701 void RTCPeerConnectionHandler::ResetUMAStats() { |
| 1614 DCHECK(thread_checker_.CalledOnValidThread()); | 1702 DCHECK(thread_checker_.CalledOnValidThread()); |
| 1615 num_local_candidates_ipv6_ = 0; | 1703 num_local_candidates_ipv6_ = 0; |
| 1616 num_local_candidates_ipv4_ = 0; | 1704 num_local_candidates_ipv4_ = 0; |
| 1617 ice_connection_checking_start_ = base::TimeTicks(); | 1705 ice_connection_checking_start_ = base::TimeTicks(); |
| 1618 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); | 1706 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); |
| 1619 } | 1707 } |
| 1620 } // namespace content | 1708 } // namespace content |
| OLD | NEW |