| Index: content/renderer/media/webrtc/media_stream_track_metrics.cc
 | 
| diff --git a/content/renderer/media/webrtc/media_stream_track_metrics.cc b/content/renderer/media/webrtc/media_stream_track_metrics.cc
 | 
| index d52860823e65797aebd21c9f50ad2463e76b8d01..bf074edfbd63e8cdbf4dc52d1d1b59375a8a203d 100644
 | 
| --- a/content/renderer/media/webrtc/media_stream_track_metrics.cc
 | 
| +++ b/content/renderer/media/webrtc/media_stream_track_metrics.cc
 | 
| @@ -152,7 +152,8 @@ struct ObserverFinder {
 | 
|    ObserverFinder(MediaStreamTrackMetrics::StreamType stream_type,
 | 
|                   MediaStreamInterface* stream)
 | 
|        : stream_type(stream_type), stream_(stream) {}
 | 
| -  bool operator()(MediaStreamTrackMetricsObserver* observer) {
 | 
| +  bool operator()(
 | 
| +      const std::unique_ptr<MediaStreamTrackMetricsObserver>& observer) {
 | 
|      return stream_ == observer->stream() &&
 | 
|             stream_type == observer->stream_type();
 | 
|    }
 | 
| @@ -268,26 +269,24 @@ MediaStreamTrackMetrics::MediaStreamTrackMetrics()
 | 
|      : ice_state_(webrtc::PeerConnectionInterface::kIceConnectionNew) {}
 | 
|  
 | 
|  MediaStreamTrackMetrics::~MediaStreamTrackMetrics() {
 | 
| -  for (ObserverVector::iterator it = observers_.begin(); it != observers_.end();
 | 
| -       ++it) {
 | 
| -    (*it)->SendLifetimeMessages(DISCONNECTED);
 | 
| +  for (const auto& observer : observers_) {
 | 
| +    observer->SendLifetimeMessages(DISCONNECTED);
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  void MediaStreamTrackMetrics::AddStream(StreamType type,
 | 
|                                          MediaStreamInterface* stream) {
 | 
|    DCHECK(CalledOnValidThread());
 | 
| -  MediaStreamTrackMetricsObserver* observer =
 | 
| -      new MediaStreamTrackMetricsObserver(type, stream, this);
 | 
| -  observers_.insert(observers_.end(), observer);
 | 
| -  SendLifeTimeMessageDependingOnIceState(observer);
 | 
| +  observers_.push_back(
 | 
| +      base::MakeUnique<MediaStreamTrackMetricsObserver>(type, stream, this));
 | 
| +  SendLifeTimeMessageDependingOnIceState(observers_.back().get());
 | 
|  }
 | 
|  
 | 
|  void MediaStreamTrackMetrics::RemoveStream(StreamType type,
 | 
|                                             MediaStreamInterface* stream) {
 | 
|    DCHECK(CalledOnValidThread());
 | 
| -  ObserverVector::iterator it = std::find_if(
 | 
| -      observers_.begin(), observers_.end(), ObserverFinder(type, stream));
 | 
| +  auto it = std::find_if(observers_.begin(), observers_.end(),
 | 
| +                         ObserverFinder(type, stream));
 | 
|    if (it == observers_.end()) {
 | 
|      // Since external apps could call removeStream with a stream they
 | 
|      // never added, this can happen without it being an error.
 | 
| @@ -301,9 +300,8 @@ void MediaStreamTrackMetrics::IceConnectionChange(
 | 
|      PeerConnectionInterface::IceConnectionState new_state) {
 | 
|    DCHECK(CalledOnValidThread());
 | 
|    ice_state_ = new_state;
 | 
| -  for (ObserverVector::iterator it = observers_.begin(); it != observers_.end();
 | 
| -       ++it) {
 | 
| -    SendLifeTimeMessageDependingOnIceState(*it);
 | 
| +  for (const auto& observer : observers_) {
 | 
| +    SendLifeTimeMessageDependingOnIceState(observer.get());
 | 
|    }
 | 
|  }
 | 
|  void MediaStreamTrackMetrics::SendLifeTimeMessageDependingOnIceState(
 | 
| 
 |