diff --git a/tools/gn/analyzer.cc b/tools/gn/analyzer.cc
index 6e23c34..d1f2d52 100644
--- a/tools/gn/analyzer.cc
+++ b/tools/gn/analyzer.cc
@@ -112,7 +112,7 @@
                  const std::string& key,
                  const LabelSet& labels) {
   std::vector<std::string> strings;
-  auto value = base::WrapUnique(new base::ListValue());
+  auto value = base::MakeUnique<base::ListValue>();
   for (const auto l : labels)
     strings.push_back(l.GetUserVisibleName(default_toolchain));
   std::sort(strings.begin(), strings.end());
@@ -207,7 +207,7 @@
   } else {
     WriteString(*value, "status", outputs.status);
     if (outputs.compile_includes_all) {
-      auto compile_targets = base::WrapUnique(new base::ListValue());
+      auto compile_targets = base::MakeUnique<base::ListValue>();
       compile_targets->AppendString("all");
       value->SetWithoutPathExpansion("compile_targets",
                                      std::move(compile_targets));
diff --git a/tools/gn/scope.cc b/tools/gn/scope.cc
index 650c64a..f2fe752 100644
--- a/tools/gn/scope.cc
+++ b/tools/gn/scope.cc
@@ -339,7 +339,7 @@
     }
 
     std::unique_ptr<Scope>& dest_scope = dest->target_defaults_[current_name];
-    dest_scope = base::WrapUnique(new Scope(settings_));
+    dest_scope = base::MakeUnique<Scope>(settings_);
     pair.second->NonRecursiveMergeTo(dest_scope.get(), options, node_for_err,
                                      "<SHOULDN'T HAPPEN>", err);
   }
@@ -430,7 +430,7 @@
 
 Scope* Scope::MakeTargetDefaults(const std::string& target_type) {
   std::unique_ptr<Scope>& dest = target_defaults_[target_type];
-  dest = base::WrapUnique(new Scope(settings_));
+  dest = base::MakeUnique<Scope>(settings_);
   return dest.get();
 }
 
diff --git a/tools/gn/xcode_object.cc b/tools/gn/xcode_object.cc
index b8c8502..8a31470 100644
--- a/tools/gn/xcode_object.cc
+++ b/tools/gn/xcode_object.cc
@@ -560,8 +560,8 @@
   }
 
   if (!group) {
-    children_.push_back(base::WrapUnique(
-        new PBXGroup(component.as_string(), component.as_string())));
+    children_.push_back(base::MakeUnique<PBXGroup>(component.as_string(),
+                                                   component.as_string()));
     group = static_cast<PBXGroup*>(children_.back().get());
   }
 
@@ -617,11 +617,11 @@
       product_type_(product_type),
       product_name_(product_name) {
   DCHECK(product_reference_);
-  build_phases_.push_back(base::WrapUnique(new PBXSourcesBuildPhase));
+  build_phases_.push_back(base::MakeUnique<PBXSourcesBuildPhase>());
   source_build_phase_ =
       static_cast<PBXSourcesBuildPhase*>(build_phases_.back().get());
 
-  build_phases_.push_back(base::WrapUnique(new PBXFrameworksBuildPhase));
+  build_phases_.push_back(base::MakeUnique<PBXFrameworksBuildPhase>());
 }
 
 PBXNativeTarget::~PBXNativeTarget() {}
diff --git a/tools/gn/xml_element_writer.cc b/tools/gn/xml_element_writer.cc
index bb0d232..ecc4f7b 100644
--- a/tools/gn/xml_element_writer.cc
+++ b/tools/gn/xml_element_writer.cc
@@ -64,8 +64,7 @@
     const std::string& tag,
     const XmlAttributes& attributes) {
   StartContent(true);
-  return base::WrapUnique(
-      new XmlElementWriter(out_, tag, attributes, indent_ + 2));
+  return base::MakeUnique<XmlElementWriter>(out_, tag, attributes, indent_ + 2);
 }
 
 std::ostream& XmlElementWriter::StartContent(bool start_new_line) {
diff --git a/tools/gn/xml_element_writer.h b/tools/gn/xml_element_writer.h
index 01346d2..0e8fa01 100644
--- a/tools/gn/xml_element_writer.h
+++ b/tools/gn/xml_element_writer.h
@@ -116,8 +116,8 @@
     const std::string& attribute_name,
     const Writer& attribute_value_writer) {
   StartContent(true);
-  return base::WrapUnique(new XmlElementWriter(
-      out_, tag, attribute_name, attribute_value_writer, indent_ + 2));
+  return base::MakeUnique<XmlElementWriter>(
+      out_, tag, attribute_name, attribute_value_writer, indent_ + 2);
 }
 
 std::string XmlEscape(const std::string& value);
