RTCMediaStream[Track]Stats added.

Not all members are collected by RTCStatsCollector and detached tracks
are not visible in the returned stats. This needs to be addressed before
closing crbug.com/660827 and crbug.com/659137

BUG=chromium:660827, chromium:659137, chromium:627816

Review-Url: https://codereview.webrtc.org/2467873005
Cr-Commit-Position: refs/heads/master@{#14978}
diff --git a/webrtc/api/stats/rtcstats_objects.h b/webrtc/api/stats/rtcstats_objects.h
index 4788a14..3263379 100644
--- a/webrtc/api/stats/rtcstats_objects.h
+++ b/webrtc/api/stats/rtcstats_objects.h
@@ -183,6 +183,65 @@
   const char* type() const override;
 };
 
+// https://w3c.github.io/webrtc-stats/#msstats-dict*
+// TODO(hbos): Finish implementation. Tracking bug crbug.com/660827
+class RTCMediaStreamStats final : public RTCStats {
+ public:
+  WEBRTC_RTCSTATS_DECL();
+
+  RTCMediaStreamStats(const std::string& id, int64_t timestamp_us);
+  RTCMediaStreamStats(std::string&& id, int64_t timestamp_us);
+  RTCMediaStreamStats(const RTCMediaStreamStats& other);
+  ~RTCMediaStreamStats() override;
+
+  RTCStatsMember<std::string> stream_identifier;
+  RTCStatsMember<std::vector<std::string>> track_ids;
+};
+
+// https://w3c.github.io/webrtc-stats/#mststats-dict*
+// TODO(hbos): Finish implementation. Tracking bug crbug.com/659137
+class RTCMediaStreamTrackStats final : public RTCStats {
+ public:
+  WEBRTC_RTCSTATS_DECL();
+
+  RTCMediaStreamTrackStats(const std::string& id, int64_t timestamp_us);
+  RTCMediaStreamTrackStats(std::string&& id, int64_t timestamp_us);
+  RTCMediaStreamTrackStats(const RTCMediaStreamTrackStats& other);
+  ~RTCMediaStreamTrackStats() override;
+
+  RTCStatsMember<std::string> track_identifier;
+  RTCStatsMember<bool> remote_source;
+  RTCStatsMember<bool> ended;
+  // TODO(hbos): |RTCStatsCollector| does not return stats for detached tracks.
+  // crbug.com/659137
+  RTCStatsMember<bool> detached;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<std::vector<std::string>> ssrc_ids;
+  // Video-only members
+  RTCStatsMember<uint32_t> frame_width;
+  RTCStatsMember<uint32_t> frame_height;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<double> frames_per_second;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> frames_sent;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> frames_received;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> frames_decoded;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> frames_dropped;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> frames_corrupted;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> partial_frames_lost;
+  // TODO(hbos): Not collected by |RTCStatsCollector|. crbug.com/659137
+  RTCStatsMember<uint32_t> full_frames_lost;
+  // Audio-only members
+  RTCStatsMember<double> audio_level;
+  RTCStatsMember<double> echo_return_loss;
+  RTCStatsMember<double> echo_return_loss_enhancement;
+};
+
 // https://w3c.github.io/webrtc-stats/#pcstats-dict*
 // TODO(hbos): Finish implementation. Tracking bug crbug.com/636818
 class RTCPeerConnectionStats final : public RTCStats {