Remove raw DictionaryValue::Set

This change removes the deprecated raw pointer version of
base::DictionaryValue::Set and replaces it with the unique
pointer version or other convenience functions where appropriate.

BUG=646113, 581865
CQ_INCLUDE_TRYBOTS=master.tryserver.chromium.android:android_optional_gpu_tests_rel;master.tryserver.chromium.linux:linux_optional_gpu_tests_rel;master.tryserver.chromium.mac:mac_optional_gpu_tests_rel;master.tryserver.chromium.win:win10_chromium_x64_rel_ng;master.tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2911033002
Cr-Commit-Position: refs/heads/master@{#477985}
diff --git a/base/values.cc b/base/values.cc
index 2f293c9..8e2bc88 100644
--- a/base/values.cc
+++ b/base/values.cc
@@ -636,10 +636,6 @@
                                                      std::move(in_value));
 }
 
-Value* DictionaryValue::Set(StringPiece path, Value* in_value) {
-  return Set(path, WrapUnique(in_value));
-}
-
 Value* DictionaryValue::SetBoolean(StringPiece path, bool in_value) {
   return Set(path, MakeUnique<Value>(in_value));
 }
diff --git a/base/values.h b/base/values.h
index 27fcc6d..6e75540 100644
--- a/base/values.h
+++ b/base/values.h
@@ -249,8 +249,6 @@
   // to the path in that location. |in_value| must be non-null.
   // Returns a pointer to the inserted value.
   Value* Set(StringPiece path, std::unique_ptr<Value> in_value);
-  // Deprecated version of the above. TODO(estade): remove.
-  Value* Set(StringPiece path, Value* in_value);
 
   // Convenience forms of Set().  These methods will replace any existing
   // value at that path, even if it has a different type.
diff --git a/chrome/browser/supervised_user/supervised_user_service_unittest.cc b/chrome/browser/supervised_user/supervised_user_service_unittest.cc
index 3f9c49b1..31bbd9a 100644
--- a/chrome/browser/supervised_user/supervised_user_service_unittest.cc
+++ b/chrome/browser/supervised_user/supervised_user_service_unittest.cc
@@ -15,6 +15,7 @@
 #include "base/strings/utf_string_conversions.h"
 #include "base/test/scoped_feature_list.h"
 #include "base/threading/thread_task_runner_handle.h"
+#include "base/values.h"
 #include "build/build_config.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/profiles/profile.h"
@@ -404,7 +405,8 @@
   scoped_refptr<extensions::Extension> MakeThemeExtension() {
     std::unique_ptr<base::DictionaryValue> source(new base::DictionaryValue());
     source->SetString(extensions::manifest_keys::kName, "Theme");
-    source->Set(extensions::manifest_keys::kTheme, new base::DictionaryValue());
+    source->Set(extensions::manifest_keys::kTheme,
+                base::MakeUnique<base::DictionaryValue>());
     source->SetString(extensions::manifest_keys::kVersion, "1.0");
     extensions::ExtensionBuilder builder;
     scoped_refptr<extensions::Extension> extension =
diff --git a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
index fd4de8c..8507115 100644
--- a/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
+++ b/chrome/browser/sync_file_system/drive_backend/metadata_database.cc
@@ -1612,7 +1612,7 @@
                       FileKindToString(tracker.synced_details().file_kind()));
     }
 
-    base::DictionaryValue* details = new base::DictionaryValue;
+    auto details = base::MakeUnique<base::DictionaryValue>();
     details->SetString("file_id", tracker.file_id());
     if (tracker.has_synced_details() &&
         tracker.synced_details().file_kind() == FILE_KIND_FILE)
@@ -1620,7 +1620,7 @@
     details->SetString("active", tracker.active() ? "true" : "false");
     details->SetString("dirty", tracker.dirty() ? "true" : "false");
 
-    file->Set("details", details);
+    file->Set("details", std::move(details));
 
     files->Append(std::move(file));
   }
@@ -1656,10 +1656,10 @@
   };
   std::vector<std::string> key_strings(
       trackerKeys, trackerKeys + arraysize(trackerKeys));
-  base::ListValue* keys = new base::ListValue;
+  auto keys = base::MakeUnique<base::ListValue>();
   keys->AppendStrings(key_strings);
   metadata->SetString("title", "Trackers");
-  metadata->Set("keys", keys);
+  metadata->Set("keys", std::move(keys));
   trackers->Append(std::move(metadata));
 
   // Append tracker data.
@@ -1718,10 +1718,10 @@
   };
   std::vector<std::string> key_strings(
       fileKeys, fileKeys + arraysize(fileKeys));
-  base::ListValue* keys = new base::ListValue;
+  auto keys = base::MakeUnique<base::ListValue>();
   keys->AppendStrings(key_strings);
   metadata->SetString("title", "Metadata");
-  metadata->Set("keys", keys);
+  metadata->Set("keys", std::move(keys));
   files->Append(std::move(metadata));
 
   // Append metadata data.
diff --git a/chrome/browser/ui/webui/conflicts_handler.cc b/chrome/browser/ui/webui/conflicts_handler.cc
index 75c06bd..b6bb36ec 100644
--- a/chrome/browser/ui/webui/conflicts_handler.cc
+++ b/chrome/browser/ui/webui/conflicts_handler.cc
@@ -41,9 +41,7 @@
 
 void ConflictsHandler::SendModuleList() {
   auto* loaded_modules = EnumerateModulesModel::GetInstance();
-  base::ListValue* list = loaded_modules->GetModuleList();
-  base::DictionaryValue results;
-  results.Set("moduleList", list);
+  std::unique_ptr<base::ListValue> list = loaded_modules->GetModuleList();
 
   // Add the section title and the total count for bad modules found.
   int confirmed_bad = loaded_modules->confirmed_bad_modules_detected();
@@ -59,6 +57,8 @@
         base::IntToString16(list->GetSize()),
         base::IntToString16(confirmed_bad), base::IntToString16(suspected_bad));
   }
+  base::DictionaryValue results;
+  results.Set("moduleList", std::move(list));
   results.SetString("modulesTableTitle", table_title);
 
   web_ui()->CallJavascriptFunctionUnsafe("returnModuleList", results);
diff --git a/chrome/browser/win/enumerate_modules_model.cc b/chrome/browser/win/enumerate_modules_model.cc
index f47f779..d466e28 100644
--- a/chrome/browser/win/enumerate_modules_model.cc
+++ b/chrome/browser/win/enumerate_modules_model.cc
@@ -589,7 +589,7 @@
   module_enumerator_->ScanNow(&enumerated_modules_);
 }
 
-base::ListValue* EnumerateModulesModel::GetModuleList() {
+std::unique_ptr<base::ListValue> EnumerateModulesModel::GetModuleList() {
   DCHECK_CURRENTLY_ON(BrowserThread::UI);
 
   // If a |module_enumerator_| is still around then scanning has not yet
@@ -600,7 +600,7 @@
   if (enumerated_modules_.empty())
     return nullptr;
 
-  base::ListValue* list = new base::ListValue();
+  auto list = base::MakeUnique<base::ListValue>();
 
   for (ModuleEnumerator::ModulesVector::const_iterator module =
            enumerated_modules_.begin();
diff --git a/chrome/browser/win/enumerate_modules_model.h b/chrome/browser/win/enumerate_modules_model.h
index 9a212bd..7be732e 100644
--- a/chrome/browser/win/enumerate_modules_model.h
+++ b/chrome/browser/win/enumerate_modules_model.h
@@ -302,7 +302,7 @@
   void ScanNow(bool background_mode);
 
   // Gets the whole module list as a ListValue.
-  base::ListValue* GetModuleList();
+  std::unique_ptr<base::ListValue> GetModuleList();
 
   // Returns the site to which the user should be taken when the conflict bubble
   // or app menu item is clicked. For now this is simply chrome://conflicts,
diff --git a/chrome/test/chromedriver/performance_logger.cc b/chrome/test/chromedriver/performance_logger.cc
index 23d94e9..8afa658b 100644
--- a/chrome/test/chromedriver/performance_logger.cc
+++ b/chrome/test/chromedriver/performance_logger.cc
@@ -9,6 +9,7 @@
 
 #include "base/bind.h"
 #include "base/json/json_writer.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/values.h"
@@ -126,7 +127,7 @@
   base::DictionaryValue log_message_dict;
   log_message_dict.SetString("webview", webview);
   log_message_dict.SetString("message.method", method);
-  log_message_dict.Set("message.params", params.DeepCopy());
+  log_message_dict.Set("message.params", base::MakeUnique<base::Value>(params));
   std::string log_message_json;
   base::JSONWriter::Write(log_message_dict, &log_message_json);
 
diff --git a/chrome/test/chromedriver/server/http_handler.cc b/chrome/test/chromedriver/server/http_handler.cc
index 6555063..a4d9d5b 100644
--- a/chrome/test/chromedriver/server/http_handler.cc
+++ b/chrome/test/chromedriver/server/http_handler.cc
@@ -771,7 +771,7 @@
 
   base::DictionaryValue body_params;
   body_params.SetInteger("status", status.code());
-  body_params.Set("value", value.release());
+  body_params.Set("value", std::move(value));
   body_params.SetString("sessionId", session_id);
   std::string body;
   base::JSONWriter::WriteWithOptions(
@@ -848,7 +848,7 @@
   } else {
     body_params.SetString("sessionId", session_id);
     body_params.SetString("status", status.message());
-    body_params.Set("value", value.release());
+    body_params.Set("value", std::move(value));
   }
 
   std::string body;
diff --git a/chromecast/browser/cast_net_log.cc b/chromecast/browser/cast_net_log.cc
index 927986f..bd065822 100644
--- a/chromecast/browser/cast_net_log.cc
+++ b/chromecast/browser/cast_net_log.cc
@@ -5,11 +5,13 @@
 #include "chromecast/browser/cast_net_log.h"
 
 #include <stdio.h>
+
 #include <utility>
 
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_file.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "content/public/common/content_switches.h"
 #include "net/log/net_log_util.h"
@@ -19,21 +21,21 @@
 
 namespace {
 
-base::DictionaryValue* GetShellConstants() {
+std::unique_ptr<base::DictionaryValue> GetShellConstants() {
   std::unique_ptr<base::DictionaryValue> constants_dict =
       net::GetNetConstants();
 
   // Add a dictionary with client information
-  base::DictionaryValue* dict = new base::DictionaryValue();
+  auto dict = base::MakeUnique<base::DictionaryValue>();
 
   dict->SetString("name", "cast_shell");
   dict->SetString(
       "command_line",
       base::CommandLine::ForCurrentProcess()->GetCommandLineString());
 
-  constants_dict->Set("clientInfo", dict);
+  constants_dict->Set("clientInfo", std::move(dict));
 
-  return constants_dict.release();
+  return constants_dict;
 }
 
 }  // namespace
diff --git a/chromeos/dbus/fake_shill_service_client.cc b/chromeos/dbus/fake_shill_service_client.cc
index 7075c38..363b1c7a 100644
--- a/chromeos/dbus/fake_shill_service_client.cc
+++ b/chromeos/dbus/fake_shill_service_client.cc
@@ -534,8 +534,8 @@
   if (!stub_services_.GetDictionaryWithoutPathExpansion(service_path,
                                                         &properties) &&
       create_if_missing) {
-    properties = new base::DictionaryValue;
-    stub_services_.Set(service_path, properties);
+    properties = stub_services_.SetDictionary(
+        service_path, base::MakeUnique<base::DictionaryValue>());
   }
   return properties;
 }
diff --git a/chromeos/network/network_configuration_handler_unittest.cc b/chromeos/network/network_configuration_handler_unittest.cc
index 976da8ee..2549a20 100644
--- a/chromeos/network/network_configuration_handler_unittest.cc
+++ b/chromeos/network/network_configuration_handler_unittest.cc
@@ -340,7 +340,7 @@
   std::unique_ptr<base::Value> networkNameValue(new base::Value(networkName));
 
   base::DictionaryValue value;
-  value.Set(key, new base::Value(networkName));
+  value.SetString(key, networkName);
   dictionary_value_result_ = &value;
   EXPECT_CALL(*mock_service_client_,
               SetProperty(dbus::ObjectPath(service_path), key,
@@ -404,7 +404,7 @@
   std::unique_ptr<base::Value> networkNameValue(new base::Value(networkName));
 
   base::DictionaryValue value;
-  value.Set(key, new base::Value(networkName));
+  value.SetString(key, networkName);
   dictionary_value_result_ = &value;
   EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _))
       .WillOnce(
@@ -423,7 +423,7 @@
 
   // First set up a value to clear.
   base::DictionaryValue value;
-  value.Set(key, new base::Value(networkName));
+  value.SetString(key, networkName);
   dictionary_value_result_ = &value;
   EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _))
       .WillOnce(
@@ -453,7 +453,7 @@
 
   // First set up a value to clear.
   base::DictionaryValue value;
-  value.Set(key, new base::Value(networkName));
+  value.SetString(key, networkName);
   dictionary_value_result_ = &value;
   EXPECT_CALL(*mock_service_client_, SetProperties(_, _, _, _))
       .WillOnce(
diff --git a/chromeos/network/onc/onc_validator.cc b/chromeos/network/onc/onc_validator.cc
index 3bb988a5..f0dde18 100644
--- a/chromeos/network/onc/onc_validator.cc
+++ b/chromeos/network/onc/onc_validator.cc
@@ -8,6 +8,7 @@
 #include <stdint.h>
 
 #include <algorithm>
+#include <utility>
 
 #include "base/json/json_writer.h"
 #include "base/logging.h"
@@ -284,7 +285,7 @@
     repaired_recommended->AppendString(field_name);
   }
 
-  result->Set(::onc::kRecommended, repaired_recommended.release());
+  result->Set(::onc::kRecommended, std::move(repaired_recommended));
   return true;
 }
 
diff --git a/components/cloud_devices/common/description_items_inl.h b/components/cloud_devices/common/description_items_inl.h
index 3c30310..02fc023 100644
--- a/components/cloud_devices/common/description_items_inl.h
+++ b/components/cloud_devices/common/description_items_inl.h
@@ -11,7 +11,9 @@
 #include <utility>
 #include <vector>
 
+#include "base/memory/ptr_util.h"
 #include "base/numerics/safe_conversions.h"
+#include "base/values.h"
 #include "components/cloud_devices/common/description_items.h"
 
 // Implementation of templates defined in header file.
@@ -126,17 +128,16 @@
 void SelectionCapability<Option, Traits>::SaveTo(
     CloudDeviceDescription* description) const {
   DCHECK(IsValid());
-  base::ListValue* options_list = new base::ListValue;
-  description->CreateItem(Traits::GetCapabilityPath())
-      ->Set(json::kKeyOption, options_list);
+  auto options_list = base::MakeUnique<base::ListValue>();
   for (size_t i = 0; i < options_.size(); ++i) {
-    std::unique_ptr<base::DictionaryValue> option_value(
-        new base::DictionaryValue);
+    auto option_value = base::MakeUnique<base::DictionaryValue>();
     if (base::checked_cast<int>(i) == default_idx_)
       option_value->SetBoolean(json::kKeyIsDefault, true);
     Traits::Save(options_[i], option_value.get());
     options_list->Append(std::move(option_value));
   }
+  description->CreateItem(Traits::GetCapabilityPath())
+      ->Set(json::kKeyOption, std::move(options_list));
 }
 
 template <class Traits>
diff --git a/components/policy/core/common/mac_util.cc b/components/policy/core/common/mac_util.cc
index 7faecd2..e213d08 100644
--- a/components/policy/core/common/mac_util.cc
+++ b/components/policy/core/common/mac_util.cc
@@ -27,8 +27,8 @@
         PropertyToValue(static_cast<CFPropertyListRef>(value));
     if (converted) {
       const std::string string = base::SysCFStringRefToUTF8(cf_key);
-      static_cast<base::DictionaryValue*>(context)->Set(
-          string, converted.release());
+      static_cast<base::DictionaryValue*>(context)->Set(string,
+                                                        std::move(converted));
     }
   }
 }
diff --git a/components/policy/core/common/policy_loader_win_unittest.cc b/components/policy/core/common/policy_loader_win_unittest.cc
index 3efc8c71..e973049 100644
--- a/components/policy/core/common/policy_loader_win_unittest.cc
+++ b/components/policy/core/common/policy_loader_win_unittest.cc
@@ -809,10 +809,10 @@
     expected_policy.SetBoolean(test_keys::kKeyBoolean, true);
     expected_policy.SetString(test_keys::kKeyString, "GPO");
     expected_policy.SetInteger(test_keys::kKeyInteger, 42);
-    std::unique_ptr<base::ListValue> list(new base::ListValue());
+    auto list = base::MakeUnique<base::ListValue>();
     list->AppendString("GPO 1");
     list->AppendString("GPO 2");
-    expected_policy.Set(test_keys::kKeyStringList, list.release());
+    expected_policy.Set(test_keys::kKeyStringList, std::move(list));
     PolicyBundle expected;
     expected.Get(PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))
         .LoadFrom(&expected_policy, POLICY_LEVEL_MANDATORY,
diff --git a/components/policy/core/common/registry_dict_unittest.cc b/components/policy/core/common/registry_dict_unittest.cc
index e415d55..ca27f32 100644
--- a/components/policy/core/common/registry_dict_unittest.cc
+++ b/components/policy/core/common/registry_dict_unittest.cc
@@ -230,22 +230,21 @@
   std::unique_ptr<base::Value> actual(test_dict.ConvertToJSON(schema));
 
   base::DictionaryValue expected;
-  expected.Set("one", int_value.CreateDeepCopy());
-  std::unique_ptr<base::DictionaryValue> expected_subdict(
-      new base::DictionaryValue());
-  expected_subdict->Set("two", string_value.CreateDeepCopy());
+  expected.Set("one", base::MakeUnique<base::Value>(int_value));
+  auto expected_subdict = base::MakeUnique<base::DictionaryValue>();
+  expected_subdict->Set("two", base::MakeUnique<base::Value>(string_value));
   expected.Set("three", std::move(expected_subdict));
-  std::unique_ptr<base::ListValue> expected_list(new base::ListValue());
-  expected_list->Append(string_value.CreateDeepCopy());
+  auto expected_list = base::MakeUnique<base::ListValue>();
+  expected_list->Append(base::MakeUnique<base::Value>(string_value));
   expected.Set("dict-to-list", std::move(expected_list));
-  expected.Set("int-to-bool", new base::Value(true));
-  expected.Set("int-to-double", new base::Value(42.0));
-  expected.Set("string-to-bool", new base::Value(false));
-  expected.Set("string-to-double", new base::Value(0.0));
-  expected.Set("string-to-int", new base::Value(static_cast<int>(0)));
-  expected_list.reset(new base::ListValue());
+  expected.SetBoolean("int-to-bool", true);
+  expected.SetDouble("int-to-double", 42.0);
+  expected.SetBoolean("string-to-bool", false);
+  expected.SetDouble("string-to-double", 0.0);
+  expected.SetInteger("string-to-int", static_cast<int>(0));
+  expected_list = base::MakeUnique<base::ListValue>();
   expected_list->Append(base::MakeUnique<base::Value>("value"));
-  expected_subdict.reset(new base::DictionaryValue());
+  expected_subdict = base::MakeUnique<base::DictionaryValue>();
   expected_subdict->Set("key", std::move(expected_list));
   expected.Set("string-to-dict", std::move(expected_subdict));
 
diff --git a/components/wifi/network_properties.cc b/components/wifi/network_properties.cc
index e899125..9d7a2318 100644
--- a/components/wifi/network_properties.cc
+++ b/components/wifi/network_properties.cc
@@ -4,6 +4,8 @@
 
 #include "components/wifi/network_properties.h"
 
+#include <utility>
+
 #include "base/message_loop/message_loop.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/stringprintf.h"
@@ -52,14 +54,14 @@
       frequency_list->AppendInteger(*it);
     }
     if (!frequency_list->empty())
-      wifi->Set(onc::wifi::kFrequencyList, frequency_list.release());
+      wifi->Set(onc::wifi::kFrequencyList, std::move(frequency_list));
     if (!bssid.empty())
       wifi->SetString(onc::wifi::kBSSID, bssid);
     wifi->SetString(onc::wifi::kSSID, ssid);
     wifi->SetString(onc::wifi::kHexSSID,
                     base::HexEncode(ssid.c_str(), ssid.size()));
   }
-  value->Set(onc::network_type::kWiFi, wifi.release());
+  value->Set(onc::network_type::kWiFi, std::move(wifi));
 
   return value;
 }
diff --git a/content/browser/accessibility/accessibility_tree_formatter_win.cc b/content/browser/accessibility/accessibility_tree_formatter_win.cc
index 2eeb2b06..7b1c36f 100644
--- a/content/browser/accessibility/accessibility_tree_formatter_win.cc
+++ b/content/browser/accessibility/accessibility_tree_formatter_win.cc
@@ -12,11 +12,13 @@
 #include <utility>
 
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
+#include "base/values.h"
 #include "base/win/scoped_bstr.h"
 #include "base/win/scoped_comptr.h"
 #include "content/browser/accessibility/accessibility_tree_formatter_utils_win.h"
@@ -273,15 +275,15 @@
                                                  variant_self)) &&
       SUCCEEDED(ToBrowserAccessibilityWin(root)->GetCOM()->accLocation(
           &root_left, &root_top, &root_width, &root_height, variant_self))) {
-    base::DictionaryValue* location = new base::DictionaryValue;
+    auto location = base::MakeUnique<base::DictionaryValue>();
     location->SetInteger("x", left - root_left);
     location->SetInteger("y", top - root_top);
-    dict->Set("location", location);
+    dict->Set("location", std::move(location));
 
-    base::DictionaryValue* size = new base::DictionaryValue;
+    auto size = base::MakeUnique<base::DictionaryValue>();
     size->SetInteger("width", width);
     size->SetInteger("height", height);
-    dict->Set("size", size);
+    dict->Set("size", std::move(size));
   }
 
   LONG index_in_parent;
diff --git a/content/browser/tracing/etw_tracing_agent_win.cc b/content/browser/tracing/etw_tracing_agent_win.cc
index c126212..b3b56bd9 100644
--- a/content/browser/tracing/etw_tracing_agent_win.cc
+++ b/content/browser/tracing/etw_tracing_agent_win.cc
@@ -168,43 +168,41 @@
   now_in_us.QuadPart = now.ToInternalValue();
 
   // Add fields to the event.
-  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  value->Set("guid", new base::Value("ClockSync"));
-  value->Set("walltime",
-             new base::Value(base::StringPrintf(
-                 "%08X%08X", walltime_in_us.HighPart, walltime_in_us.LowPart)));
-  value->Set("tick", new base::Value(base::StringPrintf(
-                         "%08X%08X", now_in_us.HighPart, now_in_us.LowPart)));
+  auto value = base::MakeUnique<base::DictionaryValue>();
+  value->SetString("guid", "ClockSync");
+  value->SetString("walltime",
+                   base::StringPrintf("%08X%08X", walltime_in_us.HighPart,
+                                      walltime_in_us.LowPart));
+  value->SetString("tick", base::StringPrintf("%08X%08X", now_in_us.HighPart,
+                                              now_in_us.LowPart));
 
   // Append it to the events buffer.
   events_->Append(std::move(value));
 }
 
 void EtwTracingAgent::AppendEventToBuffer(EVENT_TRACE* event) {
-  using base::Value;
-
-  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
+  auto value = base::MakeUnique<base::DictionaryValue>();
 
   // Add header fields to the event.
   LARGE_INTEGER ts_us;
   ts_us.QuadPart = event->Header.TimeStamp.QuadPart / 10;
-  value->Set("ts", new base::Value(base::StringPrintf(
-                       "%08X%08X", ts_us.HighPart, ts_us.LowPart)));
+  value->SetString(
+      "ts", base::StringPrintf("%08X%08X", ts_us.HighPart, ts_us.LowPart));
 
-  value->Set("guid", new base::Value(GuidToString(event->Header.Guid)));
+  value->SetString("guid", GuidToString(event->Header.Guid));
 
-  value->Set("op", new Value(event->Header.Class.Type));
-  value->Set("ver", new Value(event->Header.Class.Version));
-  value->Set("pid", new Value(static_cast<int>(event->Header.ProcessId)));
-  value->Set("tid", new Value(static_cast<int>(event->Header.ThreadId)));
-  value->Set("cpu", new Value(event->BufferContext.ProcessorNumber));
+  value->SetInteger("op", event->Header.Class.Type);
+  value->SetInteger("ver", event->Header.Class.Version);
+  value->SetInteger("pid", static_cast<int>(event->Header.ProcessId));
+  value->SetInteger("tid", static_cast<int>(event->Header.ThreadId));
+  value->SetInteger("cpu", event->BufferContext.ProcessorNumber);
 
   // Base64 encode the payload bytes.
   base::StringPiece buffer(static_cast<const char*>(event->MofData),
                            event->MofLength);
   std::string payload;
   base::Base64Encode(buffer, &payload);
-  value->Set("payload", new base::Value(payload));
+  value->SetString("payload", payload);
 
   // Append it to the events buffer.
   events_->Append(std::move(value));
@@ -227,8 +225,8 @@
 void EtwTracingAgent::FlushOnThread(
     const StopAgentTracingCallback& callback) {
   // Add the header information to the stream.
-  std::unique_ptr<base::DictionaryValue> header(new base::DictionaryValue());
-  header->Set("name", new base::Value("ETW"));
+  auto header = base::MakeUnique<base::DictionaryValue>();
+  header->SetString("name", "ETW");
 
   // Release and pass the events buffer.
   header->Set("content", std::move(events_));
diff --git a/dbus/values_util_unittest.cc b/dbus/values_util_unittest.cc
index 0cc7d91..a4854dc 100644
--- a/dbus/values_util_unittest.cc
+++ b/dbus/values_util_unittest.cc
@@ -14,6 +14,7 @@
 
 #include "base/json/json_writer.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "dbus/message.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -516,11 +517,11 @@
   const double kDoubleValue = 4.9;
   const std::string kStringValue = "fifty";
 
-  base::ListValue* list_value = new base::ListValue();
+  auto list_value = base::MakeUnique<base::ListValue>();
   list_value->AppendBoolean(kBoolValue);
   list_value->AppendInteger(kInt32Value);
 
-  base::DictionaryValue* dictionary_value = new base::DictionaryValue();
+  auto dictionary_value = base::MakeUnique<base::DictionaryValue>();
   dictionary_value->SetBoolean(kKey1, kBoolValue);
   dictionary_value->SetInteger(kKey2, kDoubleValue);
 
@@ -529,8 +530,8 @@
   test_dictionary.SetInteger(kKey2, kInt32Value);
   test_dictionary.SetDouble(kKey3, kDoubleValue);
   test_dictionary.SetString(kKey4, kStringValue);
-  test_dictionary.Set(kKey5, list_value);  // takes ownership
-  test_dictionary.Set(kKey6, dictionary_value);  // takes ownership
+  test_dictionary.Set(kKey5, std::move(list_value));
+  test_dictionary.Set(kKey6, std::move(dictionary_value));
 
   std::unique_ptr<Response> response(Response::CreateEmpty());
   MessageWriter writer(response.get());
@@ -563,11 +564,11 @@
   const double kDoubleValue = 4.9;
   const std::string kStringValue = "fifty";
 
-  base::ListValue* list_value = new base::ListValue();
+  auto list_value = base::MakeUnique<base::ListValue>();
   list_value->AppendBoolean(kBoolValue);
   list_value->AppendInteger(kInt32Value);
 
-  base::DictionaryValue* dictionary_value = new base::DictionaryValue();
+  auto dictionary_value = base::MakeUnique<base::DictionaryValue>();
   dictionary_value->SetBoolean(kKey1, kBoolValue);
   dictionary_value->SetInteger(kKey2, kDoubleValue);
 
@@ -576,8 +577,8 @@
   test_dictionary.SetInteger(kKey2, kInt32Value);
   test_dictionary.SetDouble(kKey3, kDoubleValue);
   test_dictionary.SetString(kKey4, kStringValue);
-  test_dictionary.Set(kKey5, list_value);  // takes ownership
-  test_dictionary.Set(kKey6, dictionary_value);  // takes ownership
+  test_dictionary.Set(kKey5, std::move(list_value));
+  test_dictionary.Set(kKey6, std::move(dictionary_value));
 
   std::unique_ptr<Response> response(Response::CreateEmpty());
   MessageWriter writer(response.get());
diff --git a/device/geolocation/network_location_request.cc b/device/geolocation/network_location_request.cc
index 0db378a..08c1574 100644
--- a/device/geolocation/network_location_request.cc
+++ b/device/geolocation/network_location_request.cc
@@ -9,9 +9,11 @@
 #include <limits>
 #include <set>
 #include <string>
+#include <utility>
 
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
+#include "base/memory/ptr_util.h"
 #include "base/metrics/histogram.h"
 #include "base/metrics/histogram_macros.h"
 #include "base/strings/string_number_conversions.h"
@@ -274,10 +276,9 @@
   for (const auto& ap_data : wifi_data.access_point_data)
     access_points_by_signal_strength.insert(&ap_data);
 
-  base::ListValue* wifi_access_point_list = new base::ListValue();
+  auto wifi_access_point_list = base::MakeUnique<base::ListValue>();
   for (auto* ap_data : access_points_by_signal_strength) {
-    std::unique_ptr<base::DictionaryValue> wifi_dict(
-        new base::DictionaryValue());
+    auto wifi_dict = base::MakeUnique<base::DictionaryValue>();
     AddString("macAddress", base::UTF16ToUTF8(ap_data->mac_address),
               wifi_dict.get());
     AddInteger("signalStrength", ap_data->radio_signal_strength,
@@ -287,7 +288,7 @@
     AddInteger("signalToNoiseRatio", ap_data->signal_to_noise, wifi_dict.get());
     wifi_access_point_list->Append(std::move(wifi_dict));
   }
-  request->Set("wifiAccessPoints", wifi_access_point_list);
+  request->Set("wifiAccessPoints", std::move(wifi_access_point_list));
 }
 
 void FormatPositionError(const GURL& server_url,
diff --git a/extensions/browser/api/socket/socket_api.cc b/extensions/browser/api/socket/socket_api.cc
index cd52dff..372a24b 100644
--- a/extensions/browser/api/socket/socket_api.cc
+++ b/extensions/browser/api/socket/socket_api.cc
@@ -600,7 +600,8 @@
     result->Set(kDataKey, base::Value::CreateWithCopiedBuffer(io_buffer->data(),
                                                               bytes_read));
   } else {
-    result->Set(kDataKey, new base::Value(base::Value::Type::BINARY));
+    result->Set(kDataKey,
+                base::MakeUnique<base::Value>(base::Value::Type::BINARY));
   }
   result->SetString(kAddressKey, address);
   result->SetInteger(kPortKey, port);
diff --git a/extensions/browser/api/storage/settings_test_util.cc b/extensions/browser/api/storage/settings_test_util.cc
index 1b619ef6..de30f6a 100644
--- a/extensions/browser/api/storage/settings_test_util.cc
+++ b/extensions/browser/api/storage/settings_test_util.cc
@@ -4,8 +4,12 @@
 
 #include "extensions/browser/api/storage/settings_test_util.h"
 
+#include <utility>
+
 #include "base/files/file_path.h"
+#include "base/memory/ptr_util.h"
 #include "base/run_loop.h"
+#include "base/values.h"
 #include "extensions/browser/api/storage/storage_frontend.h"
 #include "extensions/browser/extension_registry.h"
 #include "extensions/browser/extension_system_provider.h"
@@ -77,18 +81,18 @@
       it != permissions_set.end(); ++it) {
     permissions->AppendString(*it);
   }
-  manifest.Set("permissions", permissions.release());
+  manifest.Set("permissions", std::move(permissions));
 
   switch (type) {
     case Manifest::TYPE_EXTENSION:
       break;
 
     case Manifest::TYPE_LEGACY_PACKAGED_APP: {
-      base::DictionaryValue* app = new base::DictionaryValue();
-      base::DictionaryValue* app_launch = new base::DictionaryValue();
+      auto app = base::MakeUnique<base::DictionaryValue>();
+      auto app_launch = base::MakeUnique<base::DictionaryValue>();
       app_launch->SetString("local_path", "fake.html");
-      app->Set("launch", app_launch);
-      manifest.Set("app", app);
+      app->Set("launch", std::move(app_launch));
+      manifest.Set("app", std::move(app));
       break;
     }
 
diff --git a/google_apis/drive/drive_api_requests.cc b/google_apis/drive/drive_api_requests.cc
index e9799c6..632d1c6 100644
--- a/google_apis/drive/drive_api_requests.cc
+++ b/google_apis/drive/drive_api_requests.cc
@@ -6,6 +6,8 @@
 
 #include <stddef.h>
 
+#include <utility>
+
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/json/json_writer.h"
@@ -91,10 +93,9 @@
   if (properties.empty())
     return;
 
-  base::ListValue* const properties_value = new base::ListValue;
+  auto properties_value = base::MakeUnique<base::ListValue>();
   for (const auto& property : properties) {
-    std::unique_ptr<base::DictionaryValue> property_value(
-        new base::DictionaryValue);
+    auto property_value = base::MakeUnique<base::DictionaryValue>();
     std::string visibility_as_string;
     switch (property.visibility()) {
       case Property::VISIBILITY_PRIVATE:
@@ -109,7 +110,7 @@
     property_value->SetString("value", property.value());
     properties_value->Append(std::move(property_value));
   }
-  request_body->Set("properties", properties_value);
+  request_body->Set("properties", std::move(properties_value));
 }
 
 // Creates metadata JSON string for multipart uploading.
@@ -127,9 +128,9 @@
 
   // Fill parent link.
   if (!parent_resource_id.empty()) {
-    std::unique_ptr<base::ListValue> parents(new base::ListValue);
+    auto parents = base::MakeUnique<base::ListValue>();
     parents->Append(google_apis::util::CreateParentValue(parent_resource_id));
-    root.Set("parents", parents.release());
+    root.Set("parents", std::move(parents));
   }
 
   if (!modified_date.is_null()) {
@@ -387,13 +388,13 @@
     root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!parents_.empty()) {
-    base::ListValue* parents_value = new base::ListValue;
+    auto parents_value = base::MakeUnique<base::ListValue>();
     for (size_t i = 0; i < parents_.size(); ++i) {
-      std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue);
+      auto parent = base::MakeUnique<base::DictionaryValue>();
       parent->SetString("id", parents_[i]);
       parents_value->Append(std::move(parent));
     }
-    root.Set("parents", parents_value);
+    root.Set("parents", std::move(parents_value));
   }
 
   if (!title_.empty())
@@ -465,13 +466,13 @@
   }
 
   if (!parents_.empty()) {
-    base::ListValue* parents_value = new base::ListValue;
+    auto parents_value = base::MakeUnique<base::ListValue>();
     for (size_t i = 0; i < parents_.size(); ++i) {
-      std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue);
+      auto parent = base::MakeUnique<base::DictionaryValue>();
       parent->SetString("id", parents_[i]);
       parents_value->Append(std::move(parent));
     }
-    root.Set("parents", parents_value);
+    root.Set("parents", std::move(parents_value));
   }
 
   AttachProperties(properties_, &root);
@@ -519,13 +520,13 @@
     root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
 
   if (!parents_.empty()) {
-    base::ListValue* parents_value = new base::ListValue;
+    auto parents_value = base::MakeUnique<base::ListValue>();
     for (size_t i = 0; i < parents_.size(); ++i) {
-      std::unique_ptr<base::DictionaryValue> parent(new base::DictionaryValue);
+      auto parent = base::MakeUnique<base::DictionaryValue>();
       parent->SetString("id", parents_[i]);
       parents_value->Append(std::move(parent));
     }
-    root.Set("parents", parents_value);
+    root.Set("parents", std::move(parents_value));
   }
 
   if (!title_.empty())
@@ -823,9 +824,9 @@
   root.SetString("title", title_);
 
   // Fill parent link.
-  std::unique_ptr<base::ListValue> parents(new base::ListValue);
+  auto parents = base::MakeUnique<base::ListValue>();
   parents->Append(util::CreateParentValue(parent_resource_id_));
-  root.Set("parents", parents.release());
+  root.Set("parents", std::move(parents));
 
   if (!modified_date_.is_null())
     root.SetString("modifiedDate", util::FormatTimeAsString(modified_date_));
@@ -883,9 +884,9 @@
     std::string* upload_content) {
   base::DictionaryValue root;
   if (!parent_resource_id_.empty()) {
-    std::unique_ptr<base::ListValue> parents(new base::ListValue);
+    auto parents = base::MakeUnique<base::ListValue>();
     parents->Append(util::CreateParentValue(parent_resource_id_));
-    root.Set("parents", parents.release());
+    root.Set("parents", std::move(parents));
   }
 
   if (!title_.empty())
@@ -1147,9 +1148,9 @@
     case PERMISSION_ROLE_COMMENTER:
       root.SetString("role", "reader");
       {
-        base::ListValue* list = new base::ListValue;
+        auto list = base::MakeUnique<base::ListValue>();
         list->AppendString("commenter");
-        root.Set("additionalRoles", list);
+        root.Set("additionalRoles", std::move(list));
       }
       break;
   }
diff --git a/google_apis/gaia/google_service_auth_error.cc b/google_apis/gaia/google_service_auth_error.cc
index a357005..8c657f0 100644
--- a/google_apis/gaia/google_service_auth_error.cc
+++ b/google_apis/gaia/google_service_auth_error.cc
@@ -5,9 +5,11 @@
 #include "google_apis/gaia/google_service_auth_error.h"
 
 #include <string>
+#include <utility>
 
 #include "base/json/json_reader.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
@@ -197,23 +199,23 @@
     value->SetString("errorMessage", error_message_);
   }
   if (state_ == CAPTCHA_REQUIRED) {
-    base::DictionaryValue* captcha_value = new base::DictionaryValue();
-    value->Set("captcha", captcha_value);
+    auto captcha_value = base::MakeUnique<base::DictionaryValue>();
     captcha_value->SetString("token", captcha_.token);
     captcha_value->SetString("audioUrl", captcha_.audio_url.spec());
     captcha_value->SetString("imageUrl", captcha_.image_url.spec());
     captcha_value->SetString("unlockUrl", captcha_.unlock_url.spec());
     captcha_value->SetInteger("imageWidth", captcha_.image_width);
     captcha_value->SetInteger("imageHeight", captcha_.image_height);
+    value->Set("captcha", std::move(captcha_value));
   } else if (state_ == CONNECTION_FAILED) {
     value->SetString("networkError", net::ErrorToString(network_error_));
   } else if (state_ == TWO_FACTOR) {
-    base::DictionaryValue* two_factor_value = new base::DictionaryValue();
-    value->Set("two_factor", two_factor_value);
+    auto two_factor_value = base::MakeUnique<base::DictionaryValue>();
     two_factor_value->SetString("token", second_factor_.token);
     two_factor_value->SetString("promptText", second_factor_.prompt_text);
     two_factor_value->SetString("alternateText", second_factor_.alternate_text);
     two_factor_value->SetInteger("fieldLength", second_factor_.field_length);
+    value->Set("two_factor", std::move(two_factor_value));
   }
   return value;
 }
diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc
index 334ea2a..339eaa0 100644
--- a/gpu/config/gpu_control_list.cc
+++ b/gpu/config/gpu_control_list.cc
@@ -4,12 +4,16 @@
 
 #include "gpu/config/gpu_control_list.h"
 
+#include <utility>
+
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/sys_info.h"
+#include "base/values.h"
 #include "gpu/config/gpu_info.h"
 #include "third_party/re2/src/re2/re2.h"
 
@@ -581,18 +585,18 @@
   DCHECK(problem_list);
   for (auto index : active_entries_) {
     const Entry& entry = entries_[index];
-    std::unique_ptr<base::DictionaryValue> problem(new base::DictionaryValue());
+    auto problem = base::MakeUnique<base::DictionaryValue>();
 
     problem->SetString("description", entry.description);
 
-    base::ListValue* cr_bugs = new base::ListValue();
+    auto cr_bugs = base::MakeUnique<base::ListValue>();
     for (size_t jj = 0; jj < entry.cr_bug_size; ++jj)
       cr_bugs->AppendInteger(entry.cr_bugs[jj]);
-    problem->Set("crBugs", cr_bugs);
+    problem->Set("crBugs", std::move(cr_bugs));
 
-    base::ListValue* features = new base::ListValue();
-    entry.GetFeatureNames(features, feature_map_);
-    problem->Set("affectedGpuSettings", features);
+    auto features = base::MakeUnique<base::ListValue>();
+    entry.GetFeatureNames(features.get(), feature_map_);
+    problem->Set("affectedGpuSettings", std::move(features));
 
     DCHECK(tag == "workarounds" || tag == "disabledFeatures");
     problem->SetString("tag", tag);
diff --git a/headless/lib/browser/headless_net_log.cc b/headless/lib/browser/headless_net_log.cc
index a64f37ea..ef733c2 100644
--- a/headless/lib/browser/headless_net_log.cc
+++ b/headless/lib/browser/headless_net_log.cc
@@ -5,11 +5,13 @@
 #include "headless/lib/browser/headless_net_log.h"
 
 #include <stdio.h>
+
 #include <utility>
 
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/scoped_file.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "build/build_config.h"
 #include "content/public/common/content_switches.h"
@@ -24,14 +26,14 @@
       net::GetNetConstants();
 
   // Add a dictionary with client information
-  base::DictionaryValue* dict = new base::DictionaryValue();
+  auto dict = base::MakeUnique<base::DictionaryValue>();
 
   dict->SetString("name", "headless");
   dict->SetString(
       "command_line",
       base::CommandLine::ForCurrentProcess()->GetCommandLineString());
 
-  constants_dict->Set("clientInfo", dict);
+  constants_dict->Set("clientInfo", std::move(dict));
 
   return std::move(constants_dict);
 }
diff --git a/ios/chrome/browser/autofill/autofill_agent.mm b/ios/chrome/browser/autofill/autofill_agent.mm
index 9f2e38ce..3943572 100644
--- a/ios/chrome/browser/autofill/autofill_agent.mm
+++ b/ios/chrome/browser/autofill/autofill_agent.mm
@@ -810,14 +810,14 @@
   formData->SetString("formName", base::UTF16ToUTF8(form.name));
   // Note: Destruction of all child base::Value types is handled by the root
   // formData object on its own destruction.
-  base::DictionaryValue* fieldsData = new base::DictionaryValue;
+  auto fieldsData = base::MakeUnique<base::DictionaryValue>();
 
   const std::vector<autofill::FormFieldData>& fields = form.fields;
   for (const auto& fieldData : fields) {
     fieldsData->SetStringWithoutPathExpansion(base::UTF16ToUTF8(fieldData.name),
                                               fieldData.value);
   }
-  formData->Set("fields", fieldsData);
+  formData->Set("fields", std::move(fieldsData));
 
   // Stringify the JSON data and send it to the UIWebView-side fillForm method.
   std::string dataString;
diff --git a/ios/chrome/browser/notification_promo.cc b/ios/chrome/browser/notification_promo.cc
index 65c132d3..fd81c3c 100644
--- a/ios/chrome/browser/notification_promo.cc
+++ b/ios/chrome/browser/notification_promo.cc
@@ -6,6 +6,9 @@
 
 #include <stddef.h>
 
+#include <utility>
+
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
@@ -76,7 +79,7 @@
       json_or_payload.SetString(iter->first, iter->second);
     }
   }
-  json.Set("payload", payload.DeepCopy());
+  json.Set("payload", base::MakeUnique<base::Value>(payload));
 
   InitFromJson(json);
 }
@@ -139,14 +142,14 @@
                                    double first_view_time,
                                    int views,
                                    bool closed) {
-  base::DictionaryValue* ntp_promo = new base::DictionaryValue;
+  auto ntp_promo = base::MakeUnique<base::DictionaryValue>();
   ntp_promo->SetDouble(kPrefPromoFirstViewTime, first_view_time);
   ntp_promo->SetInteger(kPrefPromoViews, views);
   ntp_promo->SetBoolean(kPrefPromoClosed, closed);
 
   base::DictionaryValue promo_dict;
   promo_dict.MergeDictionary(local_state_->GetDictionary(kPrefPromoObject));
-  promo_dict.Set(base::IntToString(promo_id), ntp_promo);
+  promo_dict.Set(base::IntToString(promo_id), std::move(ntp_promo));
   local_state_->Set(kPrefPromoObject, promo_dict);
   DVLOG(1) << "WritePrefs " << promo_dict;
 }
diff --git a/ios/chrome/browser/notification_promo_unittest.cc b/ios/chrome/browser/notification_promo_unittest.cc
index 2b3718e..25b68ab 100644
--- a/ios/chrome/browser/notification_promo_unittest.cc
+++ b/ios/chrome/browser/notification_promo_unittest.cc
@@ -5,6 +5,7 @@
 #include <stddef.h>
 
 #include <memory>
+#include <utility>
 #include <vector>
 
 #include "base/json/json_reader.h"
@@ -303,14 +304,14 @@
     ntp_promo->SetInteger("views", views);
     ntp_promo->SetBoolean("closed", true);
 
-    base::ListValue* promo_list = new base::ListValue;
+    auto promo_list = base::MakeUnique<base::ListValue>();
     promo_list->Append(std::move(ntp_promo));
 
     std::string promo_list_key = "mobile_ntp_whats_new_promo";
     std::string promo_dict_key = "ios.ntppromo";
 
     base::DictionaryValue promo_dict;
-    promo_dict.Set(promo_list_key, promo_list);
+    promo_dict.Set(promo_list_key, std::move(promo_list));
     local_state_.Set(promo_dict_key, promo_dict);
 
     // Initialize promo and verify that its instance variables match the data
diff --git a/ios/chrome/browser/ui/webui/flags_ui.cc b/ios/chrome/browser/ui/webui/flags_ui.cc
index f9246df..67968c2 100644
--- a/ios/chrome/browser/ui/webui/flags_ui.cc
+++ b/ios/chrome/browser/ui/webui/flags_ui.cc
@@ -5,6 +5,7 @@
 #include "ios/chrome/browser/ui/webui/flags_ui.h"
 
 #include <string>
+#include <utility>
 
 #include "base/bind.h"
 #include "base/bind_helpers.h"
@@ -155,12 +156,12 @@
 
   base::DictionaryValue results;
 
-  std::unique_ptr<base::ListValue> supported_features(new base::ListValue);
-  std::unique_ptr<base::ListValue> unsupported_features(new base::ListValue);
+  auto supported_features = base::MakeUnique<base::ListValue>();
+  auto unsupported_features = base::MakeUnique<base::ListValue>();
   GetFlagFeatureEntries(flags_storage_.get(), access_, supported_features.get(),
                         unsupported_features.get());
-  results.Set(flags_ui::kSupportedFeatures, supported_features.release());
-  results.Set(flags_ui::kUnsupportedFeatures, unsupported_features.release());
+  results.Set(flags_ui::kSupportedFeatures, std::move(supported_features));
+  results.Set(flags_ui::kUnsupportedFeatures, std::move(unsupported_features));
   // Cannot restart the browser on iOS.
   results.SetBoolean(flags_ui::kNeedsRestart, false);
   results.SetBoolean(flags_ui::kShowOwnerWarning,
diff --git a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
index 164e4c11..b4d5214 100644
--- a/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
+++ b/ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.cc
@@ -4,6 +4,7 @@
 
 #include "ios/chrome/browser/ui/webui/sync_internals/sync_internals_message_handler.h"
 
+#include <utility>
 #include <vector>
 
 #include "base/logging.h"
@@ -125,7 +126,7 @@
        it.Inc()) {
     type_list->AppendString(ModelTypeToString(it.Get()));
   }
-  event_details.Set(syncer::sync_ui_util::kTypes, type_list.release());
+  event_details.Set(syncer::sync_ui_util::kTypes, std::move(type_list));
   web_ui()->CallJavascriptFunction(
       syncer::sync_ui_util::kDispatchEvent,
       base::Value(syncer::sync_ui_util::kOnReceivedListOfTypes), event_details);
@@ -192,7 +193,7 @@
   std::unique_ptr<base::DictionaryValue> details(new base::DictionaryValue());
   details->SetString(syncer::sync_ui_util::kModelType, ModelTypeToString(type));
   details->SetString(syncer::sync_ui_util::kCounterType, counter_type);
-  details->Set(syncer::sync_ui_util::kCounters, value.release());
+  details->Set(syncer::sync_ui_util::kCounters, std::move(value));
   web_ui()->CallJavascriptFunction(
       syncer::sync_ui_util::kDispatchEvent,
       base::Value(syncer::sync_ui_util::kOnCountersUpdated), *details);
diff --git a/ipc/ipc_message_unittest.cc b/ipc/ipc_message_unittest.cc
index 8e59e00..4e5bf07 100644
--- a/ipc/ipc_message_unittest.cc
+++ b/ipc/ipc_message_unittest.cc
@@ -10,6 +10,7 @@
 
 #include <limits>
 #include <memory>
+#include <utility>
 
 #include "base/memory/ptr_util.h"
 #include "base/strings/utf_string_conversions.h"
@@ -89,21 +90,21 @@
 TEST(IPCMessageTest, DictionaryValue) {
   base::DictionaryValue input;
   input.Set("null", base::MakeUnique<base::Value>());
-  input.Set("bool", new base::Value(true));
-  input.Set("int", new base::Value(42));
+  input.SetBoolean("bool", true);
+  input.SetInteger("int", 42);
   input.SetIntegerWithoutPathExpansion("int.with.dot", 43);
 
-  std::unique_ptr<base::DictionaryValue> subdict(new base::DictionaryValue());
-  subdict->Set("str", new base::Value("forty two"));
-  subdict->Set("bool", new base::Value(false));
+  auto subdict = base::MakeUnique<base::DictionaryValue>();
+  subdict->SetString("str", "forty two");
+  subdict->SetBoolean("bool", false);
 
-  std::unique_ptr<base::ListValue> sublist(new base::ListValue());
+  auto sublist = base::MakeUnique<base::ListValue>();
   sublist->AppendDouble(42.42);
   sublist->AppendString("forty");
   sublist->AppendString("two");
-  subdict->Set("list", sublist.release());
+  subdict->Set("list", std::move(sublist));
 
-  input.Set("dict", subdict.release());
+  input.Set("dict", std::move(subdict));
 
   IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
   IPC::WriteParam(&msg, input);
diff --git a/media/cast/logging/stats_event_subscriber.cc b/media/cast/logging/stats_event_subscriber.cc
index 3742b5e..f3e25f6f 100644
--- a/media/cast/logging/stats_event_subscriber.cc
+++ b/media/cast/logging/stats_event_subscriber.cc
@@ -10,6 +10,7 @@
 
 #include "base/format_macros.h"
 #include "base/logging.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/stringprintf.h"
 #include "base/values.h"
 
@@ -227,9 +228,9 @@
 std::unique_ptr<base::DictionaryValue> StatsEventSubscriber::GetStats() const {
   StatsMap stats_map;
   GetStatsInternal(&stats_map);
-  std::unique_ptr<base::DictionaryValue> ret(new base::DictionaryValue);
+  auto ret = base::MakeUnique<base::DictionaryValue>();
 
-  std::unique_ptr<base::DictionaryValue> stats(new base::DictionaryValue);
+  auto stats = base::MakeUnique<base::DictionaryValue>();
   for (StatsMap::const_iterator it = stats_map.begin(); it != stats_map.end();
        ++it) {
     // Round to 3 digits after the decimal point.
@@ -241,12 +242,11 @@
   for (HistogramMap::const_iterator it = histograms_.begin();
        it != histograms_.end();
        ++it) {
-    stats->Set(CastStatToString(it->first),
-               it->second->GetHistogram().release());
+    stats->Set(CastStatToString(it->first), it->second->GetHistogram());
   }
 
   ret->Set(event_media_type_ == AUDIO_EVENT ? "audio" : "video",
-           stats.release());
+           std::move(stats));
 
   return ret;
 }
diff --git a/media/cdm/json_web_key.cc b/media/cdm/json_web_key.cc
index fb70224..7431b8d4 100644
--- a/media/cdm/json_web_key.cc
+++ b/media/cdm/json_web_key.cc
@@ -7,6 +7,7 @@
 #include <stddef.h>
 
 #include <memory>
+#include <utility>
 
 #include "base/base64url.h"
 #include "base/json/json_reader.h"
@@ -14,6 +15,7 @@
 #include "base/json/string_escape.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
@@ -61,7 +63,7 @@
       base::StringPiece(reinterpret_cast<const char*>(key_id), key_id_length),
       base::Base64UrlEncodePolicy::OMIT_PADDING, &key_id_string);
 
-  std::unique_ptr<base::DictionaryValue> jwk(new base::DictionaryValue());
+  auto jwk = base::MakeUnique<base::DictionaryValue>();
   jwk->SetString(kKeyTypeTag, kKeyTypeOct);
   jwk->SetString(kKeyTag, key_string);
   jwk->SetString(kKeyIdTag, key_id_string);
@@ -73,10 +75,10 @@
                            const uint8_t* key_id,
                            int key_id_length) {
   // Create the JWK, and wrap it into a JWK Set.
-  std::unique_ptr<base::ListValue> list(new base::ListValue());
+  auto list = base::MakeUnique<base::ListValue>();
   list->Append(CreateJSONDictionary(key, key_length, key_id, key_id_length));
   base::DictionaryValue jwk_set;
-  jwk_set.Set(kKeysTag, list.release());
+  jwk_set.Set(kKeysTag, std::move(list));
 
   // Finally serialize |jwk_set| into a string and return it.
   std::string serialized_jwk;
@@ -87,7 +89,7 @@
 
 std::string GenerateJWKSet(const KeyIdAndKeyPairs& keys,
                            CdmSessionType session_type) {
-  std::unique_ptr<base::ListValue> list(new base::ListValue());
+  auto list = base::MakeUnique<base::ListValue>();
   for (const auto& key_pair : keys) {
     list->Append(CreateJSONDictionary(
         reinterpret_cast<const uint8_t*>(key_pair.second.data()),
@@ -97,7 +99,7 @@
   }
 
   base::DictionaryValue jwk_set;
-  jwk_set.Set(kKeysTag, list.release());
+  jwk_set.Set(kKeysTag, std::move(list));
   switch (session_type) {
     case CdmSessionType::TEMPORARY_SESSION:
       jwk_set.SetString(kTypeTag, kTemporarySession);
@@ -302,8 +304,8 @@
                           CdmSessionType session_type,
                           std::vector<uint8_t>* license) {
   // Create the license request.
-  std::unique_ptr<base::DictionaryValue> request(new base::DictionaryValue());
-  std::unique_ptr<base::ListValue> list(new base::ListValue());
+  auto request = base::MakeUnique<base::DictionaryValue>();
+  auto list = base::MakeUnique<base::ListValue>();
   for (const auto& key_id : key_ids) {
     std::string key_id_string;
     base::Base64UrlEncode(
@@ -313,7 +315,7 @@
 
     list->AppendString(key_id_string);
   }
-  request->Set(kKeyIdsTag, list.release());
+  request->Set(kKeyIdsTag, std::move(list));
 
   switch (session_type) {
     case CdmSessionType::TEMPORARY_SESSION:
@@ -340,9 +342,8 @@
 void CreateKeyIdsInitData(const KeyIdList& key_ids,
                           std::vector<uint8_t>* init_data) {
   // Create the init_data.
-  std::unique_ptr<base::DictionaryValue> dictionary(
-      new base::DictionaryValue());
-  std::unique_ptr<base::ListValue> list(new base::ListValue());
+  auto dictionary = base::MakeUnique<base::DictionaryValue>();
+  auto list = base::MakeUnique<base::ListValue>();
   for (const auto& key_id : key_ids) {
     std::string key_id_string;
     base::Base64UrlEncode(
@@ -352,7 +353,7 @@
 
     list->AppendString(key_id_string);
   }
-  dictionary->Set(kKeyIdsTag, list.release());
+  dictionary->Set(kKeyIdsTag, std::move(list));
 
   // Serialize the dictionary as a string.
   std::string json;
diff --git a/net/http/http_proxy_client_socket_pool.cc b/net/http/http_proxy_client_socket_pool.cc
index 7375920d..b267302 100644
--- a/net/http/http_proxy_client_socket_pool.cc
+++ b/net/http/http_proxy_client_socket_pool.cc
@@ -8,6 +8,7 @@
 #include <utility>
 
 #include "base/compiler_specific.h"
+#include "base/memory/ptr_util.h"
 #include "base/time/time.h"
 #include "base/values.h"
 #include "net/base/load_flags.h"
@@ -291,7 +292,7 @@
                                           bool include_nested_pools) const {
   std::unique_ptr<base::DictionaryValue> dict(base_.GetInfoAsValue(name, type));
   if (include_nested_pools) {
-    base::ListValue* list = new base::ListValue();
+    auto list = base::MakeUnique<base::ListValue>();
     if (transport_pool_) {
       list->Append(transport_pool_->GetInfoAsValue("transport_socket_pool",
                                                    "transport_socket_pool",
@@ -302,7 +303,7 @@
                                              "ssl_socket_pool",
                                              true));
     }
-    dict->Set("nested_pools", list);
+    dict->Set("nested_pools", std::move(list));
   }
   return dict;
 }
diff --git a/net/reporting/reporting_delivery_agent.cc b/net/reporting/reporting_delivery_agent.cc
index 3d42797f..fb12d03 100644
--- a/net/reporting/reporting_delivery_agent.cc
+++ b/net/reporting/reporting_delivery_agent.cc
@@ -41,7 +41,7 @@
     report_value->SetInteger("age", (now - report->queued).InMilliseconds());
     report_value->SetString("type", report->type);
     report_value->SetString("url", report->url.spec());
-    report_value->Set("report", report->body->DeepCopy());
+    report_value->Set("report", base::MakeUnique<base::Value>(*report->body));
 
     reports_value.Append(std::move(report_value));
   }
diff --git a/net/test/spawned_test_server/base_test_server.cc b/net/test/spawned_test_server/base_test_server.cc
index ab46afb..5ad64cd 100644
--- a/net/test/spawned_test_server/base_test_server.cc
+++ b/net/test/spawned_test_server/base_test_server.cc
@@ -85,18 +85,18 @@
     values->AppendString("aes128gcm");
 }
 
-base::Value* GetTLSIntoleranceType(
+std::unique_ptr<base::Value> GetTLSIntoleranceType(
     BaseTestServer::SSLOptions::TLSIntoleranceType type) {
   switch (type) {
     case BaseTestServer::SSLOptions::TLS_INTOLERANCE_ALERT:
-      return new base::Value("alert");
+      return base::MakeUnique<base::Value>("alert");
     case BaseTestServer::SSLOptions::TLS_INTOLERANCE_CLOSE:
-      return new base::Value("close");
+      return base::MakeUnique<base::Value>("close");
     case BaseTestServer::SSLOptions::TLS_INTOLERANCE_RESET:
-      return new base::Value("reset");
+      return base::MakeUnique<base::Value>("reset");
     default:
       NOTREACHED();
-      return new base::Value("");
+      return base::MakeUnique<base::Value>("");
   }
 }
 
diff --git a/printing/print_settings_conversion.cc b/printing/print_settings_conversion.cc
index 7e8840cd..8f9bd3f 100644
--- a/printing/print_settings_conversion.cc
+++ b/printing/print_settings_conversion.cc
@@ -12,6 +12,7 @@
 #include <string>
 #include <utility>
 
+#include "base/memory/ptr_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/utf_string_conversions.h"
 #include "base/time/time.h"
@@ -44,32 +45,32 @@
 void SetMarginsToJobSettings(const std::string& json_path,
                              const PageMargins& margins,
                              base::DictionaryValue* job_settings) {
-  base::DictionaryValue* dict = new base::DictionaryValue;
-  job_settings->Set(json_path, dict);
+  auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger(kSettingMarginTop, margins.top);
   dict->SetInteger(kSettingMarginBottom, margins.bottom);
   dict->SetInteger(kSettingMarginLeft, margins.left);
   dict->SetInteger(kSettingMarginRight, margins.right);
+  job_settings->Set(json_path, std::move(dict));
 }
 
 void SetSizeToJobSettings(const std::string& json_path,
                           const gfx::Size& size,
                           base::DictionaryValue* job_settings) {
-  base::DictionaryValue* dict = new base::DictionaryValue;
-  job_settings->Set(json_path, dict);
+  auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger("width", size.width());
   dict->SetInteger("height", size.height());
+  job_settings->Set(json_path, std::move(dict));
 }
 
 void SetRectToJobSettings(const std::string& json_path,
                           const gfx::Rect& rect,
                           base::DictionaryValue* job_settings) {
-  base::DictionaryValue* dict = new base::DictionaryValue;
-  job_settings->Set(json_path, dict);
+  auto dict = base::MakeUnique<base::DictionaryValue>();
   dict->SetInteger("x", rect.x());
   dict->SetInteger("y", rect.y());
   dict->SetInteger("width", rect.width());
   dict->SetInteger("height", rect.height());
+  job_settings->Set(json_path, std::move(dict));
 }
 
 }  // namespace
@@ -229,14 +230,14 @@
                            settings.selection_only());
   job_settings->SetInteger(kSettingMarginsType, settings.margin_type());
   if (!settings.ranges().empty()) {
-    base::ListValue* page_range_array = new base::ListValue;
-    job_settings->Set(kSettingPageRange, page_range_array);
+    auto page_range_array = base::MakeUnique<base::ListValue>();
     for (size_t i = 0; i < settings.ranges().size(); ++i) {
-      std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue);
+      auto dict = base::MakeUnique<base::DictionaryValue>();
       dict->SetInteger(kSettingPageRangeFrom, settings.ranges()[i].from + 1);
       dict->SetInteger(kSettingPageRangeTo, settings.ranges()[i].to + 1);
       page_range_array->Append(std::move(dict));
     }
+    job_settings->Set(kSettingPageRange, std::move(page_range_array));
   }
 
   job_settings->SetBoolean(kSettingCollate, settings.collate());
@@ -248,24 +249,26 @@
 
   // Following values are not read form JSON by InitSettings, so do not have
   // common public constants. So just serialize in "debug" section.
-  base::DictionaryValue* debug = new base::DictionaryValue;
-  job_settings->Set("debug", debug);
+  auto debug = base::MakeUnique<base::DictionaryValue>();
   debug->SetInteger("dpi", settings.dpi());
   debug->SetInteger("deviceUnitsPerInch", settings.device_units_per_inch());
   debug->SetBoolean("support_alpha_blend", settings.should_print_backgrounds());
   debug->SetString("media_vendor_id", settings.requested_media().vendor_id);
-  SetSizeToJobSettings(
-      "media_size", settings.requested_media().size_microns, debug);
+  SetSizeToJobSettings("media_size", settings.requested_media().size_microns,
+                       debug.get());
   SetMarginsToJobSettings("requested_custom_margins_in_points",
                           settings.requested_custom_margins_in_points(),
-                          debug);
+                          debug.get());
   const PageSetup& page_setup = settings.page_setup_device_units();
-  SetMarginsToJobSettings(
-      "effective_margins", page_setup.effective_margins(), debug);
-  SetSizeToJobSettings("physical_size", page_setup.physical_size(), debug);
-  SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug);
-  SetRectToJobSettings("content_area", page_setup.content_area(), debug);
-  SetRectToJobSettings("printable_area", page_setup.printable_area(), debug);
+  SetMarginsToJobSettings("effective_margins", page_setup.effective_margins(),
+                          debug.get());
+  SetSizeToJobSettings("physical_size", page_setup.physical_size(),
+                       debug.get());
+  SetRectToJobSettings("overlay_area", page_setup.overlay_area(), debug.get());
+  SetRectToJobSettings("content_area", page_setup.content_area(), debug.get());
+  SetRectToJobSettings("printable_area", page_setup.printable_area(),
+                       debug.get());
+  job_settings->Set("debug", std::move(debug));
 }
 
 }  // namespace printing
diff --git a/remoting/client/plugin/chromoting_instance.cc b/remoting/client/plugin/chromoting_instance.cc
index ecaa19a3..95c0fe4 100644
--- a/remoting/client/plugin/chromoting_instance.cc
+++ b/remoting/client/plugin/chromoting_instance.cc
@@ -360,7 +360,7 @@
   }
 
   std::unique_ptr<base::DictionaryValue> data(new base::DictionaryValue());
-  data->Set("rects", rects_value.release());
+  data->Set("rects", std::move(rects_value));
   PostLegacyJsonMessage("onDebugRegion", std::move(data));
 }
 
@@ -1002,7 +1002,7 @@
     std::unique_ptr<base::DictionaryValue> data) {
   base::DictionaryValue message;
   message.SetString("method", method);
-  message.Set("data", data.release());
+  message.Set("data", std::move(data));
 
   std::string message_json;
   base::JSONWriter::Write(message, &message_json);
diff --git a/remoting/host/it2me/it2me_native_messaging_host.cc b/remoting/host/it2me/it2me_native_messaging_host.cc
index b824c1b..bee792e0 100644
--- a/remoting/host/it2me/it2me_native_messaging_host.cc
+++ b/remoting/host/it2me/it2me_native_messaging_host.cc
@@ -13,6 +13,7 @@
 #include "base/callback_helpers.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
+#include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
@@ -133,7 +134,7 @@
   // might be a string or a number, so cope with both.
   const base::Value* id;
   if (message_dict->Get("id", &id))
-    response->Set("id", id->CreateDeepCopy());
+    response->Set("id", base::MakeUnique<base::Value>(*id));
 
   std::string type;
   if (!message_dict->GetString("type", &type)) {
@@ -183,9 +184,7 @@
   response->SetString("version", STRINGIZE(VERSION));
 
   // This list will be populated when new features are added.
-  std::unique_ptr<base::ListValue> supported_features_list(
-      new base::ListValue());
-  response->Set("supportedFeatures", supported_features_list.release());
+  response->Set("supportedFeatures", base::MakeUnique<base::ListValue>());
 
   SendMessageToClient(std::move(response));
 }
diff --git a/remoting/host/security_key/security_key_extension_session.cc b/remoting/host/security_key/security_key_extension_session.cc
index 966204d..bdaa7b8 100644
--- a/remoting/host/security_key/security_key_extension_session.cc
+++ b/remoting/host/security_key/security_key_extension_session.cc
@@ -4,11 +4,14 @@
 
 #include "remoting/host/security_key/security_key_extension_session.h"
 
+#include <utility>
+
 #include "base/bind.h"
 #include "base/json/json_reader.h"
 #include "base/json/json_writer.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/single_thread_task_runner.h"
 #include "base/values.h"
 #include "remoting/base/logging.h"
@@ -187,11 +190,11 @@
   request.SetString(kMessageType, kDataMessage);
   request.SetInteger(kConnectionId, connection_id);
 
-  std::unique_ptr<base::ListValue> bytes(new base::ListValue());
+  auto bytes = base::MakeUnique<base::ListValue>();
   for (std::string::const_iterator i = data.begin(); i != data.end(); ++i) {
     bytes->AppendInteger(static_cast<unsigned char>(*i));
   }
-  request.Set(kDataPayload, bytes.release());
+  request.Set(kDataPayload, std::move(bytes));
 
   std::string request_json;
   CHECK(base::JSONWriter::Write(request, &request_json));
diff --git a/remoting/host/setup/me2me_native_messaging_host.cc b/remoting/host/setup/me2me_native_messaging_host.cc
index 79db06a3..544945f 100644
--- a/remoting/host/setup/me2me_native_messaging_host.cc
+++ b/remoting/host/setup/me2me_native_messaging_host.cc
@@ -96,7 +96,7 @@
 void Me2MeNativeMessagingHost::OnMessage(const std::string& message) {
   DCHECK(task_runner()->BelongsToCurrentThread());
 
-  std::unique_ptr<base::DictionaryValue> response(new base::DictionaryValue());
+  auto response = base::MakeUnique<base::DictionaryValue>();
   std::unique_ptr<base::Value> message_value = base::JSONReader::Read(message);
   if (!message_value->IsType(base::Value::Type::DICTIONARY)) {
     OnError("Received a message that's not a dictionary.");
@@ -110,7 +110,7 @@
   // might be a string or a number, so cope with both.
   const base::Value* id;
   if (message_dict->Get("id", &id))
-    response->Set("id", id->CreateDeepCopy());
+    response->Set("id", base::MakeUnique<base::Value>(*id));
 
   std::string type;
   if (!message_dict->GetString("type", &type)) {
@@ -181,7 +181,7 @@
       new base::ListValue());
   supported_features_list->AppendStrings(std::vector<std::string>(
       kSupportedFeatures, kSupportedFeatures + arraysize(kSupportedFeatures)));
-  response->Set("supportedFeatures", supported_features_list.release());
+  response->Set("supportedFeatures", std::move(supported_features_list));
   SendMessageToClient(std::move(response));
 }
 
@@ -456,7 +456,7 @@
   DCHECK(task_runner()->BelongsToCurrentThread());
 
   if (config) {
-    response->Set("config", config.release());
+    response->Set("config", std::move(config));
   } else {
     response->Set("config", base::MakeUnique<base::Value>());
   }
@@ -468,7 +468,7 @@
     std::unique_ptr<base::ListValue> pairings) {
   DCHECK(task_runner()->BelongsToCurrentThread());
 
-  response->Set("pairedClients", pairings.release());
+  response->Set("pairedClients", std::move(pairings));
   SendMessageToClient(std::move(response));
 }
 
diff --git a/rlz/chromeos/lib/rlz_value_store_chromeos.cc b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
index 65b5634..1de9f693 100644
--- a/rlz/chromeos/lib/rlz_value_store_chromeos.cc
+++ b/rlz/chromeos/lib/rlz_value_store_chromeos.cc
@@ -250,8 +250,8 @@
                                            std::unique_ptr<base::Value> value) {
   base::ListValue* list_value = NULL;
   if (!rlz_store_->GetList(list_name, &list_value)) {
-    list_value = new base::ListValue;
-    rlz_store_->Set(list_name, list_value);
+    list_value =
+        rlz_store_->SetList(list_name, base::MakeUnique<base::ListValue>());
   }
   list_value->AppendIfNotPresent(std::move(value));
   return true;
diff --git a/services/preferences/tracked/dictionary_hash_store_contents.cc b/services/preferences/tracked/dictionary_hash_store_contents.cc
index 3cef69b0..2901657e 100644
--- a/services/preferences/tracked/dictionary_hash_store_contents.cc
+++ b/services/preferences/tracked/dictionary_hash_store_contents.cc
@@ -7,6 +7,7 @@
 #include "base/callback.h"
 #include "base/logging.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 #include "components/pref_registry/pref_registry_syncable.h"
 #include "components/prefs/persistent_pref_store.h"
@@ -94,7 +95,7 @@
 void DictionaryHashStoreContents::ImportEntry(const std::string& path,
                                               const base::Value* in_value) {
   base::DictionaryValue* macs_dict = GetMutableContents(true);
-  macs_dict->Set(path, in_value->DeepCopy());
+  macs_dict->Set(path, base::MakeUnique<base::Value>(*in_value));
 }
 
 bool DictionaryHashStoreContents::RemoveEntry(const std::string& path) {
@@ -126,8 +127,8 @@
   base::DictionaryValue* macs_dict = NULL;
   storage_->GetDictionary(kPreferenceMACs, &macs_dict);
   if (!macs_dict && create_if_null) {
-    macs_dict = new base::DictionaryValue;
-    storage_->Set(kPreferenceMACs, macs_dict);
+    macs_dict = storage_->SetDictionary(
+        kPreferenceMACs, base::MakeUnique<base::DictionaryValue>());
   }
   return macs_dict;
 }
diff --git a/services/preferences/tracked/pref_hash_calculator_unittest.cc b/services/preferences/tracked/pref_hash_calculator_unittest.cc
index df3746a..0dc97651 100644
--- a/services/preferences/tracked/pref_hash_calculator_unittest.cc
+++ b/services/preferences/tracked/pref_hash_calculator_unittest.cc
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include <string>
+#include <utility>
 
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
@@ -18,7 +19,8 @@
   base::Value string_value_2("string value 2");
   base::DictionaryValue dictionary_value_1;
   dictionary_value_1.SetInteger("int value", 1);
-  dictionary_value_1.Set("nested empty map", new base::DictionaryValue);
+  dictionary_value_1.Set("nested empty map",
+                         base::MakeUnique<base::DictionaryValue>());
   base::DictionaryValue dictionary_value_1_equivalent;
   dictionary_value_1_equivalent.SetInteger("int value", 1);
   base::DictionaryValue dictionary_value_2;
@@ -77,34 +79,33 @@
   static const char kDeviceId[] = "test_device_id1";
 
   auto null_value = base::MakeUnique<base::Value>();
-  std::unique_ptr<base::Value> bool_value(new base::Value(false));
-  std::unique_ptr<base::Value> int_value(new base::Value(1234567890));
-  std::unique_ptr<base::Value> double_value(new base::Value(123.0987654321));
-  std::unique_ptr<base::Value> string_value(
-      new base::Value("testing with special chars:\n<>{}:^^@#$\\/"));
+  auto bool_value = base::MakeUnique<base::Value>(false);
+  auto int_value = base::MakeUnique<base::Value>(1234567890);
+  auto double_value = base::MakeUnique<base::Value>(123.0987654321);
+  auto string_value = base::MakeUnique<base::Value>(
+      "testing with special chars:\n<>{}:^^@#$\\/");
 
   // For legacy reasons, we have to support pruning of empty lists/dictionaries
   // and nested empty ists/dicts in the hash generation algorithm.
-  std::unique_ptr<base::DictionaryValue> nested_empty_dict(
-      new base::DictionaryValue);
-  nested_empty_dict->Set("a", new base::DictionaryValue);
-  nested_empty_dict->Set("b", new base::ListValue);
-  std::unique_ptr<base::ListValue> nested_empty_list(new base::ListValue);
+  auto nested_empty_dict = base::MakeUnique<base::DictionaryValue>();
+  nested_empty_dict->Set("a", base::MakeUnique<base::DictionaryValue>());
+  nested_empty_dict->Set("b", base::MakeUnique<base::ListValue>());
+  auto nested_empty_list = base::MakeUnique<base::ListValue>();
   nested_empty_list->Append(base::MakeUnique<base::DictionaryValue>());
   nested_empty_list->Append(base::MakeUnique<base::ListValue>());
-  nested_empty_list->Append(nested_empty_dict->CreateDeepCopy());
+  nested_empty_list->Append(base::MakeUnique<base::Value>(*nested_empty_dict));
 
   // A dictionary with an empty dictionary, an empty list, and nested empty
   // dictionaries/lists in it.
-  std::unique_ptr<base::DictionaryValue> dict_value(new base::DictionaryValue);
-  dict_value->Set("a", new base::Value("foo"));
-  dict_value->Set("d", new base::ListValue);
-  dict_value->Set("b", new base::DictionaryValue);
-  dict_value->Set("c", new base::Value("baz"));
-  dict_value->Set("e", nested_empty_dict.release());
-  dict_value->Set("f", nested_empty_list.release());
+  auto dict_value = base::MakeUnique<base::DictionaryValue>();
+  dict_value->SetString("a", "foo");
+  dict_value->Set("d", base::MakeUnique<base::ListValue>());
+  dict_value->Set("b", base::MakeUnique<base::DictionaryValue>());
+  dict_value->SetString("c", "baz");
+  dict_value->Set("e", std::move(nested_empty_dict));
+  dict_value->Set("f", std::move(nested_empty_list));
 
-  std::unique_ptr<base::ListValue> list_value(new base::ListValue);
+  auto list_value = base::MakeUnique<base::ListValue>();
   list_value->AppendBoolean(true);
   list_value->AppendInteger(100);
   list_value->AppendDouble(1.0);
@@ -166,13 +167,13 @@
 
   // Also test every value type together in the same dictionary.
   base::DictionaryValue everything;
-  everything.Set("null", null_value.release());
-  everything.Set("bool", bool_value.release());
-  everything.Set("int", int_value.release());
-  everything.Set("double", double_value.release());
-  everything.Set("string", string_value.release());
-  everything.Set("list", list_value.release());
-  everything.Set("dict", dict_value.release());
+  everything.Set("null", std::move(null_value));
+  everything.Set("bool", std::move(bool_value));
+  everything.Set("int", std::move(int_value));
+  everything.Set("double", std::move(double_value));
+  everything.Set("string", std::move(string_value));
+  everything.Set("list", std::move(list_value));
+  everything.Set("dict", std::move(dict_value));
   static const char kExpectedEverythingValue[] =
       "B97D09BE7005693574DCBDD03D8D9E44FB51F4008B73FB56A49A9FA671A1999B";
   EXPECT_EQ(PrefHashCalculator::VALID,
diff --git a/services/preferences/tracked/pref_hash_filter.cc b/services/preferences/tracked/pref_hash_filter.cc
index 29d6b9a..a0b94df 100644
--- a/services/preferences/tracked/pref_hash_filter.cc
+++ b/services/preferences/tracked/pref_hash_filter.cc
@@ -243,9 +243,9 @@
   }
 
   if (did_reset) {
-    pref_store_contents->Set(user_prefs::kPreferenceResetTime,
-                             new base::Value(base::Int64ToString(
-                                 base::Time::Now().ToInternalValue())));
+    pref_store_contents->SetString(
+        user_prefs::kPreferenceResetTime,
+        base::Int64ToString(base::Time::Now().ToInternalValue()));
     FilterUpdate(user_prefs::kPreferenceResetTime);
 
     if (reset_on_load_observer_)
diff --git a/services/preferences/tracked/pref_hash_filter_unittest.cc b/services/preferences/tracked/pref_hash_filter_unittest.cc
index f46d9a6..b1e0258c 100644
--- a/services/preferences/tracked/pref_hash_filter_unittest.cc
+++ b/services/preferences/tracked/pref_hash_filter_unittest.cc
@@ -684,9 +684,7 @@
 
 TEST_P(PrefHashFilterTest, FilterTrackedPrefUpdate) {
   base::DictionaryValue root_dict;
-  // Ownership of |string_value| is transfered to |root_dict|.
-  base::Value* string_value = new base::Value("string value");
-  root_dict.Set(kAtomicPref, string_value);
+  base::Value* string_value = root_dict.SetString(kAtomicPref, "string value");
 
   // No path should be stored on FilterUpdate.
   pref_hash_filter_->FilterUpdate(kAtomicPref);
@@ -742,11 +740,10 @@
 
 TEST_P(PrefHashFilterTest, FilterSplitPrefUpdate) {
   base::DictionaryValue root_dict;
-  // Ownership of |dict_value| is transfered to |root_dict|.
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  base::DictionaryValue* dict_value = root_dict.SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
-  root_dict.Set(kSplitPref, dict_value);
 
   // No path should be stored on FilterUpdate.
   pref_hash_filter_->FilterUpdate(kSplitPref);
@@ -766,7 +763,7 @@
 
 TEST_P(PrefHashFilterTest, FilterUntrackedPrefUpdate) {
   base::DictionaryValue root_dict;
-  root_dict.Set("untracked", new base::Value("some value"));
+  root_dict.SetString("untracked", "some value");
   pref_hash_filter_->FilterUpdate("untracked");
 
   // No paths should be stored on FilterUpdate.
@@ -783,18 +780,13 @@
 
 TEST_P(PrefHashFilterTest, MultiplePrefsFilterSerializeData) {
   base::DictionaryValue root_dict;
-  // Ownership of the following values is transfered to |root_dict|.
-  base::Value* int_value1 = new base::Value(1);
-  base::Value* int_value2 = new base::Value(2);
-  base::Value* int_value3 = new base::Value(3);
-  base::Value* int_value4 = new base::Value(4);
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
-  dict_value->Set("a", new base::Value(true));
-  root_dict.Set(kAtomicPref, int_value1);
-  root_dict.Set(kAtomicPref2, int_value2);
-  root_dict.Set(kAtomicPref3, int_value3);
-  root_dict.Set("untracked", int_value4);
-  root_dict.Set(kSplitPref, dict_value);
+  base::Value* int_value1 = root_dict.SetInteger(kAtomicPref, 1);
+  root_dict.SetInteger(kAtomicPref2, 2);
+  root_dict.SetInteger(kAtomicPref3, 3);
+  root_dict.SetInteger("untracked", 4);
+  base::DictionaryValue* dict_value = root_dict.SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
+  dict_value->SetBoolean("a", true);
 
   // Only update kAtomicPref, kAtomicPref3, and kSplitPref.
   pref_hash_filter_->FilterUpdate(kAtomicPref);
@@ -803,8 +795,7 @@
   ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
 
   // Update kAtomicPref3 again, nothing should be stored still.
-  base::Value* int_value5 = new base::Value(5);
-  root_dict.Set(kAtomicPref3, int_value5);
+  base::Value* int_value5 = root_dict.SetInteger(kAtomicPref3, 5);
   ASSERT_EQ(0u, mock_pref_hash_store_->stored_paths_count());
 
   // On FilterSerializeData, only kAtomicPref, kAtomicPref3, and kSplitPref
@@ -872,14 +863,13 @@
 }
 
 TEST_P(PrefHashFilterTest, InitialValueUnknown) {
-  // Ownership of these values is transfered to |pref_store_contents_|.
-  base::Value* string_value = new base::Value("string value");
-  pref_store_contents_->Set(kAtomicPref, string_value);
+  base::Value* string_value =
+      pref_store_contents_->SetString(kAtomicPref, "string value");
 
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
-  pref_store_contents_->Set(kSplitPref, dict_value);
 
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
   ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
@@ -938,14 +928,13 @@
 }
 
 TEST_P(PrefHashFilterTest, InitialValueTrustedUnknown) {
-  // Ownership of this value is transfered to |pref_store_contents_|.
-  base::Value* string_value = new base::Value("test");
-  pref_store_contents_->Set(kAtomicPref, string_value);
+  base::Value* string_value =
+      pref_store_contents_->SetString(kAtomicPref, "test");
 
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  auto* dict_value = pref_store_contents_->SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
-  pref_store_contents_->Set(kSplitPref, dict_value);
 
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
   ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
@@ -988,16 +977,14 @@
 }
 
 TEST_P(PrefHashFilterTest, InitialValueChanged) {
-  // Ownership of this value is transfered to |pref_store_contents_|.
-  base::Value* int_value = new base::Value(1234);
-  pref_store_contents_->Set(kAtomicPref, int_value);
+  base::Value* int_value = pref_store_contents_->SetInteger(kAtomicPref, 1234);
 
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
   dict_value->SetInteger("c", 56);
   dict_value->SetBoolean("d", false);
-  pref_store_contents_->Set(kSplitPref, dict_value);
 
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
   ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
@@ -1098,14 +1085,13 @@
 }
 
 TEST_P(PrefHashFilterTest, InitialValueUnchangedLegacyId) {
-  // Ownership of these values is transfered to |pref_store_contents_|.
-  base::Value* string_value = new base::Value("string value");
-  pref_store_contents_->Set(kAtomicPref, string_value);
+  base::Value* string_value =
+      pref_store_contents_->SetString(kAtomicPref, "string value");
 
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  base::DictionaryValue* dict_value = pref_store_contents_->SetDictionary(
+      kSplitPref, base::MakeUnique<base::DictionaryValue>());
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
-  pref_store_contents_->Set(kSplitPref, dict_value);
 
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
   ASSERT_TRUE(pref_store_contents_->Get(kSplitPref, NULL));
@@ -1152,16 +1138,14 @@
 }
 
 TEST_P(PrefHashFilterTest, DontResetReportOnly) {
-  // Ownership of these values is transfered to |pref_store_contents_|.
-  base::Value* int_value1 = new base::Value(1);
-  base::Value* int_value2 = new base::Value(2);
-  base::Value* report_only_val = new base::Value(3);
-  base::DictionaryValue* report_only_split_val = new base::DictionaryValue;
+  base::Value* int_value1 = pref_store_contents_->SetInteger(kAtomicPref, 1);
+  base::Value* int_value2 = pref_store_contents_->SetInteger(kAtomicPref2, 2);
+  base::Value* report_only_val =
+      pref_store_contents_->SetInteger(kReportOnlyPref, 3);
+  base::DictionaryValue* report_only_split_val =
+      pref_store_contents_->SetDictionary(
+          kReportOnlySplitPref, base::MakeUnique<base::DictionaryValue>());
   report_only_split_val->SetInteger("a", 1234);
-  pref_store_contents_->Set(kAtomicPref, int_value1);
-  pref_store_contents_->Set(kAtomicPref2, int_value2);
-  pref_store_contents_->Set(kReportOnlyPref, report_only_val);
-  pref_store_contents_->Set(kReportOnlySplitPref, report_only_split_val);
 
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref, NULL));
   ASSERT_TRUE(pref_store_contents_->Get(kAtomicPref2, NULL));
@@ -1226,14 +1210,11 @@
 
 TEST_P(PrefHashFilterTest, CallFilterSerializeDataCallbacks) {
   base::DictionaryValue root_dict;
-  // Ownership of the following values is transfered to |root_dict|.
-  base::Value* int_value1 = new base::Value(1);
-  base::Value* int_value2 = new base::Value(2);
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
-  dict_value->Set("a", new base::Value(true));
-  root_dict.Set(kAtomicPref, int_value1);
-  root_dict.Set(kAtomicPref2, int_value2);
-  root_dict.Set(kSplitPref, dict_value);
+  auto dict_value = base::MakeUnique<base::DictionaryValue>();
+  dict_value->SetBoolean("a", true);
+  root_dict.SetInteger(kAtomicPref, 1);
+  root_dict.SetInteger(kAtomicPref2, 2);
+  root_dict.Set(kSplitPref, std::move(dict_value));
 
   // Skip updating kAtomicPref2.
   pref_hash_filter_->FilterUpdate(kAtomicPref);
@@ -1275,9 +1256,7 @@
 
 TEST_P(PrefHashFilterTest, CallFilterSerializeDataCallbacksWithFailure) {
   base::DictionaryValue root_dict;
-  // Ownership of the following values is transfered to |root_dict|.
-  base::Value* int_value1 = new base::Value(1);
-  root_dict.Set(kAtomicPref, int_value1);
+  root_dict.SetInteger(kAtomicPref, 1);
 
   // Only update kAtomicPref.
   pref_hash_filter_->FilterUpdate(kAtomicPref);
@@ -1303,16 +1282,14 @@
 }
 
 TEST_P(PrefHashFilterTest, ExternalValidationValueChanged) {
-  // Ownership of this value is transfered to |pref_store_contents_|.
-  base::Value* int_value = new base::Value(1234);
-  pref_store_contents_->Set(kAtomicPref, int_value);
+  pref_store_contents_->SetInteger(kAtomicPref, 1234);
 
-  base::DictionaryValue* dict_value = new base::DictionaryValue;
+  auto dict_value = base::MakeUnique<base::DictionaryValue>();
   dict_value->SetString("a", "foo");
   dict_value->SetInteger("b", 1234);
   dict_value->SetInteger("c", 56);
   dict_value->SetBoolean("d", false);
-  pref_store_contents_->Set(kSplitPref, dict_value);
+  pref_store_contents_->Set(kSplitPref, std::move(dict_value));
 
   mock_external_validation_pref_hash_store_->SetCheckResult(
       kAtomicPref, ValueState::CHANGED);
diff --git a/services/preferences/tracked/pref_hash_store_impl_unittest.cc b/services/preferences/tracked/pref_hash_store_impl_unittest.cc
index 3c6ca13..18014a8 100644
--- a/services/preferences/tracked/pref_hash_store_impl_unittest.cc
+++ b/services/preferences/tracked/pref_hash_store_impl_unittest.cc
@@ -51,8 +51,8 @@
 
 TEST_F(PrefHashStoreImplTest, ComputeSplitMacs) {
   base::DictionaryValue dict;
-  dict.Set("a", new base::Value("string1"));
-  dict.Set("b", new base::Value("string2"));
+  dict.SetString("a", "string1");
+  dict.SetString("b", "string2");
   PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
 
   std::unique_ptr<base::DictionaryValue> computed_macs =
@@ -96,10 +96,10 @@
     EXPECT_EQ(ValueState::CHANGED, transaction->CheckValue("path1", &string_2));
 
     base::DictionaryValue dict;
-    dict.Set("a", new base::Value("foo"));
-    dict.Set("d", new base::Value("bad"));
-    dict.Set("b", new base::Value("bar"));
-    dict.Set("c", new base::Value("baz"));
+    dict.SetString("a", "foo");
+    dict.SetString("d", "bad");
+    dict.SetString("b", "bar");
+    dict.SetString("c", "baz");
 
     transaction->StoreHash("path1", &dict);
     EXPECT_EQ(ValueState::UNCHANGED, transaction->CheckValue("path1", &dict));
@@ -311,14 +311,14 @@
 
 TEST_F(PrefHashStoreImplTest, SplitHashStoreAndCheck) {
   base::DictionaryValue dict;
-  dict.Set("a", new base::Value("to be replaced"));
-  dict.Set("b", new base::Value("same"));
-  dict.Set("o", new base::Value("old"));
+  dict.SetString("a", "to be replaced");
+  dict.SetString("b", "same");
+  dict.SetString("o", "old");
 
   base::DictionaryValue modified_dict;
-  modified_dict.Set("a", new base::Value("replaced"));
-  modified_dict.Set("b", new base::Value("same"));
-  modified_dict.Set("c", new base::Value("new"));
+  modified_dict.SetString("a", "replaced");
+  modified_dict.SetString("b", "same");
+  modified_dict.SetString("c", "new");
 
   base::DictionaryValue empty_dict;
 
@@ -428,7 +428,7 @@
 
     // Store hashes for a random dict to be overwritten below.
     base::DictionaryValue initial_dict;
-    initial_dict.Set("a", new base::Value("foo"));
+    initial_dict.SetString("a", "foo");
     transaction->StoreSplitHash("path1", &initial_dict);
 
     // Verify stored empty dictionary matches NULL and empty dictionary back.
@@ -461,8 +461,8 @@
         pref_hash_store2.BeginTransaction(GetHashStoreContents()));
 
     base::DictionaryValue tested_dict;
-    tested_dict.Set("a", new base::Value("foo"));
-    tested_dict.Set("b", new base::Value("bar"));
+    tested_dict.SetString("a", "foo");
+    tested_dict.SetString("b", "bar");
     EXPECT_EQ(
         ValueState::TRUSTED_UNKNOWN_VALUE,
         transaction->CheckSplitValue("new_path", &tested_dict, &invalid_keys));
@@ -480,10 +480,10 @@
   base::Value string("string1");
 
   base::DictionaryValue dict;
-  dict.Set("a", new base::Value("foo"));
-  dict.Set("d", new base::Value("bad"));
-  dict.Set("b", new base::Value("bar"));
-  dict.Set("c", new base::Value("baz"));
+  dict.SetString("a", "foo");
+  dict.SetString("d", "bad");
+  dict.SetString("b", "bar");
+  dict.SetString("c", "baz");
 
   {
     PrefHashStoreImpl pref_hash_store(std::string(32, 0), "device_id", true);
diff --git a/services/preferences/tracked/tracked_preferences_migration.cc b/services/preferences/tracked/tracked_preferences_migration.cc
index f2af336..61a0c80 100644
--- a/services/preferences/tracked/tracked_preferences_migration.cc
+++ b/services/preferences/tracked/tracked_preferences_migration.cc
@@ -9,6 +9,7 @@
 #include "base/bind.h"
 #include "base/callback.h"
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
 #include "base/memory/ref_counted.h"
 #include "base/metrics/histogram.h"
 #include "base/values.h"
@@ -164,7 +165,8 @@
         // |new_store| having equivalently been successfully flushed to disk
         // (e.g., on crash or in cases where |new_store| is read-only following
         // a read error on startup).
-        new_store->Set(pref_name, value_in_old_store->DeepCopy());
+        new_store->Set(pref_name,
+                       base::MakeUnique<base::Value>(*value_in_old_store));
         migrated_value = true;
         *new_store_altered = true;
       }
diff --git a/skia/ext/benchmarking_canvas.cc b/skia/ext/benchmarking_canvas.cc
index da63a1a..1f46938 100644
--- a/skia/ext/benchmarking_canvas.cc
+++ b/skia/ext/benchmarking_canvas.cc
@@ -379,24 +379,23 @@
 public:
   // AutoOp objects are always scoped within draw call frames,
   // so the paint is guaranteed to be valid for their lifetime.
-  AutoOp(BenchmarkingCanvas* canvas, const char op_name[],
-         const SkPaint* paint = nullptr)
-      : canvas_(canvas)
-      , op_record_(new base::DictionaryValue())
-      , op_params_(new base::ListValue()) {
+ AutoOp(BenchmarkingCanvas* canvas,
+        const char op_name[],
+        const SkPaint* paint = nullptr)
+     : canvas_(canvas), op_record_(new base::DictionaryValue()) {
+   DCHECK(canvas);
+   DCHECK(op_name);
 
-    DCHECK(canvas);
-    DCHECK(op_name);
+   op_record_->SetString("cmd_string", op_name);
+   op_params_ =
+       op_record_->SetList("info", base::MakeUnique<base::ListValue>());
 
-    op_record_->SetString("cmd_string", op_name);
-    op_record_->Set("info", op_params_);
+   if (paint) {
+     this->addParam("paint", AsValue(*paint));
+     filtered_paint_ = *paint;
+   }
 
-    if (paint) {
-      this->addParam("paint", AsValue(*paint));
-      filtered_paint_ = *paint;
-    }
-
-    start_ticks_ = base::TimeTicks::Now();
+   start_ticks_ = base::TimeTicks::Now();
   }
 
   ~AutoOp() {
diff --git a/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py b/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py
index 6a39167c..ba9ad54 100755
--- a/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py
+++ b/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py
@@ -32,6 +32,7 @@
     assert [] == proto_file.GetDependencies()
 
     self.Output('// base dependencies')
+    self.Output('#include "base/memory/ptr_util.h"')
     self.Output('#include "base/values.h"')
     self.Output('')
     self.Output('#include <memory>')
@@ -116,8 +117,7 @@
 
   def RepeatedMemberFieldWriteToValue(self, field):
     prologue = (
-        'base::ListValue* field_list = new base::ListValue();\n'
-        'dict->Set("{field_number}", field_list);\n'
+        'auto field_list = base::MakeUnique<base::ListValue>();\n'
         'for (int i = 0; i < message.{field_name}_size(); ++i) {{\n'
     )
 
@@ -131,8 +131,13 @@
       middle = (
           'field_list->Append{value_type}(message.{field_name}(i));\n'
       )
+
+    epilogue = (
+        '\n}}\n'
+        'dict->Set("{field_number}", std::move(field_list));'
+    )
     self.Output(
-        prologue + Indented(middle) + '\n}}',
+        prologue + Indented(middle) + epilogue,
         field_number=field.JavascriptIndex(),
         field_name=field.name,
         value_type=field.CppValueType() if not field.IsClassType() else None,
diff --git a/third_party/dom_distiller_js/test_sample_json_converter.h.golden b/third_party/dom_distiller_js/test_sample_json_converter.h.golden
index 37e2adb..6969164 100644
--- a/third_party/dom_distiller_js/test_sample_json_converter.h.golden
+++ b/third_party/dom_distiller_js/test_sample_json_converter.h.golden
@@ -3,6 +3,7 @@
 #include "test_sample.pb.h"
 
 // base dependencies
+#include "base/memory/ptr_util.h"
 #include "base/values.h"
 
 #include <memory>
@@ -150,11 +151,11 @@
             static std::unique_ptr<base::DictionaryValue> WriteToValue(const dom_distiller::test_sample::proto::Repeated::Message& message) {
               std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
               {
-                base::ListValue* field_list = new base::ListValue();
-                dict->Set("1", field_list);
+                auto field_list = base::MakeUnique<base::ListValue>();
                 for (int i = 0; i < message.dummy_size(); ++i) {
                   field_list->AppendBoolean(message.dummy(i));
                 }
+                dict->Set("1", std::move(field_list));
               }
               return dict;
             }
@@ -252,48 +253,48 @@
           static std::unique_ptr<base::DictionaryValue> WriteToValue(const dom_distiller::test_sample::proto::Repeated& message) {
             std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("1", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.float_value_size(); ++i) {
                 field_list->AppendDouble(message.float_value(i));
               }
+              dict->Set("1", std::move(field_list));
             }
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("2", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.double_value_size(); ++i) {
                 field_list->AppendDouble(message.double_value(i));
               }
+              dict->Set("2", std::move(field_list));
             }
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("3", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.int32_value_size(); ++i) {
                 field_list->AppendInteger(message.int32_value(i));
               }
+              dict->Set("3", std::move(field_list));
             }
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("4", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.bool_value_size(); ++i) {
                 field_list->AppendBoolean(message.bool_value(i));
               }
+              dict->Set("4", std::move(field_list));
             }
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("5", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.string_value_size(); ++i) {
                 field_list->AppendString(message.string_value(i));
               }
+              dict->Set("5", std::move(field_list));
             }
             {
-              base::ListValue* field_list = new base::ListValue();
-              dict->Set("6", field_list);
+              auto field_list = base::MakeUnique<base::ListValue>();
               for (int i = 0; i < message.message_value_size(); ++i) {
                 std::unique_ptr<base::Value> inner_message_value =
                     dom_distiller::test_sample::proto::json::Repeated::Message::WriteToValue(message.message_value(i));
                 field_list->Append(std::move(inner_message_value));
               }
+              dict->Set("6", std::move(field_list));
             }
             return dict;
           }
diff --git a/tools/json_schema_compiler/test/additional_properties_unittest.cc b/tools/json_schema_compiler/test/additional_properties_unittest.cc
index f62729c..5bf76da 100644
--- a/tools/json_schema_compiler/test/additional_properties_unittest.cc
+++ b/tools/json_schema_compiler/test/additional_properties_unittest.cc
@@ -21,7 +21,7 @@
         new base::DictionaryValue());
     type_value->SetString("string", "value");
     type_value->SetInteger("other", 9);
-    type_value->Set("another", list_value.release());
+    type_value->Set("another", std::move(list_value));
     std::unique_ptr<AdditionalPropertiesType> type(
         new AdditionalPropertiesType());
     ASSERT_TRUE(AdditionalPropertiesType::Populate(*type_value, type.get()));
diff --git a/tools/json_schema_compiler/test/arrays_unittest.cc b/tools/json_schema_compiler/test/arrays_unittest.cc
index 69d46dcc..91112f2 100644
--- a/tools/json_schema_compiler/test/arrays_unittest.cc
+++ b/tools/json_schema_compiler/test/arrays_unittest.cc
@@ -10,6 +10,8 @@
 #include <utility>
 
 #include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/json_schema_compiler/test/enums.h"
 
@@ -19,31 +21,31 @@
 
 // TODO(calamity): Change to AppendString etc once kalman's patch goes through
 static std::unique_ptr<base::DictionaryValue> CreateBasicArrayTypeDictionary() {
-  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  base::ListValue* strings_value = new base::ListValue();
+  auto value = base::MakeUnique<base::DictionaryValue>();
+  auto strings_value = base::MakeUnique<base::ListValue>();
   strings_value->AppendString("a");
   strings_value->AppendString("b");
   strings_value->AppendString("c");
   strings_value->AppendString("it's easy as");
-  base::ListValue* integers_value = new base::ListValue();
+  auto integers_value = base::MakeUnique<base::ListValue>();
   integers_value->AppendInteger(1);
   integers_value->AppendInteger(2);
   integers_value->AppendInteger(3);
-  base::ListValue* booleans_value = new base::ListValue();
+  auto booleans_value = base::MakeUnique<base::ListValue>();
   booleans_value->AppendBoolean(false);
   booleans_value->AppendBoolean(true);
-  base::ListValue* numbers_value = new base::ListValue();
+  auto numbers_value = base::MakeUnique<base::ListValue>();
   numbers_value->AppendDouble(6.1);
-  value->Set("numbers", numbers_value);
-  value->Set("booleans", booleans_value);
-  value->Set("strings", strings_value);
-  value->Set("integers", integers_value);
+  value->Set("numbers", std::move(numbers_value));
+  value->Set("booleans", std::move(booleans_value));
+  value->Set("strings", std::move(strings_value));
+  value->Set("integers", std::move(integers_value));
   return value;
 }
 
 std::unique_ptr<base::DictionaryValue> CreateItemValue(int val) {
-  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  value->Set("val", new base::Value(val));
+  auto value = base::MakeUnique<base::DictionaryValue>();
+  value->SetInteger("val", val);
   return value;
 }
 
@@ -61,12 +63,12 @@
 
 TEST(JsonSchemaCompilerArrayTest, EnumArrayReference) {
   // { "types": ["one", "two", "three"] }
-  base::ListValue* types = new base::ListValue();
+  auto types = base::MakeUnique<base::ListValue>();
   types->AppendString("one");
   types->AppendString("two");
   types->AppendString("three");
   base::DictionaryValue value;
-  value.Set("types", types);
+  value.Set("types", std::move(types));
 
   EnumArrayReference enum_array_reference;
 
@@ -86,19 +88,19 @@
 
 TEST(JsonSchemaCompilerArrayTest, EnumArrayMixed) {
   // { "types": ["one", "two", "three"] }
-  base::ListValue* infile_enums = new base::ListValue();
+  auto infile_enums = base::MakeUnique<base::ListValue>();
   infile_enums->AppendString("one");
   infile_enums->AppendString("two");
   infile_enums->AppendString("three");
 
-  base::ListValue* external_enums = new base::ListValue();
+  auto external_enums = base::MakeUnique<base::ListValue>();
   external_enums->AppendString("one");
   external_enums->AppendString("two");
   external_enums->AppendString("three");
 
   base::DictionaryValue value;
-  value.Set("infile_enums", infile_enums);
-  value.Set("external_enums", external_enums);
+  value.Set("infile_enums", std::move(infile_enums));
+  value.Set("external_enums", std::move(external_enums));
 
   EnumArrayMixed enum_array_mixed;
 
@@ -132,12 +134,12 @@
     enums.push_back(ENUMERATION_TWO);
     enums.push_back(ENUMERATION_THREE);
 
-    std::unique_ptr<base::ListValue> types(new base::ListValue());
+    auto types = base::MakeUnique<base::ListValue>();
     for (size_t i = 0; i < enums.size(); ++i)
       types->AppendString(ToString(enums[i]));
 
     base::DictionaryValue value;
-    value.Set("types", types.release());
+    value.Set("types", std::move(types));
 
     OptionalEnumArrayType enum_array_type;
     ASSERT_TRUE(OptionalEnumArrayType::Populate(value, &enum_array_type));
@@ -145,10 +147,10 @@
   }
   {
     base::DictionaryValue value;
-    std::unique_ptr<base::ListValue> enum_array(new base::ListValue());
+    auto enum_array = base::MakeUnique<base::ListValue>();
     enum_array->AppendString("invalid");
 
-    value.Set("types", enum_array.release());
+    value.Set("types", std::move(enum_array));
     OptionalEnumArrayType enum_array_type;
     ASSERT_FALSE(OptionalEnumArrayType::Populate(value, &enum_array_type));
     EXPECT_TRUE(enum_array_type.types->empty());
@@ -157,13 +159,13 @@
 
 TEST(JsonSchemaCompilerArrayTest, RefArrayType) {
   {
-    std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    std::unique_ptr<base::ListValue> ref_array(new base::ListValue());
+    auto value = base::MakeUnique<base::DictionaryValue>();
+    auto ref_array = base::MakeUnique<base::ListValue>();
     ref_array->Append(CreateItemValue(1));
     ref_array->Append(CreateItemValue(2));
     ref_array->Append(CreateItemValue(3));
-    value->Set("refs", ref_array.release());
-    std::unique_ptr<RefArrayType> ref_array_type(new RefArrayType());
+    value->Set("refs", std::move(ref_array));
+    auto ref_array_type = base::MakeUnique<RefArrayType>();
     EXPECT_TRUE(RefArrayType::Populate(*value, ref_array_type.get()));
     ASSERT_EQ(3u, ref_array_type->refs.size());
     EXPECT_EQ(1, ref_array_type->refs[0].val);
@@ -171,12 +173,12 @@
     EXPECT_EQ(3, ref_array_type->refs[2].val);
   }
   {
-    std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-    std::unique_ptr<base::ListValue> not_ref_array(new base::ListValue());
+    auto value = base::MakeUnique<base::DictionaryValue>();
+    auto not_ref_array = base::MakeUnique<base::ListValue>();
     not_ref_array->Append(CreateItemValue(1));
     not_ref_array->AppendInteger(3);
-    value->Set("refs", not_ref_array.release());
-    std::unique_ptr<RefArrayType> ref_array_type(new RefArrayType());
+    value->Set("refs", std::move(not_ref_array));
+    auto ref_array_type = base::MakeUnique<RefArrayType>();
     EXPECT_FALSE(RefArrayType::Populate(*value, ref_array_type.get()));
   }
 }
diff --git a/tools/json_schema_compiler/test/choices_unittest.cc b/tools/json_schema_compiler/test/choices_unittest.cc
index 708c900..081d2ee 100644
--- a/tools/json_schema_compiler/test/choices_unittest.cc
+++ b/tools/json_schema_compiler/test/choices_unittest.cc
@@ -112,13 +112,13 @@
                                             std::string("of"),
                                             std::string("strings"));
 
-  base::ListValue* strings_value = new base::ListValue();
+  auto strings_value = base::MakeUnique<base::ListValue>();
   for (size_t i = 0; i < strings.size(); ++i)
     strings_value->AppendString(strings[i]);
 
   base::DictionaryValue value;
   value.SetInteger("integers", 4);
-  value.Set("strings", strings_value);
+  value.Set("strings", std::move(strings_value));
 
   ChoiceType out;
   ASSERT_TRUE(ChoiceType::Populate(value, &out));
@@ -132,14 +132,14 @@
 }
 
 TEST(JsonSchemaCompilerChoicesTest, ChoiceTypeToValue) {
-  base::ListValue* strings_value = new base::ListValue();
+  auto strings_value = base::MakeUnique<base::ListValue>();
   strings_value->AppendString("list");
   strings_value->AppendString("of");
   strings_value->AppendString("strings");
 
   base::DictionaryValue value;
   value.SetInteger("integers", 5);
-  value.Set("strings", strings_value);
+  value.Set("strings", std::move(strings_value));
 
   ChoiceType out;
   ASSERT_TRUE(ChoiceType::Populate(value, &out));
diff --git a/tools/json_schema_compiler/test/crossref_unittest.cc b/tools/json_schema_compiler/test/crossref_unittest.cc
index 21e52aa..67c06d5 100644
--- a/tools/json_schema_compiler/test/crossref_unittest.cc
+++ b/tools/json_schema_compiler/test/crossref_unittest.cc
@@ -7,6 +7,8 @@
 #include <memory>
 #include <utility>
 
+#include "base/memory/ptr_util.h"
+#include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/json_schema_compiler/test/simple_api.h"
 
@@ -15,11 +17,11 @@
 namespace {
 
 std::unique_ptr<base::DictionaryValue> CreateTestTypeValue() {
-  std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue());
-  value->Set("number", new base::Value(1.1));
-  value->Set("integer", new base::Value(4));
-  value->Set("string", new base::Value("bling"));
-  value->Set("boolean", new base::Value(true));
+  auto value = base::MakeUnique<base::DictionaryValue>();
+  value->SetDouble("number", 1.1);
+  value->SetInteger("integer", 4);
+  value->SetString("string", "bling");
+  value->SetBoolean("boolean", true);
   return value;
 }
 
@@ -27,9 +29,9 @@
 
 TEST(JsonSchemaCompilerCrossrefTest, CrossrefTypePopulateAndToValue) {
   base::DictionaryValue crossref_orig;
-  crossref_orig.Set("testType", CreateTestTypeValue().release());
-  crossref_orig.Set("testEnumRequired", new base::Value("one"));
-  crossref_orig.Set("testEnumOptional", new base::Value("two"));
+  crossref_orig.Set("testType", CreateTestTypeValue());
+  crossref_orig.SetString("testEnumRequired", "one");
+  crossref_orig.SetString("testEnumOptional", "two");
 
   // Test Populate of the value --> compiled type.
   crossref::CrossrefType crossref_type;
@@ -85,11 +87,10 @@
 
 TEST(JsonSchemaCompilerCrossrefTest, TestTypeInObjectParamsCreate) {
   {
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    std::unique_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", CreateTestTypeValue().release());
-    param_object_value->Set("boolean", new base::Value(true));
+    auto params_value = base::MakeUnique<base::ListValue>();
+    auto param_object_value = base::MakeUnique<base::DictionaryValue>();
+    param_object_value->Set("testType", CreateTestTypeValue());
+    param_object_value->SetBoolean("boolean", true);
     params_value->Append(std::move(param_object_value));
     std::unique_ptr<crossref::TestTypeInObject::Params> params(
         crossref::TestTypeInObject::Params::Create(*params_value));
@@ -100,10 +101,9 @@
         params->param_object.test_type->ToValue().get()));
   }
   {
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    std::unique_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("boolean", new base::Value(true));
+    auto params_value = base::MakeUnique<base::ListValue>();
+    auto param_object_value = base::MakeUnique<base::DictionaryValue>();
+    param_object_value->SetBoolean("boolean", true);
     params_value->Append(std::move(param_object_value));
     std::unique_ptr<crossref::TestTypeInObject::Params> params(
         crossref::TestTypeInObject::Params::Create(*params_value));
@@ -112,21 +112,19 @@
     EXPECT_TRUE(params->param_object.boolean);
   }
   {
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    std::unique_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", new base::Value("invalid"));
-    param_object_value->Set("boolean", new base::Value(true));
+    auto params_value = base::MakeUnique<base::ListValue>();
+    auto param_object_value = base::MakeUnique<base::DictionaryValue>();
+    param_object_value->SetString("testType", "invalid");
+    param_object_value->SetBoolean("boolean", true);
     params_value->Append(std::move(param_object_value));
     std::unique_ptr<crossref::TestTypeInObject::Params> params(
         crossref::TestTypeInObject::Params::Create(*params_value));
     EXPECT_FALSE(params.get());
   }
   {
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
-    std::unique_ptr<base::DictionaryValue> param_object_value(
-        new base::DictionaryValue());
-    param_object_value->Set("testType", CreateTestTypeValue().release());
+    auto params_value = base::MakeUnique<base::ListValue>();
+    auto param_object_value = base::MakeUnique<base::DictionaryValue>();
+    param_object_value->Set("testType", CreateTestTypeValue());
     params_value->Append(std::move(param_object_value));
     std::unique_ptr<crossref::TestTypeInObject::Params> params(
         crossref::TestTypeInObject::Params::Create(*params_value));
diff --git a/tools/json_schema_compiler/test/enums_unittest.cc b/tools/json_schema_compiler/test/enums_unittest.cc
index 715b4ae..fffe9b4 100644
--- a/tools/json_schema_compiler/test/enums_unittest.cc
+++ b/tools/json_schema_compiler/test/enums_unittest.cc
@@ -16,7 +16,7 @@
   {
     EnumType enum_type;
     base::DictionaryValue value;
-    value.Set("type", new base::Value("one"));
+    value.SetString("type", "one");
     EXPECT_TRUE(EnumType::Populate(value, &enum_type));
     EXPECT_EQ(ENUMERATION_ONE, enum_type.type);
     EXPECT_TRUE(value.Equals(enum_type.ToValue().get()));
@@ -24,7 +24,7 @@
   {
     EnumType enum_type;
     base::DictionaryValue value;
-    value.Set("type", new base::Value("invalid"));
+    value.SetString("type", "invalid");
     EXPECT_FALSE(EnumType::Populate(value, &enum_type));
   }
 }
@@ -52,11 +52,11 @@
     base::DictionaryValue value;
     ASSERT_FALSE(HasEnumeration::Populate(value, &enumeration));
 
-    value.Set("enumeration", new base::Value("one"));
+    value.SetString("enumeration", "one");
     ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration));
     EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
 
-    value.Set("optional_enumeration", new base::Value("two"));
+    value.SetString("optional_enumeration", "two");
     ASSERT_TRUE(HasEnumeration::Populate(value, &enumeration));
     EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
   }
@@ -65,7 +65,7 @@
     base::DictionaryValue value;
     ASSERT_FALSE(ReferenceEnum::Populate(value, &enumeration));
 
-    value.Set("reference_enum", new base::Value("one"));
+    value.SetString("reference_enum", "one");
     ASSERT_TRUE(ReferenceEnum::Populate(value, &enumeration));
     EXPECT_TRUE(value.Equals(enumeration.ToValue().get()));
   }
@@ -124,7 +124,7 @@
   {
     OptionalEnumType enum_type;
     base::DictionaryValue value;
-    value.Set("type", new base::Value("two"));
+    value.SetString("type", "two");
     EXPECT_TRUE(OptionalEnumType::Populate(value, &enum_type));
     EXPECT_EQ(ENUMERATION_TWO, enum_type.type);
     EXPECT_TRUE(value.Equals(enum_type.ToValue().get()));
@@ -139,7 +139,7 @@
   {
     OptionalEnumType enum_type;
     base::DictionaryValue value;
-    value.Set("type", new base::Value("invalid"));
+    value.SetString("type", "invalid");
     EXPECT_FALSE(OptionalEnumType::Populate(value, &enum_type));
   }
 }
diff --git a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc b/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
index ce7a2f9..858f052 100644
--- a/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
+++ b/tools/json_schema_compiler/test/functions_as_parameters_unittest.cc
@@ -4,6 +4,8 @@
 
 #include "tools/json_schema_compiler/test/functions_as_parameters.h"
 
+#include "base/memory/ptr_util.h"
+#include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 using namespace test::api::functions_as_parameters;
@@ -19,7 +21,7 @@
   {
     base::DictionaryValue value;
     base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_dict));
     FunctionType out;
     ASSERT_TRUE(FunctionType::Populate(value, &out));
     EXPECT_TRUE(out.event_callback.empty());
@@ -30,7 +32,7 @@
   {
     base::DictionaryValue value;
     base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_dict));
 
     FunctionType out;
     ASSERT_TRUE(FunctionType::Populate(value, &out));
@@ -40,8 +42,9 @@
     base::DictionaryValue value;
     base::DictionaryValue expected_value;
     base::DictionaryValue function_dict;
-    value.Set("event_callback", function_dict.DeepCopy());
-    expected_value.Set("event_callback", function_dict.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_dict));
+    expected_value.Set("event_callback",
+                       base::MakeUnique<base::Value>(function_dict));
 
     FunctionType out;
     ASSERT_TRUE(FunctionType::Populate(value, &out));
@@ -59,7 +62,7 @@
   {
     base::DictionaryValue value;
     base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_value));
     OptionalFunctionType out;
     ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
     EXPECT_TRUE(out.event_callback.get());
@@ -67,7 +70,7 @@
   {
     base::DictionaryValue value;
     base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_value));
     OptionalFunctionType out;
     ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
     EXPECT_TRUE(out.event_callback.get());
@@ -85,7 +88,7 @@
   {
     base::DictionaryValue value;
     base::DictionaryValue function_value;
-    value.Set("event_callback", function_value.DeepCopy());
+    value.Set("event_callback", base::MakeUnique<base::Value>(function_value));
 
     OptionalFunctionType out;
     ASSERT_TRUE(OptionalFunctionType::Populate(value, &out));
diff --git a/tools/json_schema_compiler/test/objects_unittest.cc b/tools/json_schema_compiler/test/objects_unittest.cc
index b00ea35..9bc8e5e 100644
--- a/tools/json_schema_compiler/test/objects_unittest.cc
+++ b/tools/json_schema_compiler/test/objects_unittest.cc
@@ -9,6 +9,8 @@
 #include <utility>
 
 #include "base/json/json_writer.h"
+#include "base/memory/ptr_util.h"
+#include "base/values.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/json_schema_compiler/test/objects_movable.h"
 #include "tools/json_schema_compiler/test/objects_movable_json.h"
@@ -19,16 +21,15 @@
 
 TEST(JsonSchemaCompilerObjectsTest, ObjectParamParamsCreate) {
   {
-    std::unique_ptr<base::ListValue> strings(new base::ListValue());
+    auto strings = base::MakeUnique<base::ListValue>();
     strings->AppendString("one");
     strings->AppendString("two");
-    std::unique_ptr<base::DictionaryValue> info_value(
-        new base::DictionaryValue());
-    info_value->Set("strings", strings.release());
-    info_value->Set("integer", new base::Value(5));
-    info_value->Set("boolean", new base::Value(true));
+    auto info_value = base::MakeUnique<base::DictionaryValue>();
+    info_value->Set("strings", std::move(strings));
+    info_value->SetInteger("integer", 5);
+    info_value->SetBoolean("boolean", true);
 
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
+    auto params_value = base::MakeUnique<base::ListValue>();
     params_value->Append(std::move(info_value));
     std::unique_ptr<ObjectParam::Params> params(
         ObjectParam::Params::Create(*params_value));
@@ -40,15 +41,14 @@
     EXPECT_TRUE(params->info.boolean);
   }
   {
-    std::unique_ptr<base::ListValue> strings(new base::ListValue());
+    auto strings = base::MakeUnique<base::ListValue>();
     strings->AppendString("one");
     strings->AppendString("two");
-    std::unique_ptr<base::DictionaryValue> info_value(
-        new base::DictionaryValue());
-    info_value->Set("strings", strings.release());
-    info_value->Set("integer", new base::Value(5));
+    auto info_value = base::MakeUnique<base::DictionaryValue>();
+    info_value->Set("strings", std::move(strings));
+    info_value->SetInteger("integer", 5);
 
-    std::unique_ptr<base::ListValue> params_value(new base::ListValue());
+    auto params_value = base::MakeUnique<base::ListValue>();
     params_value->Append(std::move(info_value));
     std::unique_ptr<ObjectParam::Params> params(
         ObjectParam::Params::Create(*params_value));
diff --git a/ui/app_list/search/history_data_store.cc b/ui/app_list/search/history_data_store.cc
index a0e1b29..0f4a3152 100644
--- a/ui/app_list/search/history_data_store.cc
+++ b/ui/app_list/search/history_data_store.cc
@@ -128,7 +128,7 @@
 void HistoryDataStore::Init(base::DictionaryValue* cached_dict) {
   DCHECK(cached_dict);
   cached_dict->SetString(kKeyVersion, kCurrentVersion);
-  cached_dict->Set(kKeyAssociations, new base::DictionaryValue);
+  cached_dict->Set(kKeyAssociations, base::MakeUnique<base::DictionaryValue>());
 }
 
 void HistoryDataStore::Flush(