Use unique_ptr in JsepCandidateCollection

Bug: None
Change-Id: I80ffacf3a355879b56a03b5cb59bffa32114dac1
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147601
Commit-Queue: Steve Anton <steveanton@webrtc.org>
Reviewed-by: Seth Hampson <shampson@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28712}
diff --git a/api/jsep_ice_candidate.cc b/api/jsep_ice_candidate.cc
index 3328386..e18e6e2 100644
--- a/api/jsep_ice_candidate.cc
+++ b/api/jsep_ice_candidate.cc
@@ -10,9 +10,11 @@
 
 #include "api/jsep_ice_candidate.h"
 
+#include <memory>
 #include <utility>
 
 #include "absl/algorithm/container.h"
+#include "absl/memory/memory.h"
 
 namespace webrtc {
 
@@ -42,41 +44,29 @@
 }
 
 void JsepCandidateCollection::add(JsepIceCandidate* candidate) {
-  candidates_.push_back(candidate);
+  candidates_.push_back(absl::WrapUnique(candidate));
 }
 
 const IceCandidateInterface* JsepCandidateCollection::at(size_t index) const {
-  return candidates_[index];
-}
-
-JsepCandidateCollection::~JsepCandidateCollection() {
-  for (std::vector<JsepIceCandidate*>::iterator it = candidates_.begin();
-       it != candidates_.end(); ++it) {
-    delete *it;
-  }
+  return candidates_[index].get();
 }
 
 bool JsepCandidateCollection::HasCandidate(
     const IceCandidateInterface* candidate) const {
-  bool ret = false;
-  for (std::vector<JsepIceCandidate*>::const_iterator it = candidates_.begin();
-       it != candidates_.end(); ++it) {
-    if ((*it)->sdp_mid() == candidate->sdp_mid() &&
-        (*it)->sdp_mline_index() == candidate->sdp_mline_index() &&
-        (*it)->candidate().IsEquivalent(candidate->candidate())) {
-      ret = true;
-      break;
-    }
-  }
-  return ret;
+  return absl::c_any_of(
+      candidates_, [&](const std::unique_ptr<JsepIceCandidate>& entry) {
+        return entry->sdp_mid() == candidate->sdp_mid() &&
+               entry->sdp_mline_index() == candidate->sdp_mline_index() &&
+               entry->candidate().IsEquivalent(candidate->candidate());
+      });
 }
 
 size_t JsepCandidateCollection::remove(const cricket::Candidate& candidate) {
-  auto iter = absl::c_find_if(candidates_, [&](JsepIceCandidate* c) {
-    return candidate.MatchesForRemoval(c->candidate());
-  });
+  auto iter = absl::c_find_if(
+      candidates_, [&](const std::unique_ptr<JsepIceCandidate>& c) {
+        return candidate.MatchesForRemoval(c->candidate());
+      });
   if (iter != candidates_.end()) {
-    delete *iter;
     candidates_.erase(iter);
     return 1;
   }