RTCIceCandidateStats[1] added.

The RTCStatsCollector collects candidates from candidate pairs. Note
that there may be other candidates that are not paired with anything,
stats for these should also be produced before closing crbug.com/632723.

[1] https://w3c.github.io/webrtc-stats/#icecandidate-dict*

BUG=chromium:627816, chromium:632723

Review-Url: https://codereview.webrtc.org/2384143002
Cr-Commit-Position: refs/heads/master@{#14565}
diff --git a/webrtc/api/rtcstatscollector.h b/webrtc/api/rtcstatscollector.h
index 2f5ed86..6443d13 100644
--- a/webrtc/api/rtcstatscollector.h
+++ b/webrtc/api/rtcstatscollector.h
@@ -21,10 +21,12 @@
 #include "webrtc/base/scoped_ref_ptr.h"
 #include "webrtc/base/timeutils.h"
 
+namespace cricket {
+class Candidate;
+}  // namespace cricket
+
 namespace rtc {
-
 class SSLCertificate;
-
 }  // namespace rtc
 
 namespace webrtc {
@@ -76,12 +78,22 @@
   void AddPartialResults_s(rtc::scoped_refptr<RTCStatsReport> partial_report);
   void DeliverCachedReport();
 
+  // Produces |RTCCertificateStats|.
   void ProduceCertificateStats_s(
       int64_t timestamp_us, const SessionStats& session_stats,
       RTCStatsReport* report) const;
   void ProduceCertificateStatsFromSSLCertificateAndChain_s(
       int64_t timestamp_us, const rtc::SSLCertificate& certificate,
       RTCStatsReport* report) const;
+  // Produces |RTCIceCandidateStats|. TODO(hbos): Should also produce
+  // |RTCIceCandidatePairStats|. crbug.com/633550
+  void ProduceIceCandidateAndPairStats_s(
+      int64_t timestamp_us, const SessionStats& session_stats,
+      RTCStatsReport* report) const;
+  const std::string& ProduceIceCandidateStats_s(
+      int64_t timestamp_us, const cricket::Candidate& candidate, bool is_local,
+      RTCStatsReport* report) const;
+  // Produces |RTCPeerConnectionStats|.
   void ProducePeerConnectionStats_s(
       int64_t timestamp_us, RTCStatsReport* report) const;
 
@@ -105,6 +117,9 @@
   rtc::scoped_refptr<const RTCStatsReport> cached_report_;
 };
 
+// Helper function, exposed for unittests.
+const char* CandidateTypeToRTCIceCandidateType(const std::string& type);
+
 }  // namespace webrtc
 
 #endif  // WEBRTC_API_RTCSTATSCOLLECTOR_H_