RTCStatsCollector: Remove closed channels from opened set.

This is a problem if a data channel is re-opened or a new data channel
occupies the same space in memory as a previously closed data channel.

Unittest updated to cover this (failed before fix, now passes).

BUG=webrtc:7181

Review-Url: https://codereview.webrtc.org/2746393003
Cr-Commit-Position: refs/heads/master@{#17304}
diff --git a/webrtc/pc/rtcstatscollector_unittest.cc b/webrtc/pc/rtcstatscollector_unittest.cc
index ea7b34a..8fd00c6 100644
--- a/webrtc/pc/rtcstatscollector_unittest.cc
+++ b/webrtc/pc/rtcstatscollector_unittest.cc
@@ -1463,6 +1463,39 @@
               report->Get("RTCPeerConnection")->cast_to<
                   RTCPeerConnectionStats>());
   }
+
+  // Re-opening a data channel (or opening a new data channel that is re-using
+  // the same address in memory) should increase the opened count.
+  dummy_channel_b->SignalOpened(dummy_channel_b.get());
+
+  {
+    collector_->ClearCachedStatsReport();
+    rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
+    RTCPeerConnectionStats expected("RTCPeerConnection",
+                                    report->timestamp_us());
+    expected.data_channels_opened = 3;
+    expected.data_channels_closed = 1;
+    ASSERT_TRUE(report->Get("RTCPeerConnection"));
+    EXPECT_EQ(expected,
+              report->Get("RTCPeerConnection")->cast_to<
+                  RTCPeerConnectionStats>());
+  }
+
+  dummy_channel_a->SignalClosed(dummy_channel_a.get());
+  dummy_channel_b->SignalClosed(dummy_channel_b.get());
+
+  {
+    collector_->ClearCachedStatsReport();
+    rtc::scoped_refptr<const RTCStatsReport> report = GetStatsReport();
+    RTCPeerConnectionStats expected("RTCPeerConnection",
+                                    report->timestamp_us());
+    expected.data_channels_opened = 3;
+    expected.data_channels_closed = 3;
+    ASSERT_TRUE(report->Get("RTCPeerConnection"));
+    EXPECT_EQ(expected,
+              report->Get("RTCPeerConnection")->cast_to<
+                  RTCPeerConnectionStats>());
+  }
 }
 
 TEST_F(RTCStatsCollectorTest,