diff --git a/tools/gn/input_file_manager.cc b/tools/gn/input_file_manager.cc
index a3e6460..36c0bf3 100644
--- a/tools/gn/input_file_manager.cc
+++ b/tools/gn/input_file_manager.cc
@@ -94,9 +94,6 @@
 
 InputFileManager::~InputFileManager() {
   // Should be single-threaded by now.
-  STLDeleteContainerPairSecondPointers(input_files_.begin(),
-                                       input_files_.end());
-  STLDeleteContainerPointers(dynamic_inputs_.begin(), dynamic_inputs_.end());
 }
 
 bool InputFileManager::AsyncLoadFile(const LocationRange& origin,
@@ -114,18 +111,18 @@
     InputFileMap::const_iterator found = input_files_.find(file_name);
     if (found == input_files_.end()) {
       // New file, schedule load.
-      InputFileData* data = new InputFileData(file_name);
+      std::unique_ptr<InputFileData> data(new InputFileData(file_name));
       data->scheduled_callbacks.push_back(callback);
-      input_files_[file_name] = data;
-
       schedule_this = base::Bind(&InputFileManager::BackgroundLoadFile,
                                  this,
                                  origin,
                                  build_settings,
                                  file_name,
                                  &data->file);
+      input_files_[file_name] = std::move(data);
+
     } else {
-      InputFileData* data = found->second;
+      InputFileData* data = found->second.get();
 
       // Prevent mixing async and sync loads. See SyncLoadFile for discussion.
       if (data->sync_invocation) {
@@ -167,16 +164,17 @@
   InputFileMap::iterator found = input_files_.find(file_name);
   if (found == input_files_.end()) {
     // Haven't seen this file yet, start loading right now.
-    data = new InputFileData(file_name);
+    std::unique_ptr<InputFileData> new_data(new InputFileData(file_name));
+    data = new_data.get();
     data->sync_invocation = true;
-    input_files_[file_name] = data;
+    input_files_[file_name] = std::move(new_data);
 
     base::AutoUnlock unlock(lock_);
     if (!LoadFile(origin, build_settings, file_name, &data->file, err))
       return nullptr;
   } else {
     // This file has either been loaded or is pending loading.
-    data = found->second;
+    data = found->second.get();
 
     if (!data->sync_invocation) {
       // Don't allow mixing of sync and async loads. If an async load is
@@ -231,14 +229,14 @@
     InputFile** file,
     std::vector<Token>** tokens,
     std::unique_ptr<ParseNode>** parse_root) {
-  InputFileData* data = new InputFileData(name);
-  {
-    base::AutoLock lock(lock_);
-    dynamic_inputs_.push_back(data);
-  }
+  std::unique_ptr<InputFileData> data(new InputFileData(name));
   *file = &data->file;
   *tokens = &data->tokens;
   *parse_root = &data->parsed_root;
+  {
+    base::AutoLock lock(lock_);
+    dynamic_inputs_.push_back(std::move(data));
+  }
 }
 
 int InputFileManager::GetInputFileCount() const {
@@ -286,7 +284,7 @@
     base::AutoLock lock(lock_);
     DCHECK(input_files_.find(name) != input_files_.end());
 
-    InputFileData* data = input_files_[name];
+    InputFileData* data = input_files_[name].get();
     data->loaded = true;
     if (success) {
       data->tokens.swap(tokens);
diff --git a/tools/gn/input_file_manager.h b/tools/gn/input_file_manager.h
index ba055e2..dd16604 100644
--- a/tools/gn/input_file_manager.h
+++ b/tools/gn/input_file_manager.h
@@ -137,7 +137,8 @@
   mutable base::Lock lock_;
 
   // Maps repo-relative filenames to the corresponding owned pointer.
-  typedef base::hash_map<SourceFile, InputFileData*> InputFileMap;
+  typedef base::hash_map<SourceFile, std::unique_ptr<InputFileData>>
+      InputFileMap;
   InputFileMap input_files_;
 
   // Tracks all dynamic inputs. The data are holders for memory management
@@ -146,9 +147,7 @@
   // charge of the threadsafety requirements.
   //
   // See AddDynamicInput().
-  //
-  // Owning pointers.
-  std::vector<InputFileData*> dynamic_inputs_;
+  std::vector<std::unique_ptr<InputFileData>> dynamic_inputs_;
 
   DISALLOW_COPY_AND_ASSIGN(InputFileManager);
 };
