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 |