| Index: ios/web/web_state/ui/crw_web_controller.mm | 
| diff --git a/ios/web/web_state/ui/crw_web_controller.mm b/ios/web/web_state/ui/crw_web_controller.mm | 
| index df53e2a9677b94ee763f7b222ce98933a99e5790..30cf832c4257781ea74ddd96ce82bb6dee923b2c 100644 | 
| --- a/ios/web/web_state/ui/crw_web_controller.mm | 
| +++ b/ios/web/web_state/ui/crw_web_controller.mm | 
| @@ -12,6 +12,7 @@ | 
| #include <cmath> | 
| #include <memory> | 
| #include <utility> | 
| +#include <vector> | 
|  | 
| #include "base/callback.h" | 
| #include "base/containers/mru_cache.h" | 
| @@ -27,6 +28,7 @@ | 
| #import "base/mac/objc_property_releaser.h" | 
| #include "base/mac/scoped_cftyperef.h" | 
| #import "base/mac/scoped_nsobject.h" | 
| +#include "base/memory/ptr_util.h" | 
| #include "base/metrics/histogram.h" | 
| #include "base/metrics/user_metrics.h" | 
| #include "base/metrics/user_metrics_action.h" | 
| @@ -319,7 +321,8 @@ NSError* WKWebViewErrorWithSource(NSError* error, WKWebViewErrorSource source) { | 
| // WebControllerObserverBridge in order to listen from WebState callbacks. | 
| // TODO(droger): Remove |_observerBridges| when all CRWWebControllerObservers | 
| // are converted to WebStateObservers. | 
| -  ScopedVector<web::WebControllerObserverBridge> _observerBridges; | 
| +  std::vector<std::unique_ptr<web::WebControllerObserverBridge>> | 
| +      _observerBridges; | 
| // YES if a user interaction has been registered at any time once the page has | 
| // loaded. | 
| BOOL _userInteractionRegistered; | 
| @@ -5723,8 +5726,8 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; | 
| } | 
| DCHECK(![_observers containsObject:observer]); | 
| [_observers addObject:observer]; | 
| -  _observerBridges.push_back( | 
| -      new web::WebControllerObserverBridge(observer, self.webStateImpl, self)); | 
| +  _observerBridges.push_back(base::MakeUnique<web::WebControllerObserverBridge>( | 
| +      observer, self.webStateImpl, self)); | 
|  | 
| if ([observer respondsToSelector:@selector(setWebViewProxy:controller:)]) | 
| [observer setWebViewProxy:_webViewProxy controller:self]; | 
| @@ -5734,10 +5737,12 @@ const NSTimeInterval kSnapshotOverlayTransition = 0.5; | 
| DCHECK([_observers containsObject:observer]); | 
| [_observers removeObject:observer]; | 
| // Remove the associated WebControllerObserverBridge. | 
| -  auto it = std::find_if(_observerBridges.begin(), _observerBridges.end(), | 
| -                         [observer](web::WebControllerObserverBridge* bridge) { | 
| -                           return bridge->web_controller_observer() == observer; | 
| -                         }); | 
| +  auto it = std::find_if( | 
| +      _observerBridges.begin(), _observerBridges.end(), | 
| +      [observer]( | 
| +          const std::unique_ptr<web::WebControllerObserverBridge>& bridge) { | 
| +        return bridge->web_controller_observer() == observer; | 
| +      }); | 
| DCHECK(it != _observerBridges.end()); | 
| _observerBridges.erase(it); | 
| } | 
|  |