Switch kStatsValueName* constants to be enums instead of char*.
This is to guard against potentially assigning a value name to an incorrect value, non-static string or otherwise assume they can be treated as strings.

R=perkj@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/26359004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7884 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/talk/app/webrtc/java/jni/peerconnection_jni.cc b/talk/app/webrtc/java/jni/peerconnection_jni.cc
index 43faa9c..cb86877b 100644
--- a/talk/app/webrtc/java/jni/peerconnection_jni.cc
+++ b/talk/app/webrtc/java/jni/peerconnection_jni.cc
@@ -1022,7 +1022,9 @@
     for (int i = 0; i < values.size(); ++i) {
       ScopedLocalRefFrame local_ref_frame(jni);
       const StatsReport::Value& value = values[i];
-      jstring j_name = JavaStringFromStdString(jni, value.name);
+      // Should we use the '.name' enum value here instead of converting the
+      // name to a string?
+      jstring j_name = JavaStringFromStdString(jni, value.display_name());
       jstring j_value = JavaStringFromStdString(jni, value.value);
       jobject j_element_value =
           jni->NewObject(*j_value_class_, j_value_ctor_, j_name, j_value);
diff --git a/talk/app/webrtc/statstypes.cc b/talk/app/webrtc/statstypes.cc
index 51838ac..8547520 100644
--- a/talk/app/webrtc/statstypes.cc
+++ b/talk/app/webrtc/statstypes.cc
@@ -29,148 +29,6 @@
 
 namespace webrtc {
 
-// The items below are in alphabetical order.
-const char StatsReport::kStatsValueNameActiveConnection[] =
-    "googActiveConnection";
-const char StatsReport::kStatsValueNameActualEncBitrate[] =
-    "googActualEncBitrate";
-const char StatsReport::kStatsValueNameAudioOutputLevel[] = "audioOutputLevel";
-const char StatsReport::kStatsValueNameAudioInputLevel[] = "audioInputLevel";
-const char StatsReport::kStatsValueNameAvailableReceiveBandwidth[] =
-    "googAvailableReceiveBandwidth";
-const char StatsReport::kStatsValueNameAvailableSendBandwidth[] =
-    "googAvailableSendBandwidth";
-const char StatsReport::kStatsValueNameAvgEncodeMs[] = "googAvgEncodeMs";
-const char StatsReport::kStatsValueNameBucketDelay[] = "googBucketDelay";
-const char StatsReport::kStatsValueNameBytesReceived[] = "bytesReceived";
-const char StatsReport::kStatsValueNameBytesSent[] = "bytesSent";
-const char StatsReport::kStatsValueNameBandwidthLimitedResolution[] =
-    "googBandwidthLimitedResolution";
-const char StatsReport::kStatsValueNameCaptureJitterMs[] =
-    "googCaptureJitterMs";
-const char StatsReport::kStatsValueNameCaptureQueueDelayMsPerS[] =
-    "googCaptureQueueDelayMsPerS";
-const char StatsReport::kStatsValueNameChannelId[] = "googChannelId";
-const char StatsReport::kStatsValueNameCodecName[] = "googCodecName";
-const char StatsReport::kStatsValueNameComponent[] = "googComponent";
-const char StatsReport::kStatsValueNameContentName[] = "googContentName";
-const char StatsReport::kStatsValueNameCpuLimitedResolution[] =
-    "googCpuLimitedResolution";
-const char StatsReport::kStatsValueNameDecodingCTSG[] =
-    "googDecodingCTSG";
-const char StatsReport::kStatsValueNameDecodingCTN[] =
-    "googDecodingCTN";
-const char StatsReport::kStatsValueNameDecodingNormal[] =
-    "googDecodingNormal";
-const char StatsReport::kStatsValueNameDecodingPLC[] =
-    "googDecodingPLC";
-const char StatsReport::kStatsValueNameDecodingCNG[] =
-    "googDecodingCNG";
-const char StatsReport::kStatsValueNameDecodingPLCCNG[] =
-    "googDecodingPLCCNG";
-const char StatsReport::kStatsValueNameDer[] = "googDerBase64";
-// Echo metrics from the audio processing module.
-const char StatsReport::kStatsValueNameEchoCancellationQualityMin[] =
-    "googEchoCancellationQualityMin";
-const char StatsReport::kStatsValueNameEchoDelayMedian[] =
-    "googEchoCancellationEchoDelayMedian";
-const char StatsReport::kStatsValueNameEchoDelayStdDev[] =
-    "googEchoCancellationEchoDelayStdDev";
-const char StatsReport::kStatsValueNameEchoReturnLoss[] =
-    "googEchoCancellationReturnLoss";
-const char StatsReport::kStatsValueNameEchoReturnLossEnhancement[] =
-    "googEchoCancellationReturnLossEnhancement";
-
-const char StatsReport::kStatsValueNameEncodeUsagePercent[] =
-    "googEncodeUsagePercent";
-const char StatsReport::kStatsValueNameExpandRate[] = "googExpandRate";
-const char StatsReport::kStatsValueNameFingerprint[] = "googFingerprint";
-const char StatsReport::kStatsValueNameFingerprintAlgorithm[] =
-    "googFingerprintAlgorithm";
-const char StatsReport::kStatsValueNameFirsReceived[] = "googFirsReceived";
-const char StatsReport::kStatsValueNameFirsSent[] = "googFirsSent";
-const char StatsReport::kStatsValueNameFrameHeightInput[] =
-    "googFrameHeightInput";
-const char StatsReport::kStatsValueNameFrameHeightReceived[] =
-    "googFrameHeightReceived";
-const char StatsReport::kStatsValueNameFrameHeightSent[] =
-    "googFrameHeightSent";
-const char StatsReport::kStatsValueNameFrameRateReceived[] =
-    "googFrameRateReceived";
-const char StatsReport::kStatsValueNameFrameRateDecoded[] =
-    "googFrameRateDecoded";
-const char StatsReport::kStatsValueNameFrameRateOutput[] =
-    "googFrameRateOutput";
-const char StatsReport::kStatsValueNameDecodeMs[] = "googDecodeMs";
-const char StatsReport::kStatsValueNameMaxDecodeMs[] = "googMaxDecodeMs";
-const char StatsReport::kStatsValueNameCurrentDelayMs[] = "googCurrentDelayMs";
-const char StatsReport::kStatsValueNameTargetDelayMs[] = "googTargetDelayMs";
-const char StatsReport::kStatsValueNameJitterBufferMs[] = "googJitterBufferMs";
-const char StatsReport::kStatsValueNameMinPlayoutDelayMs[] =
-    "googMinPlayoutDelayMs";
-const char StatsReport::kStatsValueNameRenderDelayMs[] = "googRenderDelayMs";
-
-const char StatsReport::kStatsValueNameCaptureStartNtpTimeMs[] =
-    "googCaptureStartNtpTimeMs";
-
-const char StatsReport::kStatsValueNameFrameRateInput[] = "googFrameRateInput";
-const char StatsReport::kStatsValueNameFrameRateSent[] = "googFrameRateSent";
-const char StatsReport::kStatsValueNameFrameWidthInput[] =
-    "googFrameWidthInput";
-const char StatsReport::kStatsValueNameFrameWidthReceived[] =
-    "googFrameWidthReceived";
-const char StatsReport::kStatsValueNameFrameWidthSent[] = "googFrameWidthSent";
-const char StatsReport::kStatsValueNameInitiator[] = "googInitiator";
-const char StatsReport::kStatsValueNameIssuerId[] = "googIssuerId";
-const char StatsReport::kStatsValueNameJitterReceived[] = "googJitterReceived";
-const char StatsReport::kStatsValueNameLocalAddress[] = "googLocalAddress";
-const char StatsReport::kStatsValueNameLocalCandidateType[] =
-    "googLocalCandidateType";
-const char StatsReport::kStatsValueNameLocalCertificateId[] =
-    "googLocalCertificateId";
-const char StatsReport::kStatsValueNameAdaptationChanges[] =
-    "googAdaptationChanges";
-const char StatsReport::kStatsValueNameNacksReceived[] = "googNacksReceived";
-const char StatsReport::kStatsValueNameNacksSent[] = "googNacksSent";
-const char StatsReport::kStatsValueNamePlisReceived[] = "googPlisReceived";
-const char StatsReport::kStatsValueNamePlisSent[] = "googPlisSent";
-const char StatsReport::kStatsValueNamePacketsReceived[] = "packetsReceived";
-const char StatsReport::kStatsValueNamePacketsSent[] = "packetsSent";
-const char StatsReport::kStatsValueNamePacketsLost[] = "packetsLost";
-const char StatsReport::kStatsValueNamePreferredJitterBufferMs[] =
-    "googPreferredJitterBufferMs";
-const char StatsReport::kStatsValueNameReadable[] = "googReadable";
-const char StatsReport::kStatsValueNameRecvPacketGroupArrivalTimeDebug[] =
-    "googReceivedPacketGroupArrivalTimeDebug";
-const char StatsReport::kStatsValueNameRecvPacketGroupPropagationDeltaDebug[] =
-    "googReceivedPacketGroupPropagationDeltaDebug";
-const char
-StatsReport::kStatsValueNameRecvPacketGroupPropagationDeltaSumDebug[] =
-    "googReceivedPacketGroupPropagationDeltaSumDebug";
-const char StatsReport::kStatsValueNameRemoteAddress[] = "googRemoteAddress";
-const char StatsReport::kStatsValueNameRemoteCandidateType[] =
-    "googRemoteCandidateType";
-const char StatsReport::kStatsValueNameRemoteCertificateId[] =
-    "googRemoteCertificateId";
-const char StatsReport::kStatsValueNameRetransmitBitrate[] =
-    "googRetransmitBitrate";
-const char StatsReport::kStatsValueNameRtt[] = "googRtt";
-const char StatsReport::kStatsValueNameSsrc[] = "ssrc";
-const char StatsReport::kStatsValueNameSendPacketsDiscarded[] =
-    "packetsDiscardedOnSend";
-const char StatsReport::kStatsValueNameTargetEncBitrate[] =
-    "googTargetEncBitrate";
-const char StatsReport::kStatsValueNameTransmitBitrate[] =
-    "googTransmitBitrate";
-const char StatsReport::kStatsValueNameTransportId[] = "transportId";
-const char StatsReport::kStatsValueNameTransportType[] = "googTransportType";
-const char StatsReport::kStatsValueNameTrackId[] = "googTrackId";
-const char StatsReport::kStatsValueNameTypingNoiseState[] =
-    "googTypingNoiseState";
-const char StatsReport::kStatsValueNameViewLimitedResolution[] =
-    "googViewLimitedResolution";
-const char StatsReport::kStatsValueNameWritable[] = "googWritable";
-
 const char StatsReport::kStatsReportTypeSession[] = "googLibjingleSession";
 const char StatsReport::kStatsReportTypeBwe[] = "VideoBwe";
 const char StatsReport::kStatsReportTypeRemoteSsrc[] = "remoteSsrc";
@@ -218,10 +76,6 @@
   return id == other_id;
 }
 
-StatsReport::Value::Value()
-    : name(NULL) {
-}
-
 // The copy ctor can't be declared as explicit due to problems with STL.
 StatsReport::Value::Value(const Value& other)
     : name(other.name), value(other.value) {
@@ -241,11 +95,194 @@
   return *this;
 }
 
-// TODO(tommi): Change implementation to do a simple enum value-to-static-
-// string conversion when client code has been updated to use this method
-// instead of the |name| member variable.
 const char* StatsReport::Value::display_name() const {
-  return name;
+  switch (name) {
+    case kStatsValueNameAudioOutputLevel:
+      return "audioOutputLevel";
+    case kStatsValueNameAudioInputLevel:
+      return "audioInputLevel";
+    case kStatsValueNameBytesSent:
+      return "bytesSent";
+    case kStatsValueNamePacketsSent:
+      return "packetsSent";
+    case kStatsValueNameBytesReceived:
+      return "bytesReceived";
+    case kStatsValueNamePacketsReceived:
+      return "packetsReceived";
+    case kStatsValueNamePacketsLost:
+      return "packetsLost";
+    case kStatsValueNameTransportId:
+      return "transportId";
+    case kStatsValueNameSsrc:
+      return "ssrc";
+
+    // 'goog' prefixed constants.
+    case kStatsValueNameActiveConnection:
+      return "googActiveConnection";
+    case kStatsValueNameActualEncBitrate:
+      return "googActualEncBitrate";
+    case kStatsValueNameAvailableReceiveBandwidth:
+      return "googAvailableReceiveBandwidth";
+    case kStatsValueNameAvailableSendBandwidth:
+      return "googAvailableSendBandwidth";
+    case kStatsValueNameAvgEncodeMs:
+      return "googAvgEncodeMs";
+    case kStatsValueNameBucketDelay:
+      return "googBucketDelay";
+    case kStatsValueNameBandwidthLimitedResolution:
+      return "googBandwidthLimitedResolution";
+    case kStatsValueNameCaptureJitterMs:
+      return "googCaptureJitterMs";
+    case kStatsValueNameCaptureQueueDelayMsPerS:
+      return "googCaptureQueueDelayMsPerS";
+    case kStatsValueNameChannelId:
+      return "googChannelId";
+    case kStatsValueNameCodecName:
+      return "googCodecName";
+    case kStatsValueNameComponent:
+      return "googComponent";
+    case kStatsValueNameContentName:
+      return "googContentName";
+    case kStatsValueNameCpuLimitedResolution:
+      return "googCpuLimitedResolution";
+    case kStatsValueNameDecodingCTSG:
+      return "googDecodingCTSG";
+    case kStatsValueNameDecodingCTN:
+      return "googDecodingCTN";
+    case kStatsValueNameDecodingNormal:
+      return "googDecodingNormal";
+    case kStatsValueNameDecodingPLC:
+      return "googDecodingPLC";
+    case kStatsValueNameDecodingCNG:
+      return "googDecodingCNG";
+    case kStatsValueNameDecodingPLCCNG:
+      return "googDecodingPLCCNG";
+    case kStatsValueNameDer:
+      return "googDerBase64";
+    case kStatsValueNameEchoCancellationQualityMin:
+      return "googEchoCancellationQualityMin";
+    case kStatsValueNameEchoDelayMedian:
+      return "googEchoCancellationEchoDelayMedian";
+    case kStatsValueNameEchoDelayStdDev:
+      return "googEchoCancellationEchoDelayStdDev";
+    case kStatsValueNameEchoReturnLoss:
+      return "googEchoCancellationReturnLoss";
+    case kStatsValueNameEchoReturnLossEnhancement:
+      return "googEchoCancellationReturnLossEnhancement";
+    case kStatsValueNameEncodeUsagePercent:
+      return "googEncodeUsagePercent";
+    case kStatsValueNameExpandRate:
+      return "googExpandRate";
+    case kStatsValueNameFingerprint:
+      return "googFingerprint";
+    case kStatsValueNameFingerprintAlgorithm:
+      return "googFingerprintAlgorithm";
+    case kStatsValueNameFirsReceived:
+      return "googFirsReceived";
+    case kStatsValueNameFirsSent:
+      return "googFirsSent";
+    case kStatsValueNameFrameHeightInput:
+      return "googFrameHeightInput";
+    case kStatsValueNameFrameHeightReceived:
+      return "googFrameHeightReceived";
+    case kStatsValueNameFrameHeightSent:
+      return "googFrameHeightSent";
+    case kStatsValueNameFrameRateReceived:
+      return "googFrameRateReceived";
+    case kStatsValueNameFrameRateDecoded:
+      return "googFrameRateDecoded";
+    case kStatsValueNameFrameRateOutput:
+      return "googFrameRateOutput";
+    case kStatsValueNameDecodeMs:
+      return "googDecodeMs";
+    case kStatsValueNameMaxDecodeMs:
+      return "googMaxDecodeMs";
+    case kStatsValueNameCurrentDelayMs:
+      return "googCurrentDelayMs";
+    case kStatsValueNameTargetDelayMs:
+      return "googTargetDelayMs";
+    case kStatsValueNameJitterBufferMs:
+      return "googJitterBufferMs";
+    case kStatsValueNameMinPlayoutDelayMs:
+      return "googMinPlayoutDelayMs";
+    case kStatsValueNameRenderDelayMs:
+      return "googRenderDelayMs";
+    case kStatsValueNameCaptureStartNtpTimeMs:
+      return "googCaptureStartNtpTimeMs";
+    case kStatsValueNameFrameRateInput:
+      return "googFrameRateInput";
+    case kStatsValueNameFrameRateSent:
+      return "googFrameRateSent";
+    case kStatsValueNameFrameWidthInput:
+      return "googFrameWidthInput";
+    case kStatsValueNameFrameWidthReceived:
+      return "googFrameWidthReceived";
+    case kStatsValueNameFrameWidthSent:
+      return "googFrameWidthSent";
+    case kStatsValueNameInitiator:
+      return "googInitiator";
+    case kStatsValueNameIssuerId:
+      return "googIssuerId";
+    case kStatsValueNameJitterReceived:
+      return "googJitterReceived";
+    case kStatsValueNameLocalAddress:
+      return "googLocalAddress";
+    case kStatsValueNameLocalCandidateType:
+      return "googLocalCandidateType";
+    case kStatsValueNameLocalCertificateId:
+      return "googLocalCertificateId";
+    case kStatsValueNameAdaptationChanges:
+      return "googAdaptationChanges";
+    case kStatsValueNameNacksReceived:
+      return "googNacksReceived";
+    case kStatsValueNameNacksSent:
+      return "googNacksSent";
+    case kStatsValueNamePlisReceived:
+      return "googPlisReceived";
+    case kStatsValueNamePlisSent:
+      return "googPlisSent";
+    case kStatsValueNamePreferredJitterBufferMs:
+      return "googPreferredJitterBufferMs";
+    case kStatsValueNameReadable:
+      return "googReadable";
+    case kStatsValueNameRecvPacketGroupArrivalTimeDebug:
+      return "googReceivedPacketGroupArrivalTimeDebug";
+    case kStatsValueNameRecvPacketGroupPropagationDeltaDebug:
+      return "googReceivedPacketGroupPropagationDeltaDebug";
+    case kStatsValueNameRecvPacketGroupPropagationDeltaSumDebug:
+      return "googReceivedPacketGroupPropagationDeltaSumDebug";
+    case kStatsValueNameRemoteAddress:
+      return "googRemoteAddress";
+    case kStatsValueNameRemoteCandidateType:
+      return "googRemoteCandidateType";
+    case kStatsValueNameRemoteCertificateId:
+      return "googRemoteCertificateId";
+    case kStatsValueNameRetransmitBitrate:
+      return "googRetransmitBitrate";
+    case kStatsValueNameRtt:
+      return "googRtt";
+    case kStatsValueNameSendPacketsDiscarded:
+      return "packetsDiscardedOnSend";
+    case kStatsValueNameTargetEncBitrate:
+      return "googTargetEncBitrate";
+    case kStatsValueNameTransmitBitrate:
+      return "googTransmitBitrate";
+    case kStatsValueNameTransportType:
+      return "googTransportType";
+    case kStatsValueNameTrackId:
+      return "googTrackId";
+    case kStatsValueNameTypingNoiseState:
+      return "googTypingNoiseState";
+    case kStatsValueNameViewLimitedResolution:
+      return "googViewLimitedResolution";
+    case kStatsValueNameWritable:
+      return "googWritable";
+    default:
+      ASSERT(false);
+      break;
+  }
+
+  return nullptr;
 }
 
 void StatsReport::AddValue(StatsReport::StatsValueName name,
diff --git a/talk/app/webrtc/statstypes.h b/talk/app/webrtc/statstypes.h
index f2a23d0..d47dc18 100644
--- a/talk/app/webrtc/statstypes.h
+++ b/talk/app/webrtc/statstypes.h
@@ -65,10 +65,6 @@
   // without requiring a new StatsReport instance.
   bool operator==(const std::string& other_id) const;
 
-  // TODO(tommi): Change this to be an enum type that holds all the
-  // kStatsValueName constants.
-  typedef const char* StatsValueName;
-
   // The unique identifier for this object.
   // This is used as a key for this report in ordered containers,
   // so it must never be changed.
@@ -76,8 +72,102 @@
   std::string id;  // See below for contents.
   std::string type;  // See below for contents.
 
+  // StatsValue names.
+  enum StatsValueName {
+    kStatsValueNameActiveConnection,
+    kStatsValueNameAudioInputLevel,
+    kStatsValueNameAudioOutputLevel,
+    kStatsValueNameBytesReceived,
+    kStatsValueNameBytesSent,
+    kStatsValueNamePacketsLost,
+    kStatsValueNamePacketsReceived,
+    kStatsValueNamePacketsSent,
+    kStatsValueNameReadable,
+    kStatsValueNameSsrc,
+    kStatsValueNameTransportId,
+
+    // Internal StatsValue names.
+    kStatsValueNameActualEncBitrate,
+    kStatsValueNameAdaptationChanges,
+    kStatsValueNameAvailableReceiveBandwidth,
+    kStatsValueNameAvailableSendBandwidth,
+    kStatsValueNameAvgEncodeMs,
+    kStatsValueNameBandwidthLimitedResolution,
+    kStatsValueNameBucketDelay,
+    kStatsValueNameCaptureJitterMs,
+    kStatsValueNameCaptureQueueDelayMsPerS,
+    kStatsValueNameCaptureStartNtpTimeMs,
+    kStatsValueNameChannelId,
+    kStatsValueNameCodecName,
+    kStatsValueNameComponent,
+    kStatsValueNameContentName,
+    kStatsValueNameCpuLimitedResolution,
+    kStatsValueNameCurrentDelayMs,
+    kStatsValueNameDecodeMs,
+    kStatsValueNameDecodingCNG,
+    kStatsValueNameDecodingCTN,
+    kStatsValueNameDecodingCTSG,
+    kStatsValueNameDecodingNormal,
+    kStatsValueNameDecodingPLC,
+    kStatsValueNameDecodingPLCCNG,
+    kStatsValueNameDer,
+    kStatsValueNameEchoCancellationQualityMin,
+    kStatsValueNameEchoDelayMedian,
+    kStatsValueNameEchoDelayStdDev,
+    kStatsValueNameEchoReturnLoss,
+    kStatsValueNameEchoReturnLossEnhancement,
+    kStatsValueNameEncodeUsagePercent,
+    kStatsValueNameExpandRate,
+    kStatsValueNameFingerprint,
+    kStatsValueNameFingerprintAlgorithm,
+    kStatsValueNameFirsReceived,
+    kStatsValueNameFirsSent,
+    kStatsValueNameFrameHeightInput,
+    kStatsValueNameFrameHeightReceived,
+    kStatsValueNameFrameHeightSent,
+    kStatsValueNameFrameRateDecoded,
+    kStatsValueNameFrameRateInput,
+    kStatsValueNameFrameRateOutput,
+    kStatsValueNameFrameRateReceived,
+    kStatsValueNameFrameRateSent,
+    kStatsValueNameFrameWidthInput,
+    kStatsValueNameFrameWidthReceived,
+    kStatsValueNameFrameWidthSent,
+    kStatsValueNameInitiator,
+    kStatsValueNameIssuerId,
+    kStatsValueNameJitterBufferMs,
+    kStatsValueNameJitterReceived,
+    kStatsValueNameLocalAddress,
+    kStatsValueNameLocalCandidateType,
+    kStatsValueNameLocalCertificateId,
+    kStatsValueNameMaxDecodeMs,
+    kStatsValueNameMinPlayoutDelayMs,
+    kStatsValueNameNacksReceived,
+    kStatsValueNameNacksSent,
+    kStatsValueNamePlisReceived,
+    kStatsValueNamePlisSent,
+    kStatsValueNamePreferredJitterBufferMs,
+    kStatsValueNameRecvPacketGroupArrivalTimeDebug,
+    kStatsValueNameRecvPacketGroupPropagationDeltaDebug,
+    kStatsValueNameRecvPacketGroupPropagationDeltaSumDebug,
+    kStatsValueNameRemoteAddress,
+    kStatsValueNameRemoteCandidateType,
+    kStatsValueNameRemoteCertificateId,
+    kStatsValueNameRenderDelayMs,
+    kStatsValueNameRetransmitBitrate,
+    kStatsValueNameRtt,
+    kStatsValueNameSendPacketsDiscarded,
+    kStatsValueNameTargetDelayMs,
+    kStatsValueNameTargetEncBitrate,
+    kStatsValueNameTrackId,
+    kStatsValueNameTransmitBitrate,
+    kStatsValueNameTransportType,
+    kStatsValueNameTypingNoiseState,
+    kStatsValueNameViewLimitedResolution,
+    kStatsValueNameWritable,
+  };
+
   struct Value {
-    Value();
     // The copy ctor can't be declared as explicit due to problems with STL.
     Value(const Value& other);
     explicit Value(StatsValueName name);
@@ -88,9 +178,7 @@
     // The public |name| member variable is otherwise meant to be read-only.
     Value& operator=(const Value& other);
 
-    // TODO(tommi): Change implementation to do a simple enum value-to-static-
-    // string conversion when client code has been updated to use this method
-    // instead of the |name| member variable.
+    // Returns the string representation of |name|.
     const char* display_name() const;
 
     const StatsValueName name;
@@ -153,9 +241,6 @@
   // ICE Candidate. It links to its transport.
   static const char kStatsReportTypeIceCandidate[];
 
-  // The id of StatsReport of type VideoBWE.
-  static const char kStatsReportVideoBweId[];
-
   // A StatsReport of |type| = "googCertificate" contains an SSL certificate
   // transmitted by one of the endpoints of this connection.  The |id| is
   // controlled by the fingerprint, and is used to identify the certificate in
@@ -164,99 +249,8 @@
   // "googIssuerId").
   static const char kStatsReportTypeCertificate[];
 
-  // StatsValue names
-  static const char kStatsValueNameAudioOutputLevel[];
-  static const char kStatsValueNameAudioInputLevel[];
-  static const char kStatsValueNameBytesSent[];
-  static const char kStatsValueNamePacketsSent[];
-  static const char kStatsValueNameBytesReceived[];
-  static const char kStatsValueNamePacketsReceived[];
-  static const char kStatsValueNamePacketsLost[];
-  static const char kStatsValueNameTransportId[];
-  static const char kStatsValueNameLocalAddress[];
-  static const char kStatsValueNameRemoteAddress[];
-  static const char kStatsValueNameWritable[];
-  static const char kStatsValueNameReadable[];
-  static const char kStatsValueNameActiveConnection[];
-
-
-  // Internal StatsValue names
-  static const char kStatsValueNameAvgEncodeMs[];
-  static const char kStatsValueNameEncodeUsagePercent[];
-  static const char kStatsValueNameCaptureJitterMs[];
-  static const char kStatsValueNameCaptureQueueDelayMsPerS[];
-  static const char kStatsValueNameCodecName[];
-  static const char kStatsValueNameBandwidthLimitedResolution[];
-  static const char kStatsValueNameCpuLimitedResolution[];
-  static const char kStatsValueNameViewLimitedResolution[];
-  static const char kStatsValueNameAdaptationChanges[];
-  static const char kStatsValueNameEchoCancellationQualityMin[];
-  static const char kStatsValueNameEchoDelayMedian[];
-  static const char kStatsValueNameEchoDelayStdDev[];
-  static const char kStatsValueNameEchoReturnLoss[];
-  static const char kStatsValueNameEchoReturnLossEnhancement[];
-  static const char kStatsValueNameExpandRate[];
-  static const char kStatsValueNameFirsReceived[];
-  static const char kStatsValueNameFirsSent[];
-  static const char kStatsValueNameFrameHeightInput[];
-  static const char kStatsValueNameFrameHeightReceived[];
-  static const char kStatsValueNameFrameHeightSent[];
-  static const char kStatsValueNameFrameRateReceived[];
-  static const char kStatsValueNameFrameRateDecoded[];
-  static const char kStatsValueNameFrameRateOutput[];
-  static const char kStatsValueNameDecodeMs[];
-  static const char kStatsValueNameMaxDecodeMs[];
-  static const char kStatsValueNameCurrentDelayMs[];
-  static const char kStatsValueNameTargetDelayMs[];
-  static const char kStatsValueNameJitterBufferMs[];
-  static const char kStatsValueNameMinPlayoutDelayMs[];
-  static const char kStatsValueNameRenderDelayMs[];
-  static const char kStatsValueNameCaptureStartNtpTimeMs[];
-  static const char kStatsValueNameFrameRateInput[];
-  static const char kStatsValueNameFrameRateSent[];
-  static const char kStatsValueNameFrameWidthInput[];
-  static const char kStatsValueNameFrameWidthReceived[];
-  static const char kStatsValueNameFrameWidthSent[];
-  static const char kStatsValueNameJitterReceived[];
-  static const char kStatsValueNameNacksReceived[];
-  static const char kStatsValueNameNacksSent[];
-  static const char kStatsValueNamePlisReceived[];
-  static const char kStatsValueNamePlisSent[];
-  static const char kStatsValueNamePreferredJitterBufferMs[];
-  static const char kStatsValueNameRtt[];
-  static const char kStatsValueNameAvailableSendBandwidth[];
-  static const char kStatsValueNameAvailableReceiveBandwidth[];
-  static const char kStatsValueNameTargetEncBitrate[];
-  static const char kStatsValueNameActualEncBitrate[];
-  static const char kStatsValueNameRetransmitBitrate[];
-  static const char kStatsValueNameTransmitBitrate[];
-  static const char kStatsValueNameBucketDelay[];
-  static const char kStatsValueNameInitiator[];
-  static const char kStatsValueNameTransportType[];
-  static const char kStatsValueNameContentName[];
-  static const char kStatsValueNameComponent[];
-  static const char kStatsValueNameChannelId[];
-  static const char kStatsValueNameTrackId[];
-  static const char kStatsValueNameSsrc[];
-  static const char kStatsValueNameSendPacketsDiscarded[];
-  static const char kStatsValueNameTypingNoiseState[];
-  static const char kStatsValueNameDer[];
-  static const char kStatsValueNameFingerprint[];
-  static const char kStatsValueNameFingerprintAlgorithm[];
-  static const char kStatsValueNameIssuerId[];
-  static const char kStatsValueNameLocalCertificateId[];
-  static const char kStatsValueNameRemoteCertificateId[];
-  static const char kStatsValueNameLocalCandidateType[];
-  static const char kStatsValueNameRemoteCandidateType[];
-  static const char kStatsValueNameRecvPacketGroupArrivalTimeDebug[];
-  static const char kStatsValueNameRecvPacketGroupPropagationDeltaDebug[];
-  static const char kStatsValueNameRecvPacketGroupPropagationDeltaSumDebug[];
-  static const char kStatsValueNameDecodingCTSG[];
-  static const char kStatsValueNameDecodingCTN[];
-  static const char kStatsValueNameDecodingNormal[];
-  static const char kStatsValueNameDecodingPLC[];
-  static const char kStatsValueNameDecodingCNG[];
-  static const char kStatsValueNameDecodingPLCCNG[];
+  // The id of StatsReport of type VideoBWE.
+  static const char kStatsReportVideoBweId[];
 };
 
 // This class is provided for the cases where we need to keep