diff --git a/chrome/browser/chromeos/customization/customization_document_unittest.cc b/chrome/browser/chromeos/customization/customization_document_unittest.cc
index 3ba0dac7..7ea30be 100644
--- a/chrome/browser/chromeos/customization/customization_document_unittest.cc
+++ b/chrome/browser/chromeos/customization/customization_document_unittest.cc
@@ -193,11 +193,12 @@
                bool(const ExternalInstallInfoUpdateUrl&, bool));
   MOCK_METHOD1(OnExternalProviderReady,
                void(const extensions::ExternalProviderInterface* provider));
-  MOCK_METHOD4(OnExternalProviderUpdateComplete,
-               void(const extensions::ExternalProviderInterface*,
-                    const ScopedVector<ExternalInstallInfoUpdateUrl>&,
-                    const ScopedVector<ExternalInstallInfoFile>&,
-                    const std::set<std::string>& removed_extensions));
+  MOCK_METHOD4(
+      OnExternalProviderUpdateComplete,
+      void(const extensions::ExternalProviderInterface*,
+           const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&,
+           const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&,
+           const std::set<std::string>& removed_extensions));
 };
 
 class ServicesCustomizationDocumentTest : public testing::Test {
diff --git a/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc b/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc
index f4a3f46..4adcbd9 100644
--- a/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc
+++ b/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc
@@ -82,11 +82,12 @@
                bool(const ExternalInstallInfoUpdateUrl&, bool));
   MOCK_METHOD1(OnExternalProviderReady,
                void(const extensions::ExternalProviderInterface* provider));
-  MOCK_METHOD4(OnExternalProviderUpdateComplete,
-               void(const extensions::ExternalProviderInterface*,
-                    const ScopedVector<ExternalInstallInfoUpdateUrl>&,
-                    const ScopedVector<ExternalInstallInfoFile>&,
-                    const std::set<std::string>& removed_extensions));
+  MOCK_METHOD4(
+      OnExternalProviderUpdateComplete,
+      void(const extensions::ExternalProviderInterface*,
+           const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&,
+           const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&,
+           const std::set<std::string>& removed_extensions));
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockExternalPolicyProviderVisitor);
diff --git a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
index 8e172c3..508c7db 100644
--- a/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
+++ b/chrome/browser/extensions/api/developer_private/developer_private_api_unittest.cc
@@ -106,7 +106,7 @@
   std::unique_ptr<TestBrowserWindow> browser_window_;
   std::unique_ptr<Browser> browser_;
 
-  ScopedVector<TestExtensionDir> test_extension_dirs_;
+  std::vector<std::unique_ptr<TestExtensionDir>> test_extension_dirs_;
 
   DISALLOW_COPY_AND_ASSIGN(DeveloperPrivateApiUnitTest);
 };
@@ -128,8 +128,8 @@
       " \"permissions\": [\"*://*/*\"]"
       "}";
 
-  test_extension_dirs_.push_back(new TestExtensionDir);
-  TestExtensionDir* dir = test_extension_dirs_.back();
+  test_extension_dirs_.push_back(base::MakeUnique<TestExtensionDir>());
+  TestExtensionDir* dir = test_extension_dirs_.back().get();
   dir->WriteManifest(kManifest);
 
   // TODO(devlin): We should extract out methods to load an unpacked extension
diff --git a/chrome/browser/extensions/api/gcd_private/privet_v3_session.cc b/chrome/browser/extensions/api/gcd_private/privet_v3_session.cc
index 8c22f78..adf66eb 100644
--- a/chrome/browser/extensions/api/gcd_private/privet_v3_session.cc
+++ b/chrome/browser/extensions/api/gcd_private/privet_v3_session.cc
@@ -10,6 +10,7 @@
 #include "base/location.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/threading/thread_task_runner_handle.h"
@@ -486,7 +487,7 @@
   FetcherDelegate* fetcher =
       new FetcherDelegate(weak_ptr_factory_.GetWeakPtr(), callback);
   if (!orphaned)
-    fetchers_.push_back(fetcher);
+    fetchers_.push_back(base::WrapUnique(fetcher));
   net::URLFetcher* url_fetcher =
       fetcher->CreateURLFetcher(url, request_type, orphaned);
   url_fetcher->SetLoadFlags(url_fetcher->GetLoadFlags() |
@@ -500,7 +501,14 @@
 }
 
 void PrivetV3Session::DeleteFetcher(const FetcherDelegate* fetcher) {
-  fetchers_.erase(std::find(fetchers_.begin(), fetchers_.end(), fetcher));
+  for (std::vector<std::unique_ptr<FetcherDelegate>>::iterator iter =
+           fetchers_.begin();
+       iter != fetchers_.end(); ++iter) {
+    if (iter->get() == fetcher) {
+      fetchers_.erase(iter);
+      break;
+    }
+  }
 }
 
 void PrivetV3Session::Cancel() {
diff --git a/chrome/browser/extensions/api/gcd_private/privet_v3_session.h b/chrome/browser/extensions/api/gcd_private/privet_v3_session.h
index f653959b..8a29a5f 100644
--- a/chrome/browser/extensions/api/gcd_private/privet_v3_session.h
+++ b/chrome/browser/extensions/api/gcd_private/privet_v3_session.h
@@ -13,7 +13,6 @@
 #include "base/callback.h"
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/memory/weak_ptr.h"
 #include "chrome/common/extensions/api/gcd_private.h"
 #include "net/url_request/url_fetcher.h"
@@ -125,7 +124,7 @@
   bool use_https_ = false;
 
   // List of fetches to cancel when session is destroyed.
-  ScopedVector<FetcherDelegate> fetchers_;
+  std::vector<std::unique_ptr<FetcherDelegate>> fetchers_;
 
   // Intercepts POST requests. Used by tests only.
   base::Callback<void(const base::DictionaryValue&)> on_post_data_;
diff --git a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.cc b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.cc
index 602195e2..4c7b585 100644
--- a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.cc
@@ -6,7 +6,6 @@
 
 #include <memory>
 
-#include "base/memory/scoped_vector.h"
 #include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/values.h"
@@ -69,16 +68,15 @@
 }
 
 void CreateMappingForUnmappedDevices(
-    std::vector<DeviceInfo*>* device_info,
+    const std::vector<std::unique_ptr<DeviceInfo>>& device_info,
     base::DictionaryValue* value) {
-  for (unsigned int i = 0; i < device_info->size(); ++i) {
-    DeviceInfo* device = (*device_info)[i];
+  for (const std::unique_ptr<DeviceInfo>& device : device_info) {
     std::string local_id = GetPublicIdFromGUID(*value,
                                                device->guid());
 
     // If the device does not have a local id, set one.
     if (local_id.empty()) {
-      local_id = GetRandomId(*value, device_info->size());
+      local_id = GetRandomId(*value, device_info.size());
       value->SetString(local_id, device->guid());
     }
     device->set_public_id(local_id);
@@ -91,14 +89,11 @@
     Profile* profile) {
   DCHECK(crx_file::id_util::IdIsValid(extension_id)) << extension_id
                                                      << " is not valid";
-  ScopedVector<DeviceInfo> devices = GetAllSignedInDevices(extension_id,
-                                                           profile);
-  for (ScopedVector<DeviceInfo>::iterator it = devices.begin();
-       it != devices.end();
-       ++it) {
-    if ((*it)->guid() == client_id) {
-      std::unique_ptr<DeviceInfo> device(*it);
-      devices.weak_erase(it);
+  std::vector<std::unique_ptr<DeviceInfo>> devices =
+      GetAllSignedInDevices(extension_id, profile);
+  for (auto& iter : devices) {
+    if (iter->guid() == client_id) {
+      std::unique_ptr<DeviceInfo> device = std::move(iter);
       return device;
     }
   }
diff --git a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h
index 69a8dfa..046ff752 100644
--- a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h
+++ b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h
@@ -45,7 +45,7 @@
 // The dictionary would have the public id as the key and the
 // device guid as the value.
 void CreateMappingForUnmappedDevices(
-    std::vector<sync_driver::DeviceInfo*>* device_info,
+    const std::vector<std::unique_ptr<sync_driver::DeviceInfo>>& device_info,
     base::DictionaryValue* value);
 
 // Gets the device info for a given client id. If the device is not found
diff --git a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper_unittest.cc b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper_unittest.cc
index 9396b873..61a441b0 100644
--- a/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper_unittest.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/id_mapping_helper_unittest.cc
@@ -8,7 +8,7 @@
 #include <string>
 
 #include "base/guid.h"
-#include "base/memory/scoped_vector.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "components/sync/device_info/device_info.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -30,25 +30,19 @@
 }
 
 TEST(IdMappingHelperTest, SetIdsForDevices) {
-  ScopedVector<DeviceInfo> devices;
+  std::vector<std::unique_ptr<DeviceInfo>> devices;
 
-  devices.push_back(new DeviceInfo(base::GenerateGUID(),
-                                   "abc Device",
-                                   "XYZ v1",
-                                   "XYZ SyncAgent v1",
-                                   sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
-                                   "device_id1"));
+  devices.push_back(base::MakeUnique<DeviceInfo>(
+      base::GenerateGUID(), "abc Device", "XYZ v1", "XYZ SyncAgent v1",
+      sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id1"));
 
-  devices.push_back(new DeviceInfo(base::GenerateGUID(),
-                                   "def Device",
-                                   "XYZ v1",
-                                   "XYZ SyncAgent v1",
-                                   sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
-                                   "device_id2"));
+  devices.push_back(base::MakeUnique<DeviceInfo>(
+      base::GenerateGUID(), "def Device", "XYZ v1", "XYZ SyncAgent v1",
+      sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id2"));
 
   base::DictionaryValue dictionary;
 
-  CreateMappingForUnmappedDevices(&(devices.get()), &dictionary);
+  CreateMappingForUnmappedDevices(devices, &dictionary);
 
   std::string public_id1 = devices[0]->public_id();
   std::string public_id2 = devices[1]->public_id();
@@ -59,14 +53,11 @@
   EXPECT_NE(public_id1, public_id2);
 
   // Now add a third device.
-  devices.push_back(new DeviceInfo(base::GenerateGUID(),
-                                   "ghi Device",
-                                   "XYZ v1",
-                                   "XYZ SyncAgent v1",
-                                   sync_pb::SyncEnums_DeviceType_TYPE_LINUX,
-                                   "device_id3"));
+  devices.push_back(base::MakeUnique<DeviceInfo>(
+      base::GenerateGUID(), "ghi Device", "XYZ v1", "XYZ SyncAgent v1",
+      sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id3"));
 
-  CreateMappingForUnmappedDevices(&(devices.get()), &dictionary);
+  CreateMappingForUnmappedDevices(devices, &dictionary);
 
   // Now make sure the existing ids are not changed.
   EXPECT_EQ(public_id1, devices[0]->public_id());
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.cc
index 53e7dd7..e30c239 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.cc
@@ -7,7 +7,6 @@
 #include <memory>
 #include <utility>
 
-#include "base/memory/scoped_vector.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/api/signed_in_devices/id_mapping_helper.h"
 #include "chrome/browser/profiles/profile.h"
@@ -54,12 +53,13 @@
 // Helper routine to get all signed in devices. The helper takes in
 // the pointers for |DeviceInfoTracker| and |Extensionprefs|. This
 // makes it easier to test by passing mock values for these pointers.
-ScopedVector<DeviceInfo> GetAllSignedInDevices(
+std::vector<std::unique_ptr<DeviceInfo>> GetAllSignedInDevices(
     const std::string& extension_id,
     DeviceInfoTracker* device_tracker,
     ExtensionPrefs* extension_prefs) {
   DCHECK(device_tracker);
-  ScopedVector<DeviceInfo> devices = device_tracker->GetAllDeviceInfo();
+  std::vector<std::unique_ptr<DeviceInfo>> devices =
+      device_tracker->GetAllDeviceInfo();
   const base::DictionaryValue* mapping_dictionary = GetIdMappingDictionary(
       extension_prefs,
       extension_id);
@@ -70,8 +70,7 @@
   std::unique_ptr<base::DictionaryValue> editable_mapping_dictionary(
       mapping_dictionary->DeepCopy());
 
-  CreateMappingForUnmappedDevices(&(devices.get()),
-                                  editable_mapping_dictionary.get());
+  CreateMappingForUnmappedDevices(devices, editable_mapping_dictionary.get());
 
   // Write into |ExtensionPrefs| which will get persisted in disk.
   extension_prefs->UpdateExtensionPref(extension_id,
@@ -80,7 +79,7 @@
   return devices;
 }
 
-ScopedVector<DeviceInfo> GetAllSignedInDevices(
+std::vector<std::unique_ptr<DeviceInfo>> GetAllSignedInDevices(
     const std::string& extension_id,
     Profile* profile) {
   // Get the device tracker and extension prefs pointers
@@ -90,7 +89,7 @@
   DCHECK(device_tracker);
   if (!device_tracker->IsSyncing()) {
     // Devices are not sync'ing.
-    return ScopedVector<DeviceInfo>();
+    return std::vector<std::unique_ptr<DeviceInfo>>();
   }
 
   ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile);
@@ -131,16 +130,13 @@
     return true;
   }
 
-  ScopedVector<DeviceInfo> devices =
+  std::vector<std::unique_ptr<DeviceInfo>> devices =
       GetAllSignedInDevices(extension_id(), GetProfile());
 
   std::unique_ptr<base::ListValue> result(new base::ListValue());
 
-  for (ScopedVector<DeviceInfo>::const_iterator it = devices.begin();
-       it != devices.end();
-       ++it) {
-    result->Append((*it)->ToValue());
-  }
+  for (const std::unique_ptr<DeviceInfo>& device : devices)
+    result->Append(device->ToValue());
 
   SetResult(std::move(result));
   return true;
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.h b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.h
index 1d1c09223..ef6d31f 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.h
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.h
@@ -8,7 +8,6 @@
 #include <string>
 #include <vector>
 
-#include "base/memory/scoped_vector.h"
 #include "chrome/browser/extensions/chrome_extension_function.h"
 
 namespace sync_driver {
@@ -28,11 +27,11 @@
 // filled with the list of devices associated with the account signed into this
 // |profile|. This function needs the |extension_id| because the
 // public device ids are set per extension.
-ScopedVector<sync_driver::DeviceInfo> GetAllSignedInDevices(
+std::vector<std::unique_ptr<sync_driver::DeviceInfo>> GetAllSignedInDevices(
     const std::string& extension_id,
     Profile* profile);
 
-ScopedVector<sync_driver::DeviceInfo> GetAllSignedInDevices(
+std::vector<std::unique_ptr<sync_driver::DeviceInfo>> GetAllSignedInDevices(
     const std::string& extension_id,
     sync_driver::DeviceInfoTracker* device_tracker,
     ExtensionPrefs* extension_prefs);
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api_unittest.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api_unittest.cc
index 03fc72d..6215435 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api_unittest.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api_unittest.cc
@@ -44,23 +44,19 @@
     return std::unique_ptr<DeviceInfo>();
   }
 
-  static DeviceInfo* CloneDeviceInfo(const DeviceInfo* device_info) {
-    return new DeviceInfo(device_info->guid(),
-                          device_info->client_name(),
-                          device_info->chrome_version(),
-                          device_info->sync_user_agent(),
-                          device_info->device_type(),
-                          device_info->signin_scoped_device_id());
+  static std::unique_ptr<DeviceInfo> CloneDeviceInfo(
+      const DeviceInfo& device_info) {
+    return base::MakeUnique<DeviceInfo>(
+        device_info.guid(), device_info.client_name(),
+        device_info.chrome_version(), device_info.sync_user_agent(),
+        device_info.device_type(), device_info.signin_scoped_device_id());
   }
 
-  ScopedVector<DeviceInfo> GetAllDeviceInfo() const override {
-    ScopedVector<DeviceInfo> list;
+  std::vector<std::unique_ptr<DeviceInfo>> GetAllDeviceInfo() const override {
+    std::vector<std::unique_ptr<DeviceInfo>> list;
 
-    for (std::vector<const DeviceInfo*>::const_iterator iter = devices_.begin();
-         iter != devices_.end();
-         ++iter) {
-      list.push_back(CloneDeviceInfo(*iter));
-    }
+    for (const DeviceInfo* device : devices_)
+      list.push_back(CloneDeviceInfo(*device));
 
     return list;
   }
@@ -109,7 +105,7 @@
   device_tracker.Add(&device_info1);
   device_tracker.Add(&device_info2);
 
-  ScopedVector<DeviceInfo> output1 = GetAllSignedInDevices(
+  std::vector<std::unique_ptr<DeviceInfo>> output1 = GetAllSignedInDevices(
       extension_test->id(), &device_tracker, extension_prefs.prefs());
 
   std::string public_id1 = output1[0]->public_id();
@@ -130,7 +126,7 @@
 
   device_tracker.Add(&device_info3);
 
-  ScopedVector<DeviceInfo> output2 = GetAllSignedInDevices(
+  std::vector<std::unique_ptr<DeviceInfo>> output2 = GetAllSignedInDevices(
       extension_test->id(), &device_tracker, extension_prefs.prefs());
 
   EXPECT_EQ(output2[0]->public_id(), public_id1);
@@ -254,8 +250,8 @@
       .WillOnce(Return(&device_tracker));
   EXPECT_CALL(*pss_mock, Shutdown());
 
-  ScopedVector<DeviceInfo> output = GetAllSignedInDevices(
-      extension()->id(), profile());
+  std::vector<std::unique_ptr<DeviceInfo>> output =
+      GetAllSignedInDevices(extension()->id(), profile());
 
   EXPECT_TRUE(output.empty());
 }
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
index b21ff2174d..8bea7cd 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.cc
@@ -10,7 +10,7 @@
 #include <vector>
 
 #include "base/lazy_instance.h"
-#include "base/memory/scoped_vector.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "chrome/browser/extensions/api/signed_in_devices/signed_in_devices_api.h"
 #include "chrome/browser/extensions/extension_service.h"
@@ -61,11 +61,11 @@
 void SignedInDevicesChangeObserver::OnDeviceInfoChange() {
   // There is a change in the list of devices. Get all devices and send them to
   // the listener.
-  ScopedVector<DeviceInfo> devices = GetAllSignedInDevices(extension_id_,
-                                                           profile_);
+  std::vector<std::unique_ptr<DeviceInfo>> devices =
+      GetAllSignedInDevices(extension_id_, profile_);
 
   std::vector<api::signed_in_devices::DeviceInfo> args;
-  for (const DeviceInfo* info : devices) {
+  for (const std::unique_ptr<DeviceInfo>& info : devices) {
     api::signed_in_devices::DeviceInfo api_device;
     FillDeviceInfo(*info, &api_device);
     args.push_back(std::move(api_device));
@@ -122,19 +122,16 @@
 
 void SignedInDevicesManager::OnListenerAdded(
     const EventListenerInfo& details) {
-  for (ScopedVector<SignedInDevicesChangeObserver>::const_iterator it =
-           change_observers_.begin();
-           it != change_observers_.end();
-           ++it) {
-    if ((*it)->extension_id() == details.extension_id) {
+  for (const std::unique_ptr<SignedInDevicesChangeObserver>& observer :
+       change_observers_) {
+    if (observer->extension_id() == details.extension_id) {
       DCHECK(false) <<"OnListenerAded fired twice for same extension";
       return;
     }
   }
 
-  change_observers_.push_back(new SignedInDevicesChangeObserver(
-      details.extension_id,
-      profile_));
+  change_observers_.push_back(base::MakeUnique<SignedInDevicesChangeObserver>(
+      details.extension_id, profile_));
 }
 
 void SignedInDevicesManager::OnListenerRemoved(
@@ -144,10 +141,9 @@
 
 void SignedInDevicesManager::RemoveChangeObserverForExtension(
     const std::string& extension_id) {
-  for (ScopedVector<SignedInDevicesChangeObserver>::iterator it =
-           change_observers_.begin();
-           it != change_observers_.end();
-           ++it) {
+  for (std::vector<std::unique_ptr<SignedInDevicesChangeObserver>>::iterator
+           it = change_observers_.begin();
+       it != change_observers_.end(); ++it) {
     if ((*it)->extension_id() == extension_id) {
       change_observers_.erase(it);
       return;
diff --git a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h
index 8bc591b7..ba7a0802 100644
--- a/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h
+++ b/chrome/browser/extensions/api/signed_in_devices/signed_in_devices_manager.h
@@ -9,7 +9,6 @@
 
 #include "base/gtest_prod_util.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/scoped_observer.h"
 #include "components/sync/device_info/device_info_tracker.h"
 #include "extensions/browser/browser_context_keyed_api_factory.h"
@@ -91,7 +90,7 @@
   void RemoveChangeObserverForExtension(const std::string& extension_id);
 
   Profile* const profile_;
-  ScopedVector<SignedInDevicesChangeObserver> change_observers_;
+  std::vector<std::unique_ptr<SignedInDevicesChangeObserver>> change_observers_;
 
   // Listen to extension unloaded notification.
   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
diff --git a/chrome/browser/extensions/api/storage/setting_sync_data.h b/chrome/browser/extensions/api/storage/setting_sync_data.h
index e8f21e58..fd843fb 100644
--- a/chrome/browser/extensions/api/storage/setting_sync_data.h
+++ b/chrome/browser/extensions/api/storage/setting_sync_data.h
@@ -9,7 +9,6 @@
 #include <string>
 
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/values.h"
 #include "components/sync/api/sync_change.h"
 
@@ -68,7 +67,7 @@
   DISALLOW_COPY_AND_ASSIGN(SettingSyncData);
 };
 
-typedef ScopedVector<SettingSyncData> SettingSyncDataList;
+using SettingSyncDataList = std::vector<std::unique_ptr<SettingSyncData>>;
 
 }  // namespace extensions
 
diff --git a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
index c35a85d0..0e27331c 100644
--- a/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
+++ b/chrome/browser/extensions/api/storage/settings_sync_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/files/scoped_temp_dir.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
-#include "base/memory/linked_ptr.h"
 #include "base/memory/ptr_util.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
@@ -54,7 +53,7 @@
 // More saving typing. Maps extension IDs to a list of sync changes for that
 // extension.
 using SettingSyncDataMultimap =
-    std::map<std::string, linked_ptr<SettingSyncDataList>>;
+    std::map<std::string, std::unique_ptr<SettingSyncDataList>>;
 
 // Gets the pretty-printed JSON for a value.
 static std::string GetJson(const base::Value& value) {
@@ -120,7 +119,7 @@
     }
     for (syncer::SyncChangeList::const_iterator it = change_list.begin();
         it != change_list.end(); ++it) {
-      changes_.push_back(new SettingSyncData(*it));
+      changes_.push_back(base::MakeUnique<SettingSyncData>(*it));
     }
     return syncer::SyncError();
   }
@@ -146,11 +145,9 @@
   SettingSyncData* GetOnlyChange(const std::string& extension_id,
                                  const std::string& key) {
     std::vector<SettingSyncData*> matching_changes;
-    for (SettingSyncDataList::iterator it = changes_.begin();
-        it != changes_.end(); ++it) {
-      if ((*it)->extension_id() == extension_id && (*it)->key() == key) {
-        matching_changes.push_back(*it);
-      }
+    for (const std::unique_ptr<SettingSyncData>& change : changes_) {
+      if (change->extension_id() == extension_id && change->key() == key)
+        matching_changes.push_back(change.get());
     }
     if (matching_changes.empty()) {
       ADD_FAILURE() << "No matching changes for " << extension_id << "/" <<
@@ -240,12 +237,12 @@
     SettingSyncDataMultimap as_map;
     for (syncer::SyncDataList::iterator it = as_list.begin();
         it != as_list.end(); ++it) {
-      SettingSyncData* sync_data = new SettingSyncData(*it);
-      linked_ptr<SettingSyncDataList>& list_for_extension =
+      std::unique_ptr<SettingSyncData> sync_data(new SettingSyncData(*it));
+      std::unique_ptr<SettingSyncDataList>& list_for_extension =
           as_map[sync_data->extension_id()];
-      if (!list_for_extension.get())
+      if (!list_for_extension)
         list_for_extension.reset(new SettingSyncDataList());
-      list_for_extension->push_back(sync_data);
+      list_for_extension->push_back(std::move(sync_data));
     }
     return as_map;
   }
@@ -1350,7 +1347,7 @@
     storage->Set(DEFAULTS, "key.with.spot", *string_value);
 
     ASSERT_EQ(1u, sync_processor_->changes().size());
-    SettingSyncData* sync_data = sync_processor_->changes()[0];
+    SettingSyncData* sync_data = sync_processor_->changes()[0].get();
     EXPECT_EQ(syncer::SyncChange::ACTION_ADD, sync_data->change_type());
     EXPECT_EQ("ext", sync_data->extension_id());
     EXPECT_EQ("key.with.spot", sync_data->key());
diff --git a/chrome/browser/extensions/api/storage/syncable_settings_storage.cc b/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
index 811dd363..102e2b34 100644
--- a/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
+++ b/chrome/browser/extensions/api/storage/syncable_settings_storage.cc
@@ -6,6 +6,7 @@
 
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
 #include "chrome/browser/extensions/api/storage/settings_sync_processor.h"
 #include "chrome/browser/extensions/api/storage/settings_sync_util.h"
@@ -219,13 +220,13 @@
         // Sync and local values are the same, no changes to send.
       } else {
         // Sync value is different, update local setting with new value.
-        changes->push_back(new SettingSyncData(
+        changes->push_back(base::MakeUnique<SettingSyncData>(
             syncer::SyncChange::ACTION_UPDATE, extension_id_, it.key(),
             std::move(sync_value)));
       }
     } else {
       // Not synced, delete local setting.
-      changes->push_back(new SettingSyncData(
+      changes->push_back(base::MakeUnique<SettingSyncData>(
           syncer::SyncChange::ACTION_DELETE, extension_id_, it.key(),
           std::unique_ptr<base::Value>(new base::DictionaryValue())));
     }
@@ -238,7 +239,7 @@
     std::string key = base::DictionaryValue::Iterator(*sync_state).key();
     std::unique_ptr<base::Value> value;
     CHECK(sync_state->RemoveWithoutPathExpansion(key, &value));
-    changes->push_back(new SettingSyncData(
+    changes->push_back(base::MakeUnique<SettingSyncData>(
         syncer::SyncChange::ACTION_ADD, extension_id_, key, std::move(value)));
   }
 
@@ -268,11 +269,10 @@
   std::vector<syncer::SyncError> errors;
   ValueStoreChangeList changes;
 
-  for (SettingSyncDataList::iterator it = sync_changes->begin();
-       it != sync_changes->end(); ++it) {
-    DCHECK_EQ(extension_id_, (*it)->extension_id());
-    const std::string& key = (*it)->key();
-    std::unique_ptr<base::Value> change_value = (*it)->PassValue();
+  for (const std::unique_ptr<SettingSyncData>& sync_change : *sync_changes) {
+    DCHECK_EQ(extension_id_, sync_change->extension_id());
+    const std::string& key = sync_change->key();
+    std::unique_ptr<base::Value> change_value = sync_change->PassValue();
 
     std::unique_ptr<base::Value> current_value;
     {
@@ -292,7 +292,7 @@
 
     syncer::SyncError error;
 
-    switch ((*it)->change_type()) {
+    switch (sync_change->change_type()) {
       case syncer::SyncChange::ACTION_ADD:
         if (!current_value.get()) {
           error = OnSyncAdd(key, std::move(change_value), &changes);
diff --git a/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc b/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
index d7e2677..f50fdf9 100644
--- a/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
+++ b/chrome/browser/extensions/api/tab_capture/offscreen_tab.cc
@@ -8,6 +8,7 @@
 
 #include "base/bind.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/web_contents_sizer.h"
@@ -57,15 +58,24 @@
   if (tabs_.size() >= kMaxOffscreenTabsPerExtension)
     return nullptr;  // Maximum number of offscreen tabs reached.
 
-  tabs_.push_back(new OffscreenTab(this));
+  // OffscreenTab cannot be created with MakeUnique<OffscreenTab> since the
+  // constructor is protected. So create it separately, and then move it to
+  // |tabs_| below.
+  std::unique_ptr<OffscreenTab> offscreen_tab(new OffscreenTab(this));
+  tabs_.push_back(std::move(offscreen_tab));
   tabs_.back()->Start(start_url, initial_size, optional_presentation_id);
-  return tabs_.back();
+  return tabs_.back().get();
 }
 
 void OffscreenTabsOwner::DestroyTab(OffscreenTab* tab) {
-  const auto it = std::find(tabs_.begin(), tabs_.end(), tab);
-  if (it != tabs_.end())
-    tabs_.erase(it);
+  for (std::vector<std::unique_ptr<OffscreenTab>>::iterator iter =
+           tabs_.begin();
+       iter != tabs_.end(); ++iter) {
+    if (iter->get() == tab) {
+      tabs_.erase(iter);
+      break;
+    }
+  }
 }
 
 OffscreenTab::OffscreenTab(OffscreenTabsOwner* owner)
diff --git a/chrome/browser/extensions/api/tab_capture/offscreen_tab.h b/chrome/browser/extensions/api/tab_capture/offscreen_tab.h
index 712c117..e639319 100644
--- a/chrome/browser/extensions/api/tab_capture/offscreen_tab.h
+++ b/chrome/browser/extensions/api/tab_capture/offscreen_tab.h
@@ -11,7 +11,6 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/time/time.h"
 #include "base/timer/timer.h"
 #include "content/public/browser/web_contents_delegate.h"
@@ -75,7 +74,7 @@
   explicit OffscreenTabsOwner(content::WebContents* extension_web_contents);
 
   content::WebContents* const extension_web_contents_;
-  ScopedVector<OffscreenTab> tabs_;
+  std::vector<std::unique_ptr<OffscreenTab>> tabs_;
 
   DISALLOW_COPY_AND_ASSIGN(OffscreenTabsOwner);
 };
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
index 5745674d..c415de6 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.cc
@@ -8,6 +8,7 @@
 
 #include "base/lazy_instance.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "chrome/browser/sessions/session_tab_helper.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
@@ -272,7 +273,7 @@
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
   DCHECK(list_of_capture_info);
   list_of_capture_info->Clear();
-  for (const LiveRequest* request : requests_) {
+  for (const std::unique_ptr<LiveRequest>& request : requests_) {
     if (request->is_anonymous() || !request->is_verified() ||
         request->extension_id() != extension_id)
       continue;
@@ -287,7 +288,8 @@
     const Extension* extension,
     UnloadedExtensionInfo::Reason reason) {
   // Cleanup all the requested media streams for this extension.
-  for (ScopedVector<LiveRequest>::iterator it = requests_.begin();
+  for (std::vector<std::unique_ptr<LiveRequest>>::iterator it =
+           requests_.begin();
        it != requests_.end();) {
     if ((*it)->extension_id() == extension->id()) {
       it = requests_.erase(it);
@@ -313,8 +315,8 @@
     }
   }
 
-  requests_.push_back(
-      new LiveRequest(target_contents, extension_id, is_anonymous, this));
+  requests_.push_back(base::MakeUnique<LiveRequest>(
+      target_contents, extension_id, is_anonymous, this));
   return true;
 }
 
@@ -436,31 +438,31 @@
 
 TabCaptureRegistry::LiveRequest* TabCaptureRegistry::FindRequest(
     const content::WebContents* target_contents) const {
-  for (ScopedVector<LiveRequest>::const_iterator it = requests_.begin();
-       it != requests_.end(); ++it) {
-    if ((*it)->web_contents() == target_contents)
-      return *it;
+  for (const auto& request : requests_) {
+    if (request->web_contents() == target_contents)
+      return request.get();
   }
-  return NULL;
+  return nullptr;
 }
 
 TabCaptureRegistry::LiveRequest* TabCaptureRegistry::FindRequest(
     int original_target_render_process_id,
     int original_target_render_frame_id) const {
-  for (ScopedVector<LiveRequest>::const_iterator it = requests_.begin();
-       it != requests_.end(); ++it) {
-    if ((*it)->WasOriginallyTargettingRenderFrameID(
+  for (const std::unique_ptr<LiveRequest>& request : requests_) {
+    if (request->WasOriginallyTargettingRenderFrameID(
             original_target_render_process_id,
-            original_target_render_frame_id))
-      return *it;
+            original_target_render_frame_id)) {
+      return request.get();
+    }
   }
-  return NULL;
+  return nullptr;
 }
 
 void TabCaptureRegistry::KillRequest(LiveRequest* request) {
-  for (ScopedVector<LiveRequest>::iterator it = requests_.begin();
+  for (std::vector<std::unique_ptr<LiveRequest>>::iterator it =
+           requests_.begin();
        it != requests_.end(); ++it) {
-    if ((*it) == request) {
+    if (it->get() == request) {
       requests_.erase(it);
       return;
     }
diff --git a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.h b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.h
index 5698fed0e..5b64283 100644
--- a/chrome/browser/extensions/api/tab_capture/tab_capture_registry.h
+++ b/chrome/browser/extensions/api/tab_capture/tab_capture_registry.h
@@ -10,7 +10,6 @@
 #include <vector>
 
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/scoped_observer.h"
 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
 #include "chrome/common/extensions/api/tab_capture.h"
@@ -110,7 +109,7 @@
   void KillRequest(LiveRequest* request);
 
   content::BrowserContext* const browser_context_;
-  ScopedVector<LiveRequest> requests_;
+  std::vector<std::unique_ptr<LiveRequest>> requests_;
 
   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
       extension_registry_observer_;
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
index 5ab2706..36188eb 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -10,7 +10,6 @@
 #include "base/bind.h"
 #include "base/lazy_instance.h"
 #include "base/macros.h"
-#include "base/memory/scoped_vector.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
@@ -73,7 +72,8 @@
       const std::string& id);
 
  private:
-  typedef ScopedVector<WebstoreInstaller::Approval> ApprovalList;
+  using ApprovalList =
+      std::vector<std::unique_ptr<WebstoreInstaller::Approval>>;
 
   ApprovalList approvals_;
 
@@ -85,18 +85,19 @@
 
 void PendingApprovals::PushApproval(
     std::unique_ptr<WebstoreInstaller::Approval> approval) {
-  approvals_.push_back(approval.release());
+  approvals_.push_back(std::move(approval));
 }
 
 std::unique_ptr<WebstoreInstaller::Approval> PendingApprovals::PopApproval(
     Profile* profile,
     const std::string& id) {
-  for (size_t i = 0; i < approvals_.size(); ++i) {
-    WebstoreInstaller::Approval* approval = approvals_[i];
-    if (approval->extension_id == id &&
-        profile->IsSameProfile(approval->profile)) {
-      approvals_.weak_erase(approvals_.begin() + i);
-      return std::unique_ptr<WebstoreInstaller::Approval>(approval);
+  for (ApprovalList::iterator iter = approvals_.begin();
+       iter != approvals_.end(); ++iter) {
+    if (iter->get()->extension_id == id &&
+        profile->IsSameProfile(iter->get()->profile)) {
+      std::unique_ptr<WebstoreInstaller::Approval> approval = std::move(*iter);
+      approvals_.erase(iter);
+      return approval;
     }
   }
   return std::unique_ptr<WebstoreInstaller::Approval>();
diff --git a/chrome/browser/extensions/extension_management.cc b/chrome/browser/extensions/extension_management.cc
index 6b926d7..c7e5f4f 100644
--- a/chrome/browser/extensions/extension_management.cc
+++ b/chrome/browser/extensions/extension_management.cc
@@ -10,6 +10,7 @@
 #include "base/bind.h"
 #include "base/bind_helpers.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string16.h"
 #include "base/strings/string_util.h"
@@ -59,8 +60,10 @@
   // before first call to Refresh(), so in order to resolve this, Refresh() must
   // be called in the initialization of ExtensionManagement.
   Refresh();
-  providers_.push_back(new StandardManagementPolicyProvider(this));
-  providers_.push_back(new PermissionsBasedManagementPolicyProvider(this));
+  providers_.push_back(
+      base::MakeUnique<StandardManagementPolicyProvider>(this));
+  providers_.push_back(
+      base::MakeUnique<PermissionsBasedManagementPolicyProvider>(this));
 }
 
 ExtensionManagement::~ExtensionManagement() {
@@ -79,9 +82,9 @@
   observer_list_.RemoveObserver(observer);
 }
 
-std::vector<ManagementPolicy::Provider*> ExtensionManagement::GetProviders()
-    const {
-  return providers_.get();
+const std::vector<std::unique_ptr<ManagementPolicy::Provider>>&
+ExtensionManagement::GetProviders() const {
+  return providers_;
 }
 
 bool ExtensionManagement::BlacklistedByDefault() const {
diff --git a/chrome/browser/extensions/extension_management.h b/chrome/browser/extensions/extension_management.h
index b3010588..9d9831e8 100644
--- a/chrome/browser/extensions/extension_management.h
+++ b/chrome/browser/extensions/extension_management.h
@@ -12,7 +12,6 @@
 #include "base/containers/scoped_ptr_hash_map.h"
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "base/memory/singleton.h"
 #include "base/observer_list.h"
 #include "base/values.h"
@@ -82,7 +81,8 @@
 
   // Get the list of ManagementPolicy::Provider controlled by extension
   // management policy settings.
-  std::vector<ManagementPolicy::Provider*> GetProviders() const;
+  const std::vector<std::unique_ptr<ManagementPolicy::Provider>>& GetProviders()
+      const;
 
   // Checks if extensions are blacklisted by default, by policy. When true,
   // this means that even extensions without an ID should be blacklisted (e.g.
@@ -187,7 +187,7 @@
 
   base::ObserverList<Observer, true> observer_list_;
   PrefChangeRegistrar pref_change_registrar_;
-  ScopedVector<ManagementPolicy::Provider> providers_;
+  std::vector<std::unique_ptr<ManagementPolicy::Provider>> providers_;
 
   DISALLOW_COPY_AND_ASSIGN(ExtensionManagement);
 };
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index cfd8ba1..4be4f7f1 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -231,20 +231,22 @@
 
 void ExtensionService::OnExternalProviderUpdateComplete(
     const ExternalProviderInterface* provider,
-    const ScopedVector<ExternalInstallInfoUpdateUrl>& update_url_extensions,
-    const ScopedVector<ExternalInstallInfoFile>& file_extensions,
+    const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&
+        update_url_extensions,
+    const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&
+        file_extensions,
     const std::set<std::string>& removed_extensions) {
   // Update pending_extension_manager() with the new extensions first.
-  for (auto* extension : update_url_extensions)
+  for (const auto& extension : update_url_extensions)
     OnExternalExtensionUpdateUrlFound(*extension, false);
-  for (auto* extension : file_extensions)
+  for (const auto& extension : file_extensions)
     OnExternalExtensionFileFound(*extension);
 
 #if DCHECK_IS_ON()
   for (const std::string& id : removed_extensions) {
-    for (auto* extension : update_url_extensions)
+    for (const auto& extension : update_url_extensions)
       DCHECK_NE(id, extension->extension_id);
-    for (auto* extension : file_extensions)
+    for (const auto& extension : file_extensions)
       DCHECK_NE(id, extension->extension_id);
   }
 #endif
diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h
index 55a8b3f..942e974 100644
--- a/chrome/browser/extensions/extension_service.h
+++ b/chrome/browser/extensions/extension_service.h
@@ -242,9 +242,10 @@
       const extensions::ExternalProviderInterface* provider) override;
   void OnExternalProviderUpdateComplete(
       const extensions::ExternalProviderInterface* provider,
-      const ScopedVector<extensions::ExternalInstallInfoUpdateUrl>&
+      const std::vector<
+          std::unique_ptr<extensions::ExternalInstallInfoUpdateUrl>>&
           external_update_url_extensions,
-      const ScopedVector<extensions::ExternalInstallInfoFile>&
+      const std::vector<std::unique_ptr<extensions::ExternalInstallInfoFile>>&
           external_file_extensions,
       const std::set<std::string>& removed_extensions) override;
 
diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc
index 604796b..57e06b16 100644
--- a/chrome/browser/extensions/extension_service_unittest.cc
+++ b/chrome/browser/extensions/extension_service_unittest.cc
@@ -466,8 +466,10 @@
 
   void OnExternalProviderUpdateComplete(
       const ExternalProviderInterface* provider,
-      const ScopedVector<ExternalInstallInfoUpdateUrl>& update_url_extensions,
-      const ScopedVector<ExternalInstallInfoFile>& file_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&
+          update_url_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&
+          file_extensions,
       const std::set<std::string>& removed_extensions) override {
     ADD_FAILURE() << "MockProviderVisitor does not provide incremental updates,"
                      " use MockUpdateProviderVisitor instead.";
@@ -535,14 +537,16 @@
 
   void OnExternalProviderUpdateComplete(
       const ExternalProviderInterface* provider,
-      const ScopedVector<ExternalInstallInfoUpdateUrl>& update_url_extensions,
-      const ScopedVector<ExternalInstallInfoFile>& file_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&
+          update_url_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&
+          file_extensions,
       const std::set<std::string>& removed_extensions) override {
-    for (auto* extension_info : update_url_extensions)
+    for (const auto& extension_info : update_url_extensions)
       update_url_extension_ids_.insert(extension_info->extension_id);
     EXPECT_EQ(update_url_extension_ids_.size(), update_url_extensions.size());
 
-    for (auto* extension_info : file_extensions)
+    for (const auto& extension_info : file_extensions)
       file_extension_ids_.insert(extension_info->extension_id);
     EXPECT_EQ(file_extension_ids_.size(), file_extensions.size());
 
diff --git a/chrome/browser/extensions/external_policy_loader_unittest.cc b/chrome/browser/extensions/external_policy_loader_unittest.cc
index 9aaae08..540ef99 100644
--- a/chrome/browser/extensions/external_policy_loader_unittest.cc
+++ b/chrome/browser/extensions/external_policy_loader_unittest.cc
@@ -103,8 +103,10 @@
 
   void OnExternalProviderUpdateComplete(
       const ExternalProviderInterface* provider,
-      const ScopedVector<ExternalInstallInfoUpdateUrl>& update_url_extensions,
-      const ScopedVector<ExternalInstallInfoFile>& file_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>&
+          update_url_extensions,
+      const std::vector<std::unique_ptr<ExternalInstallInfoFile>>&
+          file_extensions,
       const std::set<std::string>& removed_extensions) override {
     ADD_FAILURE() << "Only win registry provider is expected to call this.";
   }
diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc
index fe47198..750228c1 100644
--- a/chrome/browser/extensions/external_provider_impl.cc
+++ b/chrome/browser/extensions/external_provider_impl.cc
@@ -122,15 +122,17 @@
   prefs_.reset(prefs);
   ready_ = true;  // Queries for extensions are allowed from this point.
 
-  ScopedVector<ExternalInstallInfoUpdateUrl> external_update_url_extensions;
-  ScopedVector<ExternalInstallInfoFile> external_file_extensions;
+  std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>
+      external_update_url_extensions;
+  std::vector<std::unique_ptr<ExternalInstallInfoFile>>
+      external_file_extensions;
 
   RetrieveExtensionsFromPrefs(&external_update_url_extensions,
                               &external_file_extensions);
-  for (auto* extension : external_update_url_extensions)
+  for (const auto& extension : external_update_url_extensions)
     service_->OnExternalExtensionUpdateUrlFound(*extension, true);
 
-  for (auto* extension : external_file_extensions)
+  for (const auto& extension : external_file_extensions)
     service_->OnExternalExtensionFileFound(*extension);
 
   service_->OnExternalProviderReady(this);
@@ -159,8 +161,10 @@
 
   prefs_.reset(prefs);
 
-  ScopedVector<ExternalInstallInfoUpdateUrl> external_update_url_extensions;
-  ScopedVector<ExternalInstallInfoFile> external_file_extensions;
+  std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>
+      external_update_url_extensions;
+  std::vector<std::unique_ptr<ExternalInstallInfoFile>>
+      external_file_extensions;
   RetrieveExtensionsFromPrefs(&external_update_url_extensions,
                               &external_file_extensions);
 
@@ -173,8 +177,10 @@
 }
 
 void ExternalProviderImpl::RetrieveExtensionsFromPrefs(
-    ScopedVector<ExternalInstallInfoUpdateUrl>* external_update_url_extensions,
-    ScopedVector<ExternalInstallInfoFile>* external_file_extensions) {
+    std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>*
+        external_update_url_extensions,
+    std::vector<std::unique_ptr<ExternalInstallInfoFile>>*
+        external_file_extensions) {
   // Set of unsupported extensions that need to be deleted from prefs_.
   std::set<std::string> unsupported_extensions;
 
@@ -351,9 +357,10 @@
                      << external_version << "\".";
         continue;
       }
-      external_file_extensions->push_back(new ExternalInstallInfoFile(
-          extension_id, std::move(version), path, crx_location_, creation_flags,
-          auto_acknowledge_, install_immediately_));
+      external_file_extensions->push_back(
+          base::MakeUnique<ExternalInstallInfoFile>(
+              extension_id, std::move(version), path, crx_location_,
+              creation_flags, auto_acknowledge_, install_immediately_));
     } else {  // if (has_external_update_url)
       CHECK(has_external_update_url);  // Checking of keys above ensures this.
       if (download_location_ == Manifest::INVALID_LOCATION) {
@@ -370,7 +377,7 @@
         continue;
       }
       external_update_url_extensions->push_back(
-          new ExternalInstallInfoUpdateUrl(
+          base::MakeUnique<ExternalInstallInfoUpdateUrl>(
               extension_id, install_parameter, std::move(update_url),
               download_location_, creation_flags, auto_acknowledge_));
     }
diff --git a/chrome/browser/extensions/external_provider_impl.h b/chrome/browser/extensions/external_provider_impl.h
index d1bb516..10d92f2a1 100644
--- a/chrome/browser/extensions/external_provider_impl.h
+++ b/chrome/browser/extensions/external_provider_impl.h
@@ -10,7 +10,6 @@
 
 #include "base/macros.h"
 #include "base/memory/ref_counted.h"
-#include "base/memory/scoped_vector.h"
 #include "chrome/browser/extensions/external_loader.h"
 #include "extensions/browser/external_provider_interface.h"
 #include "extensions/common/manifest.h"
@@ -104,9 +103,10 @@
 
   // Retrieves the extensions that were found in this provider.
   void RetrieveExtensionsFromPrefs(
-      ScopedVector<ExternalInstallInfoUpdateUrl>*
+      std::vector<std::unique_ptr<ExternalInstallInfoUpdateUrl>>*
           external_update_url_extensions,
-      ScopedVector<ExternalInstallInfoFile>* external_file_extensions);
+      std::vector<std::unique_ptr<ExternalInstallInfoFile>>*
+          external_file_extensions);
 
   // Location for external extensions that are provided by this provider from
   // local crx files.
diff --git a/chrome/browser/extensions/window_open_apitest.cc b/chrome/browser/extensions/window_open_apitest.cc
index 6608957f..fd74795 100644
--- a/chrome/browser/extensions/window_open_apitest.cc
+++ b/chrome/browser/extensions/window_open_apitest.cc
@@ -4,7 +4,6 @@
 
 #include <stddef.h>
 
-#include "base/memory/scoped_vector.h"
 #include "base/path_service.h"
 #include "base/strings/stringprintf.h"
 #include "build/build_config.h"
