diff --git a/build/gen.py b/build/gen.py
index d9c4b1f..4f9cd32 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -863,6 +863,7 @@
               'src/gn/functions_target.cc',
               'src/gn/general_tool.cc',
               'src/gn/generated_file_target_generator.cc',
+              'src/gn/generated_file_writer.cc',
               'src/gn/group_target_generator.cc',
               'src/gn/header_checker.cc',
               'src/gn/import_manager.cc',
diff --git a/src/gn/generated_file_writer.cc b/src/gn/generated_file_writer.cc
new file mode 100644
index 0000000..5de819e
--- /dev/null
+++ b/src/gn/generated_file_writer.cc
@@ -0,0 +1,64 @@
+// Copyright 2026 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "generated_file_writer.h"
+
+#include <ostream>
+#include <vector>
+
+#include "base/logging.h"
+#include "gn/err.h"
+#include "gn/output_conversion.h"
+#include "gn/source_file.h"
+#include "gn/string_output_buffer.h"
+#include "gn/target.h"
+#include "gn/trace.h"
+#include "gn/value.h"
+
+bool WriteGeneratedFileToDisk(const Target* target, Err* err) {
+  const Settings* settings = target->settings();
+
+  std::vector<SourceFile> outputs_as_sources;
+  target->action_values().GetOutputsAsSourceFiles(target, &outputs_as_sources);
+  CHECK(outputs_as_sources.size() == 1);
+
+  base::FilePath output =
+      settings->build_settings()->GetFullPath(outputs_as_sources[0]);
+  ScopedTrace trace(TraceItem::TRACE_FILE_WRITE_GENERATED,
+                    outputs_as_sources[0].value());
+  trace.SetToolchain(target->settings()->toolchain_label());
+
+  // If this is a metadata target, populate the write value with the appropriate
+  // data.
+  Value contents;
+  if (target->contents().type() == Value::NONE) {
+    // Origin is set to the outputs location, so that errors with this value
+    // get flagged on the right target.
+    CHECK(target->action_values().outputs().list().size() == 1U);
+    contents = Value(target->action_values().outputs().list()[0].origin(),
+                     Value::LIST);
+    TargetSet targets_walked;
+    ScopedTrace metadata_walk_trace(TraceItem::TRACE_WALK_METADATA,
+                                    target->label());
+    metadata_walk_trace.SetToolchain(target->settings()->toolchain_label());
+    if (!target->GetMetadata(target->data_keys(), target->walk_keys(),
+                             target->rebase(), /*deps_only = */ true,
+                             &contents.list_value(), &targets_walked, err)) {
+      return false;
+    }
+  } else {
+    contents = target->contents();
+  }
+
+  // Compute output.
+  StringOutputBuffer storage;
+  std::ostream out(&storage);
+  ConvertValueToOutput(settings, contents, target->output_conversion(), out,
+                       err);
+
+  if (err->has_error()) {
+    return false;
+  }
+  return storage.WriteToFileIfChanged(output, err);
+}
diff --git a/src/gn/generated_file_writer.h b/src/gn/generated_file_writer.h
new file mode 100644
index 0000000..833ed97
--- /dev/null
+++ b/src/gn/generated_file_writer.h
@@ -0,0 +1,14 @@
+// Copyright 2026 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef TOOLS_GN_GENERATED_FILE_WRITER_H_
+#define TOOLS_GN_GENERATED_FILE_WRITER_H_
+
+class Err;
+class Target;
+
+// Write the content of a given generated_file() target to disk.
+bool WriteGeneratedFileToDisk(const Target* target, Err* err);
+
+#endif  // TOOLS_GN_GENERATED_FILE_WRITER_H_
diff --git a/src/gn/ninja_generated_file_target_writer.cc b/src/gn/ninja_generated_file_target_writer.cc
index 6de8207..09aa271 100644
--- a/src/gn/ninja_generated_file_target_writer.cc
+++ b/src/gn/ninja_generated_file_target_writer.cc
@@ -4,6 +4,7 @@
 
 #include "gn/ninja_generated_file_target_writer.h"
 
+#include "gn/generated_file_writer.h"
 #include "gn/output_conversion.h"
 #include "gn/output_file.h"
 #include "gn/scheduler.h"
@@ -22,7 +23,10 @@
 
 void NinjaGeneratedFileTargetWriter::Run() {
   // Write the file.
-  GenerateFile();
+  Err err;
+  if (!WriteGeneratedFileToDisk(target_, &err)) {
+    g_scheduler->FailWithError(err);
+  }
 
   // A generated_file target should generate a phony target with dependencies
   // on each of the deps and data_deps in the target. The actual collection is
@@ -49,59 +53,3 @@
 
   WriteStampOrPhonyForTarget(output_files, data_output_files);
 }
-
-void NinjaGeneratedFileTargetWriter::GenerateFile() {
-  Err err;
-
-  std::vector<SourceFile> outputs_as_sources;
-  target_->action_values().GetOutputsAsSourceFiles(target_,
-                                                   &outputs_as_sources);
-  CHECK(outputs_as_sources.size() == 1);
-
-  base::FilePath output =
-      settings_->build_settings()->GetFullPath(outputs_as_sources[0]);
-  ScopedTrace trace(TraceItem::TRACE_FILE_WRITE_GENERATED,
-                    outputs_as_sources[0].value());
-  trace.SetToolchain(target_->settings()->toolchain_label());
-
-  // If this is a metadata target, populate the write value with the appropriate
-  // data.
-  Value contents;
-  if (target_->contents().type() == Value::NONE) {
-    // Origin is set to the outputs location, so that errors with this value
-    // get flagged on the right target.
-    CHECK(target_->action_values().outputs().list().size() == 1U);
-    contents = Value(target_->action_values().outputs().list()[0].origin(),
-                     Value::LIST);
-    TargetSet targets_walked;
-    ScopedTrace metadata_walk_trace(TraceItem::TRACE_WALK_METADATA,
-                                    target_->label());
-    trace.SetToolchain(target_->settings()->toolchain_label());
-    if (!target_->GetMetadata(target_->data_keys(), target_->walk_keys(),
-                              target_->rebase(), /*deps_only = */ true,
-                              &contents.list_value(), &targets_walked, &err)) {
-      g_scheduler->FailWithError(err);
-      return;
-    }
-  } else {
-    contents = target_->contents();
-  }
-
-  // Compute output.
-  StringOutputBuffer storage;
-  std::ostream out(&storage);
-  ConvertValueToOutput(settings_, contents, target_->output_conversion(), out,
-                       &err);
-
-  if (err.has_error()) {
-    g_scheduler->FailWithError(err);
-    return;
-  }
-
-  storage.WriteToFileIfChanged(output, &err);
-
-  if (err.has_error()) {
-    g_scheduler->FailWithError(err);
-    return;
-  }
-}
diff --git a/src/gn/ninja_generated_file_target_writer.h b/src/gn/ninja_generated_file_target_writer.h
index 3103388..d39f5fd 100644
--- a/src/gn/ninja_generated_file_target_writer.h
+++ b/src/gn/ninja_generated_file_target_writer.h
@@ -16,8 +16,6 @@
   void Run() override;
 
  private:
-  void GenerateFile();
-
   NinjaGeneratedFileTargetWriter(const NinjaGeneratedFileTargetWriter&) =
       delete;
   NinjaGeneratedFileTargetWriter& operator=(
