RTCIceCandidatePairStats.available[Outgoing/Incoming]Bitrate collected.

Collected for current pairs, undefined for other pairs. This is the
same as the old stats' VideoBwe.googAvailable[Send/Receive]Bandwidth.

NOTE: The value this is based on for incoming bitrate is not set. This
CL wires it up but has a TODO that the incoming bitrate needs to be
collected properly. (Same problem for both old and new stats.)

Spec: https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatepairstats-availableoutgoingbitrate
Discussion: https://github.com/w3c/webrtc-stats/issues/112#issuecomment-277167781

BUG=webrtc:7062

Review-Url: https://codereview.webrtc.org/2675923002
Cr-Commit-Position: refs/heads/master@{#16472}
diff --git a/webrtc/pc/rtcstats_integrationtest.cc b/webrtc/pc/rtcstats_integrationtest.cc
index 5775047..a20a909 100644
--- a/webrtc/pc/rtcstats_integrationtest.cc
+++ b/webrtc/pc/rtcstats_integrationtest.cc
@@ -259,6 +259,11 @@
   void VerifyReport() {
     std::set<const char*> missing_stats = StatsTypes();
     bool verify_successful = true;
+    std::vector<const RTCTransportStats*> transport_stats =
+        report_->GetStatsOfType<RTCTransportStats>();
+    EXPECT_EQ(transport_stats.size(), 1);
+    std::string selected_candidate_pair_id =
+        *transport_stats[0]->selected_candidate_pair_id;
     for (const RTCStats& stats : *report_) {
       missing_stats.erase(stats.type());
       if (stats.type() == RTCCertificateStats::kType) {
@@ -272,7 +277,8 @@
             stats.cast_to<RTCDataChannelStats>());
       } else if (stats.type() == RTCIceCandidatePairStats::kType) {
         verify_successful &= VerifyRTCIceCandidatePairStats(
-            stats.cast_to<RTCIceCandidatePairStats>());
+            stats.cast_to<RTCIceCandidatePairStats>(),
+            stats.id() == selected_candidate_pair_id);
       } else if (stats.type() == RTCLocalIceCandidateStats::kType) {
         verify_successful &= VerifyRTCLocalIceCandidateStats(
             stats.cast_to<RTCLocalIceCandidateStats>());
@@ -351,7 +357,7 @@
   }
 
   bool VerifyRTCIceCandidatePairStats(
-      const RTCIceCandidatePairStats& candidate_pair) {
+      const RTCIceCandidatePairStats& candidate_pair, bool is_selected_pair) {
     RTCStatsVerifier verifier(report_, &candidate_pair);
     verifier.TestMemberIsIDReference(
         candidate_pair.transport_id, RTCTransportStats::kType);
@@ -369,7 +375,12 @@
     verifier.TestMemberIsUndefined(candidate_pair.total_round_trip_time);
     verifier.TestMemberIsNonNegative<double>(
         candidate_pair.current_round_trip_time);
-    verifier.TestMemberIsUndefined(candidate_pair.available_outgoing_bitrate);
+    if (is_selected_pair) {
+      verifier.TestMemberIsNonNegative<double>(
+          candidate_pair.available_outgoing_bitrate);
+    } else {
+      verifier.TestMemberIsUndefined(candidate_pair.available_outgoing_bitrate);
+    }
     verifier.TestMemberIsUndefined(candidate_pair.available_incoming_bitrate);
     verifier.TestMemberIsNonNegative<uint64_t>(
         candidate_pair.requests_received);