RTCIceCandidateStats.isRemote added and collected.

This was added to the spec: https://w3c.github.io/webrtc-stats/#dom-rtcicecandidatestats-isremote

BUG=webrtc:6756, chromium:632723, chromium:627816

Review-Url: https://codereview.webrtc.org/2595003003
Cr-Commit-Position: refs/heads/master@{#15863}
diff --git a/webrtc/api/rtcstats_integrationtest.cc b/webrtc/api/rtcstats_integrationtest.cc
index d78ba35..84ea3ab 100644
--- a/webrtc/api/rtcstats_integrationtest.cc
+++ b/webrtc/api/rtcstats_integrationtest.cc
@@ -354,6 +354,7 @@
   bool VerifyRTCIceCandidateStats(
       const RTCIceCandidateStats& candidate) {
     RTCStatsVerifier verifier(report_, &candidate);
+    verifier.TestMemberIsDefined(candidate.is_remote);
     verifier.TestMemberIsDefined(candidate.ip);
     verifier.TestMemberIsDefined(candidate.port);
     verifier.TestMemberIsDefined(candidate.protocol);
diff --git a/webrtc/api/rtcstatscollector_unittest.cc b/webrtc/api/rtcstatscollector_unittest.cc
index 749b3d5..ee09054 100644
--- a/webrtc/api/rtcstatscollector_unittest.cc
+++ b/webrtc/api/rtcstatscollector_unittest.cc
@@ -909,6 +909,7 @@
   expected_a_local_host.protocol = "a_local_host's protocol";
   expected_a_local_host.candidate_type = "host";
   expected_a_local_host.priority = 0;
+  EXPECT_FALSE(*expected_a_local_host.is_remote);
 
   std::unique_ptr<cricket::Candidate> a_remote_srflx = CreateFakeCandidate(
       "6.7.8.9", 10,
@@ -922,6 +923,7 @@
   expected_a_remote_srflx.protocol = "remote_srflx's protocol";
   expected_a_remote_srflx.candidate_type = "srflx";
   expected_a_remote_srflx.priority = 1;
+  EXPECT_TRUE(*expected_a_remote_srflx.is_remote);
 
   std::unique_ptr<cricket::Candidate> a_local_prflx = CreateFakeCandidate(
       "11.12.13.14", 15,
@@ -935,6 +937,7 @@
   expected_a_local_prflx.protocol = "a_local_prflx's protocol";
   expected_a_local_prflx.candidate_type = "prflx";
   expected_a_local_prflx.priority = 2;
+  EXPECT_FALSE(*expected_a_local_prflx.is_remote);
 
   std::unique_ptr<cricket::Candidate> a_remote_relay = CreateFakeCandidate(
       "16.17.18.19", 20,
@@ -948,6 +951,7 @@
   expected_a_remote_relay.protocol = "a_remote_relay's protocol";
   expected_a_remote_relay.candidate_type = "relay";
   expected_a_remote_relay.priority = 3;
+  EXPECT_TRUE(*expected_a_remote_relay.is_remote);
 
   // Candidates in the second transport stats.
   std::unique_ptr<cricket::Candidate> b_local = CreateFakeCandidate(
@@ -962,6 +966,7 @@
   expected_b_local.protocol = "b_local's protocol";
   expected_b_local.candidate_type = "host";
   expected_b_local.priority = 42;
+  EXPECT_FALSE(*expected_b_local.is_remote);
 
   std::unique_ptr<cricket::Candidate> b_remote = CreateFakeCandidate(
       "42.42.42.42", 42,
@@ -975,6 +980,7 @@
   expected_b_remote.protocol = "b_remote's protocol";
   expected_b_remote.candidate_type = "host";
   expected_b_remote.priority = 42;
+  EXPECT_TRUE(*expected_b_remote.is_remote);
 
   SessionStats session_stats;
 
@@ -1108,6 +1114,7 @@
   expected_local_candidate.protocol = "protocol";
   expected_local_candidate.candidate_type = "host";
   expected_local_candidate.priority = 42;
+  EXPECT_FALSE(*expected_local_candidate.is_remote);
   ASSERT_TRUE(report->Get(expected_local_candidate.id()));
   EXPECT_EQ(expected_local_candidate,
             report->Get(expected_local_candidate.id())->cast_to<
@@ -1120,6 +1127,7 @@
   expected_remote_candidate.protocol = "protocol";
   expected_remote_candidate.candidate_type = "host";
   expected_remote_candidate.priority = 42;
+  EXPECT_TRUE(*expected_remote_candidate.is_remote);
   ASSERT_TRUE(report->Get(expected_remote_candidate.id()));
   EXPECT_EQ(expected_remote_candidate,
             report->Get(expected_remote_candidate.id())->cast_to<
diff --git a/webrtc/api/stats/rtcstats_objects.h b/webrtc/api/stats/rtcstats_objects.h
index 429f93b..d18b248 100644
--- a/webrtc/api/stats/rtcstats_objects.h
+++ b/webrtc/api/stats/rtcstats_objects.h
@@ -170,6 +170,7 @@
   RTCIceCandidateStats(const RTCIceCandidateStats& other);
   ~RTCIceCandidateStats() override;
 
+  RTCStatsMember<bool> is_remote;
   RTCStatsMember<std::string> ip;
   RTCStatsMember<int32_t> port;
   RTCStatsMember<std::string> protocol;
@@ -180,8 +181,9 @@
   RTCStatsMember<std::string> url;
 
  protected:
-  RTCIceCandidateStats(const std::string& id, int64_t timestamp_us);
-  RTCIceCandidateStats(std::string&& id, int64_t timestamp_us);
+  RTCIceCandidateStats(
+      const std::string& id, int64_t timestamp_us, bool is_remote);
+  RTCIceCandidateStats(std::string&& id, int64_t timestamp_us, bool is_remote);
 };
 
 // In the spec both local and remote varieties are of type RTCIceCandidateStats.
diff --git a/webrtc/stats/rtcstats_objects.cc b/webrtc/stats/rtcstats_objects.cc
index 73d070e..d4fea49 100644
--- a/webrtc/stats/rtcstats_objects.cc
+++ b/webrtc/stats/rtcstats_objects.cc
@@ -237,6 +237,7 @@
 }
 
 WEBRTC_RTCSTATS_IMPL(RTCIceCandidateStats, RTCStats, "ice-candidate",
+    &is_remote,
     &ip,
     &port,
     &protocol,
@@ -245,13 +246,14 @@
     &url);
 
 RTCIceCandidateStats::RTCIceCandidateStats(
-    const std::string& id, int64_t timestamp_us)
-    : RTCIceCandidateStats(std::string(id), timestamp_us) {
+    const std::string& id, int64_t timestamp_us, bool is_remote)
+    : RTCIceCandidateStats(std::string(id), timestamp_us, is_remote) {
 }
 
 RTCIceCandidateStats::RTCIceCandidateStats(
-    std::string&& id, int64_t timestamp_us)
+    std::string&& id, int64_t timestamp_us, bool is_remote)
     : RTCStats(std::move(id), timestamp_us),
+      is_remote("isRemote", is_remote),
       ip("ip"),
       port("port"),
       protocol("protocol"),
@@ -262,6 +264,7 @@
 
 RTCIceCandidateStats::RTCIceCandidateStats(const RTCIceCandidateStats& other)
     : RTCStats(other.id(), other.timestamp_us()),
+      is_remote(other.is_remote),
       ip(other.ip),
       port(other.port),
       protocol(other.protocol),
@@ -277,12 +280,12 @@
 
 RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(
     const std::string& id, int64_t timestamp_us)
-    : RTCIceCandidateStats(id, timestamp_us) {
+    : RTCIceCandidateStats(id, timestamp_us, false) {
 }
 
 RTCLocalIceCandidateStats::RTCLocalIceCandidateStats(
     std::string&& id, int64_t timestamp_us)
-    : RTCIceCandidateStats(std::move(id), timestamp_us) {
+    : RTCIceCandidateStats(std::move(id), timestamp_us, false) {
 }
 
 const char* RTCLocalIceCandidateStats::type() const {
@@ -293,12 +296,12 @@
 
 RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(
     const std::string& id, int64_t timestamp_us)
-    : RTCIceCandidateStats(id, timestamp_us) {
+    : RTCIceCandidateStats(id, timestamp_us, true) {
 }
 
 RTCRemoteIceCandidateStats::RTCRemoteIceCandidateStats(
     std::string&& id, int64_t timestamp_us)
-    : RTCIceCandidateStats(std::move(id), timestamp_us) {
+    : RTCIceCandidateStats(std::move(id), timestamp_us, true) {
 }
 
 const char* RTCRemoteIceCandidateStats::type() const {