Use the sanitized pair when surfacing the candidate pair change event.

TBR=andersc@webrtc.org

Bug: None
Change-Id: Ie2c389fe966dada2768e3222e1f8da74e1715568
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/150762
Commit-Queue: Qingsi Wang <qingsi@webrtc.org>
Reviewed-by: Alex Drake <alexdrake@webrtc.org>
Reviewed-by: Alex Glaznev <glaznev@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29052}
diff --git a/p2p/base/p2p_transport_channel.cc b/p2p/base/p2p_transport_channel.cc
index 9e1c720..23a9949 100644
--- a/p2p/base/p2p_transport_channel.cc
+++ b/p2p/base/p2p_transport_channel.cc
@@ -1981,18 +1981,17 @@
   } else {
     RTC_LOG(LS_INFO) << ToString() << ": No selected connection";
   }
+  SignalNetworkRouteChanged(network_route_);
 
   // Create event for candidate pair change.
   if (selected_connection_) {
     CandidatePairChangeEvent pair_change;
     pair_change.reason = reason;
-    pair_change.local_candidate = selected_connection_->local_candidate();
-    pair_change.remote_candidate = selected_connection_->remote_candidate();
+    pair_change.selected_candidate_pair = *GetSelectedCandidatePair();
     pair_change.last_data_received_ms =
         selected_connection_->last_data_received();
     SignalCandidatePairChanged(pair_change);
   }
-  SignalNetworkRouteChanged(network_route_);
 
   ++selected_candidate_pair_changes_;
 }
diff --git a/p2p/base/p2p_transport_channel_unittest.cc b/p2p/base/p2p_transport_channel_unittest.cc
index 72ab65c..dd48979 100644
--- a/p2p/base/p2p_transport_channel_unittest.cc
+++ b/p2p/base/p2p_transport_channel_unittest.cc
@@ -3379,9 +3379,11 @@
     if (!conn) {
       return !last_candidate_change_event_.has_value();
     } else {
-      return last_candidate_change_event_->local_candidate.IsEquivalent(
+      const auto& last_selected_pair =
+          last_candidate_change_event_->selected_candidate_pair;
+      return last_selected_pair.local_candidate().IsEquivalent(
                  conn->local_candidate()) &&
-             last_candidate_change_event_->remote_candidate.IsEquivalent(
+             last_selected_pair.remote_candidate().IsEquivalent(
                  conn->remote_candidate()) &&
              last_candidate_change_event_->last_data_received_ms ==
                  conn->last_data_received() &&
diff --git a/p2p/base/port.h b/p2p/base/port.h
index 4251cd4..65b543c 100644
--- a/p2p/base/port.h
+++ b/p2p/base/port.h
@@ -149,8 +149,7 @@
 };
 
 struct CandidatePairChangeEvent {
-  Candidate local_candidate;
-  Candidate remote_candidate;
+  CandidatePair selected_candidate_pair;
   int64_t last_data_received_ms;
   std::string reason;
 };
diff --git a/sdk/android/src/jni/pc/peer_connection.cc b/sdk/android/src/jni/pc/peer_connection.cc
index c95e576..13f8301 100644
--- a/sdk/android/src/jni/pc/peer_connection.cc
+++ b/sdk/android/src/jni/pc/peer_connection.cc
@@ -124,9 +124,10 @@
 ScopedJavaLocalRef<jobject> NativeToJavaCandidatePairChange(
     JNIEnv* env,
     const cricket::CandidatePairChangeEvent& event) {
+  const auto& selected_pair = event.selected_candidate_pair;
   return Java_CandidatePairChangeEvent_Constructor(
-      env, NativeToJavaCandidate(env, event.local_candidate),
-      NativeToJavaCandidate(env, event.remote_candidate),
+      env, NativeToJavaCandidate(env, selected_pair.local_candidate()),
+      NativeToJavaCandidate(env, selected_pair.remote_candidate()),
       static_cast<int>(event.last_data_received_ms),
       NativeToJavaString(env, event.reason));
 }
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnection.mm b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
index 156f7a4..f3e91c4 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnection.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnection.mm
@@ -235,14 +235,15 @@
 
 void PeerConnectionDelegateAdapter::OnIceSelectedCandidatePairChanged(
     const cricket::CandidatePairChangeEvent &event) {
-  std::unique_ptr<JsepIceCandidate> local_candidate_wrapper(
-      new JsepIceCandidate(event.local_candidate.transport_name(), -1, event.local_candidate));
+  const auto &selected_pair = event.selected_candidate_pair;
+  auto local_candidate_wrapper = absl::make_unique<JsepIceCandidate>(
+      selected_pair.local_candidate().transport_name(), -1, selected_pair.local_candidate());
   RTCIceCandidate *local_candidate =
-      [[RTCIceCandidate alloc] initWithNativeCandidate:local_candidate_wrapper.get()];
-  std::unique_ptr<JsepIceCandidate> remote_candidate_wrapper(
-      new JsepIceCandidate(event.remote_candidate.transport_name(), -1, event.remote_candidate));
+      [[RTCIceCandidate alloc] initWithNativeCandidate:local_candidate_wrapper.release()];
+  auto remote_candidate_wrapper = absl::make_unique<JsepIceCandidate>(
+      selected_pair.remote_candidate().transport_name(), -1, selected_pair.remote_candidate());
   RTCIceCandidate *remote_candidate =
-      [[RTCIceCandidate alloc] initWithNativeCandidate:remote_candidate_wrapper.get()];
+      [[RTCIceCandidate alloc] initWithNativeCandidate:remote_candidate_wrapper.release()];
   RTCPeerConnection *peer_connection = peer_connection_;
   NSString *nsstr_reason = [NSString stringForStdString:event.reason];
   if ([peer_connection.delegate