diff --git a/tools/gn/import_manager.cc b/tools/gn/import_manager.cc
index 83cc090..8c57008 100644
--- a/tools/gn/import_manager.cc
+++ b/tools/gn/import_manager.cc
@@ -4,9 +4,6 @@
 
 #include "tools/gn/import_manager.h"
 
-#include <memory>
-
-#include "base/stl_util.h"
 #include "tools/gn/parse_tree.h"
 #include "tools/gn/scheduler.h"
 #include "tools/gn/scope_per_file_provider.h"
@@ -14,10 +11,10 @@
 namespace {
 
 // Returns a newly-allocated scope on success, null on failure.
-Scope* UncachedImport(const Settings* settings,
-                      const SourceFile& file,
-                      const ParseNode* node_for_err,
-                      Err* err) {
+std::unique_ptr<Scope> UncachedImport(const Settings* settings,
+                                      const SourceFile& file,
+                                      const ParseNode* node_for_err,
+                                      Err* err) {
   const ParseNode* node = g_scheduler->input_file_manager()->SyncLoadFile(
       node_for_err->GetRange(), settings->build_settings(), file, err);
   if (!node)
@@ -37,7 +34,7 @@
     return nullptr;
   scope->ClearProcessingImport();
 
-  return scope.release();
+  return scope;
 }
 
 }  // namesapce
@@ -46,7 +43,6 @@
 }
 
 ImportManager::~ImportManager() {
-  STLDeleteContainerPairSecondPointers(imports_.begin(), imports_.end());
 }
 
 bool ImportManager::DoImport(const SourceFile& file,
@@ -60,14 +56,14 @@
     base::AutoLock lock(lock_);
     ImportMap::const_iterator found = imports_.find(file);
     if (found != imports_.end())
-      imported_scope = found->second;
+      imported_scope = found->second.get();
   }
 
   if (!imported_scope) {
     // Do a new import of the file.
-    imported_scope = UncachedImport(scope->settings(), file,
-                                    node_for_err, err);
-    if (!imported_scope)
+    std::unique_ptr<Scope> new_imported_scope =
+        UncachedImport(scope->settings(), file, node_for_err, err);
+    if (!new_imported_scope)
       return false;
 
     // We loaded the file outside the lock. This means that there could be a
@@ -77,10 +73,10 @@
       base::AutoLock lock(lock_);
       ImportMap::const_iterator found = imports_.find(file);
       if (found != imports_.end()) {
-        delete imported_scope;
-        imported_scope = found->second;
+        imported_scope = found->second.get();
       } else {
-        imports_[file] = imported_scope;
+        imported_scope = new_imported_scope.get();
+        imports_[file] = std::move(new_imported_scope);
       }
     }
   }
diff --git a/tools/gn/import_manager.h b/tools/gn/import_manager.h
index 70aeee7..bd47a2a 100644
--- a/tools/gn/import_manager.h
+++ b/tools/gn/import_manager.h
@@ -6,6 +6,7 @@
 #define TOOLS_GN_IMPORT_MANAGER_H_
 
 #include <map>
+#include <memory>
 
 #include "base/macros.h"
 #include "base/synchronization/lock.h"
@@ -33,7 +34,7 @@
   base::Lock lock_;
 
   // Owning pointers to the scopes.
-  typedef std::map<SourceFile, const Scope*> ImportMap;
+  typedef std::map<SourceFile, std::unique_ptr<const Scope>> ImportMap;
   ImportMap imports_;
 
   DISALLOW_COPY_AND_ASSIGN(ImportManager);
