RTC[In/Out]boundRTPStreamStats: qpSum,framesDecoded,framesEncoded added.

Recently added to the spec:
RTCRTPStreamStats.qpSum - https://w3c.github.io/webrtc-stats/#dom-rtcrtpstreamstats-qpsum
RTCInboundRTPStreamStats.framesDecoded - https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-framesdecoded
RTCOutboundRTPStreamStats.framesEncoded - https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-framesencoded

These are added and collected. However, the qpSum is only collected in
the outbound case. It should be collected in the inbound case before
closing crbug.com/657855

BUG=chromium:657854, chromium:657855, chromium:657856

Review-Url: https://codereview.webrtc.org/2588373005
Cr-Commit-Position: refs/heads/master@{#15872}
diff --git a/webrtc/api/rtcstats_integrationtest.cc b/webrtc/api/rtcstats_integrationtest.cc
index 53c73f3..eec8915 100644
--- a/webrtc/api/rtcstats_integrationtest.cc
+++ b/webrtc/api/rtcstats_integrationtest.cc
@@ -509,6 +509,7 @@
       const RTCInboundRTPStreamStats& inbound_stream) {
     RTCStatsVerifier verifier(report_, &inbound_stream);
     VerifyRTCRTPStreamStats(inbound_stream, &verifier);
+    verifier.TestMemberIsUndefined(inbound_stream.qp_sum);
     verifier.TestMemberIsNonNegative<uint32_t>(inbound_stream.packets_received);
     verifier.TestMemberIsNonNegative<uint64_t>(inbound_stream.bytes_received);
     verifier.TestMemberIsNonNegative<uint32_t>(inbound_stream.packets_lost);
@@ -529,6 +530,12 @@
     verifier.TestMemberIsUndefined(inbound_stream.burst_discard_rate);
     verifier.TestMemberIsUndefined(inbound_stream.gap_loss_rate);
     verifier.TestMemberIsUndefined(inbound_stream.gap_discard_rate);
+    if (inbound_stream.media_type.is_defined() &&
+        *inbound_stream.media_type == "video") {
+      verifier.TestMemberIsDefined(inbound_stream.frames_decoded);
+    } else {
+      verifier.TestMemberIsUndefined(inbound_stream.frames_decoded);
+    }
     return verifier.ExpectAllMembersSuccessfullyTested();
   }
 
@@ -536,11 +543,23 @@
       const RTCOutboundRTPStreamStats& outbound_stream) {
     RTCStatsVerifier verifier(report_, &outbound_stream);
     VerifyRTCRTPStreamStats(outbound_stream, &verifier);
+    if (outbound_stream.media_type.is_defined() &&
+        *outbound_stream.media_type == "video") {
+      verifier.TestMemberIsNonNegative<uint64_t>(outbound_stream.qp_sum);
+    } else {
+      verifier.TestMemberIsUndefined(outbound_stream.qp_sum);
+    }
     verifier.TestMemberIsNonNegative<uint32_t>(outbound_stream.packets_sent);
     verifier.TestMemberIsNonNegative<uint64_t>(outbound_stream.bytes_sent);
     verifier.TestMemberIsUndefined(outbound_stream.target_bitrate);
     // TODO(hbos): Defined in video but not audio case. Why? crbug.com/669877
     verifier.MarkMemberTested(outbound_stream.round_trip_time, true);
+    if (outbound_stream.media_type.is_defined() &&
+        *outbound_stream.media_type == "video") {
+      verifier.TestMemberIsDefined(outbound_stream.frames_encoded);
+    } else {
+      verifier.TestMemberIsUndefined(outbound_stream.frames_encoded);
+    }
     return verifier.ExpectAllMembersSuccessfullyTested();
   }