diff --git a/components/BUILD.gn b/components/BUILD.gn
index 1eff458e07f1a..1ead879e0d4ca 100644
--- a/components/BUILD.gn
+++ b/components/BUILD.gn
@@ -708,6 +708,7 @@ test("components_unittests") {
   if (!is_android && !is_ios) {
     deps += [
       "//components/access_code_cast/common:unit_tests",
+      "//components/headless/screen_info:unit_tests",
       "//components/live_caption:unit_tests",
       "//components/soda:unit_tests",
       "//components/storage_monitor:unit_tests",
diff --git a/components/headless/screen_info/BUILD.gn b/components/headless/screen_info/BUILD.gn
new file mode 100644
index 0000000000000..0c26ab4bb700a
--- /dev/null
+++ b/components/headless/screen_info/BUILD.gn
@@ -0,0 +1,29 @@
+# Copyright 2025 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+source_set("screen_info") {
+  sources = [
+    "headless_screen_info.cc",
+    "headless_screen_info.h",
+  ]
+
+  deps = [
+    "//base",
+    "//third_party/re2",
+    "//ui/display",
+    "//ui/gfx/geometry/",
+  ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "headless_screen_info_unittest.cc" ]
+
+  deps = [
+    ":screen_info",
+    "//base/test:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+  ]
+}
diff --git a/components/headless/screen_info/DEPS b/components/headless/screen_info/DEPS
new file mode 100644
index 0000000000000..4f93239061566
--- /dev/null
+++ b/components/headless/screen_info/DEPS
@@ -0,0 +1,6 @@
+include_rules = [
+  "+base",
+  "+third_party/re2/src/re2/re2.h",
+  "+ui/display",
+  "+ui/gfx/geometry",
+]
diff --git a/headless/lib/browser/headless_screen_info.cc b/components/headless/screen_info/headless_screen_info.cc
similarity index 99%
rename from headless/lib/browser/headless_screen_info.cc
rename to components/headless/screen_info/headless_screen_info.cc
index ee63695bdcc65..5148c0fb9f9f8 100644
--- a/headless/lib/browser/headless_screen_info.cc
+++ b/components/headless/screen_info/headless_screen_info.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "headless/lib/browser/headless_screen_info.h"
+#include "components/headless/screen_info/headless_screen_info.h"
 
 #include <optional>
 
diff --git a/headless/lib/browser/headless_screen_info.h b/components/headless/screen_info/headless_screen_info.h
similarity index 86%
rename from headless/lib/browser/headless_screen_info.h
rename to components/headless/screen_info/headless_screen_info.h
index 043034ce2ff09..4de34f50653ed 100644
--- a/headless/lib/browser/headless_screen_info.h
+++ b/components/headless/screen_info/headless_screen_info.h
@@ -2,21 +2,20 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#ifndef HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_INFO_H_
-#define HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_INFO_H_
+#ifndef COMPONENTS_HEADLESS_SCREEN_INFO_HEADLESS_SCREEN_INFO_H_
+#define COMPONENTS_HEADLESS_SCREEN_INFO_HEADLESS_SCREEN_INFO_H_
 
 #include <string>
 #include <string_view>
 #include <vector>
 
 #include "base/types/expected.h"
-#include "headless/public/headless_export.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/geometry/rect.h"
 
 namespace headless {
 
-struct HEADLESS_EXPORT HeadlessScreenInfo {
+struct HeadlessScreenInfo {
   gfx::Rect bounds = gfx::Rect(800, 600);
   gfx::Insets work_area_insets;
   int color_depth = 24;
@@ -62,4 +61,4 @@ struct HEADLESS_EXPORT HeadlessScreenInfo {
 
 }  // namespace headless
 
-#endif  // HEADLESS_LIB_BROWSER_HEADLESS_SCREEN_INFO_H_
+#endif  // COMPONENTS_HEADLESS_SCREEN_INFO_HEADLESS_SCREEN_INFO_H_
diff --git a/headless/lib/browser/headless_screen_info_unittest.cc b/components/headless/screen_info/headless_screen_info_unittest.cc
similarity index 95%
rename from headless/lib/browser/headless_screen_info_unittest.cc
rename to components/headless/screen_info/headless_screen_info_unittest.cc
index f96443912e2b7..7f567f25e1460 100644
--- a/headless/lib/browser/headless_screen_info_unittest.cc
+++ b/components/headless/screen_info/headless_screen_info_unittest.cc
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "headless/lib/browser/headless_screen_info.h"
+#include "components/headless/screen_info/headless_screen_info.h"
 
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -10,7 +10,7 @@
 namespace headless {
 namespace {
 
-TEST(ScreenInfoTest, Basic) {
+TEST(HeadlessScreenInfoTest, Basic) {
   EXPECT_EQ(HeadlessScreenInfo::FromString(" \t ").error(),
             "Invalid screen info:  \t ");
 
@@ -30,7 +30,7 @@ TEST(ScreenInfoTest, Basic) {
             HeadlessScreenInfo({.bounds = gfx::Rect(0, 0, 800, 600)}));
 }
 
-TEST(ScreenInfoTest, ScreenOrigin) {
+TEST(HeadlessScreenInfoTest, ScreenOrigin) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{100,200}").value()[0],
             HeadlessScreenInfo({.bounds = gfx::Rect(100, 200, 800, 600)}));
 
@@ -65,7 +65,7 @@ TEST(ScreenInfoTest, ScreenOrigin) {
             "Invalid screen info: 100+200");
 }
 
-TEST(ScreenInfoTest, ScreenSize) {
+TEST(HeadlessScreenInfoTest, ScreenSize) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{100x200}").value()[0],
             HeadlessScreenInfo({.bounds = gfx::Rect(100, 200)}));
 
@@ -91,7 +91,7 @@ TEST(ScreenInfoTest, ScreenSize) {
             "Invalid screen info: 100 200");
 }
 
-TEST(ScreenInfoTest, ScreenParameters) {
+TEST(HeadlessScreenInfoTest, ScreenParameters) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{xyz =}").error(),
             "Invalid screen info: xyz =");
 
@@ -123,7 +123,7 @@ TEST(ScreenInfoTest, ScreenParameters) {
             "Unknown screen info parameter: xyz");
 }
 
-TEST(ScreenInfoTest, ScreenColorDepth) {
+TEST(HeadlessScreenInfoTest, ScreenColorDepth) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{ colorDepth=16 }").value()[0],
             HeadlessScreenInfo({.color_depth = 16}));
 
@@ -140,7 +140,7 @@ TEST(ScreenInfoTest, ScreenColorDepth) {
             "Invalid screen color depth: 24x");
 }
 
-TEST(ScreenInfoTest, ScreenDevicePixelRatio) {
+TEST(HeadlessScreenInfoTest, ScreenDevicePixelRatio) {
   EXPECT_EQ(
       HeadlessScreenInfo::FromString("{ devicePixelRatio=0.5}").value()[0],
       HeadlessScreenInfo({.device_pixel_ratio = 0.5f}));
@@ -161,7 +161,7 @@ TEST(ScreenInfoTest, ScreenDevicePixelRatio) {
             "Invalid screen device pixel ratio: 1.0x");
 }
 
-TEST(ScreenInfoTest, ScreenIsInternal) {
+TEST(HeadlessScreenInfoTest, ScreenIsInternal) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{ isInternal=1 }").value()[0],
             HeadlessScreenInfo({.is_internal = true}));
 
@@ -181,7 +181,7 @@ TEST(ScreenInfoTest, ScreenIsInternal) {
             "Invalid screen is internal: xyz");
 }
 
-TEST(ScreenInfoTest, ScreenLabel) {
+TEST(HeadlessScreenInfoTest, ScreenLabel) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{ label=xyz}").value()[0],
             HeadlessScreenInfo({.label = "xyz"}));
 
@@ -211,7 +211,7 @@ TEST(ScreenInfoTest, ScreenLabel) {
             "Invalid screen info: '\\'quoted\\'");
 }
 
-TEST(ScreenInfoTest, MultipleScreens) {
+TEST(HeadlessScreenInfoTest, MultipleScreens) {
   // Explicit screen origin results in overlapped screens.
   EXPECT_THAT(HeadlessScreenInfo::FromString("{}{0,0 600x800}").value(),
               testing::ElementsAre(
@@ -263,7 +263,7 @@ TEST(ScreenInfoTest, MultipleScreens) {
               "Invalid screen info: }");
 }
 
-TEST(ScreenInfoTest, WorkArea) {
+TEST(HeadlessScreenInfoTest, WorkArea) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{ workAreaLeft=100 }").value()[0],
             HeadlessScreenInfo(
                 {.work_area_insets = gfx::Insets::TLBR(0, 100, 0, 0)}));
@@ -314,7 +314,7 @@ TEST(ScreenInfoTest, WorkArea) {
               "Invalid work area inset: -42");
 }
 
-TEST(ScreenInfoTest, Rotation) {
+TEST(HeadlessScreenInfoTest, Rotation) {
   EXPECT_EQ(HeadlessScreenInfo::FromString("{ rotation=0 }").value()[0],
             HeadlessScreenInfo({.rotation = 0}));
 
diff --git a/headless/BUILD.gn b/headless/BUILD.gn
index d0a84a0126fbd..2e84dd88cca94 100644
--- a/headless/BUILD.gn
+++ b/headless/BUILD.gn
@@ -265,8 +265,6 @@ component("headless_non_renderer") {
     "lib/browser/headless_request_context_manager.h",
     "lib/browser/headless_screen.cc",
     "lib/browser/headless_screen.h",
-    "lib/browser/headless_screen_info.cc",
-    "lib/browser/headless_screen_info.h",
     "lib/browser/headless_screen_orientation_delegate.cc",
     "lib/browser/headless_screen_orientation_delegate.h",
     "lib/browser/headless_web_contents_impl.cc",
@@ -365,6 +363,7 @@ component("headless_non_renderer") {
     "//components/embedder_support/origin_trials",
     "//components/headless/clipboard",
     "//components/headless/command_handler:switches",
+    "//components/headless/screen_info",
     "//components/headless/select_file_dialog",
     "//components/keyed_service/content",
     "//components/origin_trials:browser",
@@ -560,7 +559,6 @@ test("headless_unittests") {
   sources = [
     "lib/browser/headless_browser_impl_unittest.cc",
     "lib/browser/headless_client_hints_controller_delegate_unittest.cc",
-    "lib/browser/headless_screen_info_unittest.cc",
     "lib/renderer/allowlist_unittest.cc",
   ]
 
diff --git a/headless/lib/browser/DEPS b/headless/lib/browser/DEPS
index 84d0345883c14..9a4b17baea1d9 100644
--- a/headless/lib/browser/DEPS
+++ b/headless/lib/browser/DEPS
@@ -71,8 +71,5 @@ specific_include_rules = {
     "+components/prefs",
     "+components/metrics",
     "+components/variations",
-  ],
-  "headless_screen_info.cc": [
-    "+third_party/re2/src/re2/re2.h",
   ]
 }
diff --git a/headless/lib/browser/command_line_handler.cc b/headless/lib/browser/command_line_handler.cc
index 471d77fc76260..93ea6c65c814f 100644
--- a/headless/lib/browser/command_line_handler.cc
+++ b/headless/lib/browser/command_line_handler.cc
@@ -17,9 +17,9 @@
 #include "base/strings/string_number_conversions.h"
 #include "build/build_config.h"
 #include "cc/base/switches.h"
+#include "components/headless/screen_info/headless_screen_info.h"
 #include "components/viz/common/switches.h"
 #include "content/public/common/content_switches.h"
-#include "headless/lib/browser/headless_screen_info.h"
 #include "headless/public/switches.h"
 #include "net/http/http_util.h"
 #include "net/proxy_resolution/proxy_config.h"
diff --git a/headless/lib/browser/headless_screen.cc b/headless/lib/browser/headless_screen.cc
index 72473485d3ef1..2c693bf2a5e8f 100644
--- a/headless/lib/browser/headless_screen.cc
+++ b/headless/lib/browser/headless_screen.cc
@@ -6,7 +6,7 @@
 
 #include "base/check_deref.h"
 #include "base/containers/flat_set.h"
-#include "headless/lib/browser/headless_screen_info.h"
+#include "components/headless/screen_info/headless_screen_info.h"
 #include "ui/display/display_finder.h"
 #include "ui/display/display_list.h"
 #include "ui/display/util/display_util.h"