| Index: content/renderer/media/webrtc/rtc_stats.cc
 | 
| diff --git a/content/renderer/media/webrtc/rtc_stats.cc b/content/renderer/media/webrtc/rtc_stats.cc
 | 
| index 06aa1c79362248290dde8f04fde6232e0f02dba8..be7c7f736439569c7c79ca5325d795f81d80d6d9 100644
 | 
| --- a/content/renderer/media/webrtc/rtc_stats.cc
 | 
| +++ b/content/renderer/media/webrtc/rtc_stats.cc
 | 
| @@ -4,11 +4,56 @@
 | 
|  
 | 
|  #include "content/renderer/media/webrtc/rtc_stats.h"
 | 
|  
 | 
| +#include <set>
 | 
| +#include <string>
 | 
| +
 | 
| +#include "base/lazy_instance.h"
 | 
|  #include "base/logging.h"
 | 
|  #include "base/time/time.h"
 | 
| +#include "third_party/webrtc/api/stats/rtcstats_objects.h"
 | 
|  
 | 
|  namespace content {
 | 
|  
 | 
| +namespace {
 | 
| +
 | 
| +class RTCStatsWhitelist {
 | 
| + public:
 | 
| +  RTCStatsWhitelist() {
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCCertificateStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCDataChannelStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCIceCandidatePairStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCIceCandidateStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCLocalIceCandidateStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCRemoteIceCandidateStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCPeerConnectionStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCRTPStreamStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCInboundRTPStreamStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCOutboundRTPStreamStats::kType);
 | 
| +    whitelisted_stats_types_.insert(webrtc::RTCTransportStats::kType);
 | 
| +  }
 | 
| +
 | 
| +  bool IsWhitelisted(const webrtc::RTCStats& stats) {
 | 
| +    return whitelisted_stats_types_.find(stats.type()) !=
 | 
| +           whitelisted_stats_types_.end();
 | 
| +  }
 | 
| +
 | 
| +  void WhitelistStatsForTesting(const char* type) {
 | 
| +    whitelisted_stats_types_.insert(type);
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  std::set<std::string> whitelisted_stats_types_;
 | 
| +};
 | 
| +
 | 
| +base::LazyInstance<RTCStatsWhitelist>::Leaky
 | 
| +    g_whitelisted_stats = LAZY_INSTANCE_INITIALIZER;
 | 
| +
 | 
| +bool IsWhitelistedStats(const webrtc::RTCStats& stats) {
 | 
| +  return g_whitelisted_stats.Get().IsWhitelisted(stats);
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
|  RTCStatsReport::RTCStatsReport(
 | 
|      const scoped_refptr<const webrtc::RTCStatsReport>& stats_report)
 | 
|      : stats_report_(stats_report),
 | 
| @@ -28,19 +73,22 @@ std::unique_ptr<blink::WebRTCStatsReport> RTCStatsReport::copyHandle() const {
 | 
|  std::unique_ptr<blink::WebRTCStats> RTCStatsReport::getStats(
 | 
|      blink::WebString id) const {
 | 
|    const webrtc::RTCStats* stats = stats_report_->Get(id.utf8());
 | 
| -  if (!stats)
 | 
| +  if (!stats || !IsWhitelistedStats(*stats))
 | 
|      return std::unique_ptr<blink::WebRTCStats>();
 | 
|    return std::unique_ptr<blink::WebRTCStats>(
 | 
|        new RTCStats(stats_report_, stats));
 | 
|  }
 | 
|  
 | 
|  std::unique_ptr<blink::WebRTCStats> RTCStatsReport::next() {
 | 
| -  if (it_ == end_)
 | 
| -    return std::unique_ptr<blink::WebRTCStats>();
 | 
| -  const webrtc::RTCStats& next = *it_;
 | 
| -  ++it_;
 | 
| -  return std::unique_ptr<blink::WebRTCStats>(
 | 
| -      new RTCStats(stats_report_, &next));
 | 
| +  while (it_ != end_) {
 | 
| +    const webrtc::RTCStats& next = *it_;
 | 
| +    ++it_;
 | 
| +    if (IsWhitelistedStats(next)) {
 | 
| +      return std::unique_ptr<blink::WebRTCStats>(
 | 
| +          new RTCStats(stats_report_, &next));
 | 
| +    }
 | 
| +  }
 | 
| +  return std::unique_ptr<blink::WebRTCStats>();
 | 
|  }
 | 
|  
 | 
|  RTCStats::RTCStats(
 | 
| @@ -224,4 +272,8 @@ blink::WebVector<blink::WebString> RTCStatsMember::valueSequenceString() const {
 | 
|    return web_sequence;
 | 
|  }
 | 
|  
 | 
| +void WhitelistStatsForTesting(const char* type) {
 | 
| +  g_whitelisted_stats.Get().WhitelistStatsForTesting(type);
 | 
| +}
 | 
| +
 | 
|  }  // namespace content
 | 
| 
 |