Componentize chrome/browser/badging/

This CL adds a BUILD.gn file to drive the compilation of
c/b/badging/, as per [1].

[1] docs/chrome_browser_design_principles.md


R=dljames@chromium.org

Bug: 353332589
Change-Id: I49a86470f29d73399757dec1d5f5facd0a82bf31
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6950617
Reviewed-by: Darryl James <dljames@chromium.org>
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/main@{#1515706}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 178ea85..7907640 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -3716,11 +3716,6 @@
       "accessibility/phrase_segmentation/dependency_parser_model_loader_factory.h",
       "apps/intent_helper/intent_chip_display_prefs.cc",
       "apps/intent_helper/intent_chip_display_prefs.h",
-      "badging/badge_manager.cc",
-      "badging/badge_manager.h",
-      "badging/badge_manager_delegate.h",
-      "badging/badge_manager_factory.cc",
-      "badging/badge_manager_factory.h",
       "banners/app_banner_manager_desktop.cc",
       "banners/app_banner_manager_desktop.h",
       "bookmarks/bookmark_expanded_state_tracker.cc",
@@ -4340,6 +4335,8 @@
       "//chrome/browser/actor/ui",
       "//chrome/browser/apps/app_service",
       "//chrome/browser/apps/link_capturing",
+      "//chrome/browser/badging",
+      "//chrome/browser/badging:impl",
       "//chrome/browser/contextual_cueing",
       "//chrome/browser/contextual_cueing:impl",
       "//chrome/browser/device_notifications",
@@ -4701,6 +4698,11 @@
       # TODO(crbug.com/353332589): Remove this circular dependency when c/b/profiles/profile_manager.h
       # gets componentized.
       "//chrome/browser/device_notifications:impl",
+
+      # TODO(crbug.com/353332589): Remove this circular dependency when:
+      # - c/b/taskbar/taskbar_decorator_win.h
+      # gets componentized.
+      "//chrome/browser/badging:impl",
     ]
 
     #!is_android
@@ -6335,8 +6337,6 @@
     sources += [
       "accessibility/caption_settings_dialog.h",
       "accessibility/caption_settings_dialog_win.cc",
-      "badging/badge_manager_delegate_win.cc",
-      "badging/badge_manager_delegate_win.h",
       "browser_switcher/browser_switcher_policy_migrator.cc",
       "browser_switcher/browser_switcher_policy_migrator.h",
       "browser_switcher/browser_switcher_service_win.cc",
@@ -6558,8 +6558,6 @@
       "accessibility/caption_settings_dialog_mac.cc",
       "app_controller_mac.h",
       "app_controller_mac.mm",
-      "badging/badge_manager_delegate_mac.cc",
-      "badging/badge_manager_delegate_mac.h",
       "browser_process_platform_part_mac.h",
       "browser_process_platform_part_mac.mm",
       "chrome_browser_application_mac.h",
diff --git a/chrome/browser/apps/app_shim/BUILD.gn b/chrome/browser/apps/app_shim/BUILD.gn
index e12846f..29ba78e7 100644
--- a/chrome/browser/apps/app_shim/BUILD.gn
+++ b/chrome/browser/apps/app_shim/BUILD.gn
@@ -33,6 +33,7 @@
     "//chrome/browser:browser_process",
     "//chrome/browser/apps/app_service",
     "//chrome/browser/apps/app_service:constants",
+    "//chrome/browser/badging",
     "//chrome/browser/profiles",
     "//chrome/browser/profiles:profile",
     "//chrome/browser/profiles:profile_util",
diff --git a/chrome/browser/badging/BUILD.gn b/chrome/browser/badging/BUILD.gn
new file mode 100644
index 0000000..dc83862
--- /dev/null
+++ b/chrome/browser/badging/BUILD.gn
@@ -0,0 +1,108 @@
+# 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.
+
+assert(!is_android)
+
+source_set("badging") {
+  sources = [
+    "badge_manager.h",
+    "badge_manager_delegate.h",
+    "badge_manager_factory.h",
+  ]
+  public_deps = [
+    "//base",
+    "//chrome/browser/profiles:profile",
+    "//components/keyed_service/core",
+    "//components/webapps/common",
+    "//content/public/browser",
+    "//mojo/public/cpp/bindings",
+    "//third_party/blink/public/common",
+    "//url",
+  ]
+
+  if (is_win) {
+    sources += [ "badge_manager_delegate_win.h" ]
+  }
+
+  if (is_mac) {
+    sources += [ "badge_manager_delegate_mac.h" ]
+  }
+}
+
+source_set("impl") {
+  sources = [
+    "badge_manager.cc",
+    "badge_manager_factory.cc",
+  ]
+  deps = [
+    ":badging",
+    "//base:i18n",
+    "//chrome/browser/ui/web_applications",
+    "//chrome/browser/web_applications",
+    "//chrome/browser/web_applications/proto",
+    "//components/prefs",
+    "//components/ukm",
+    "//services/metrics/public/cpp:gen_ukm_builders",
+    "//services/metrics/public/cpp:metrics_cpp",
+    "//services/metrics/public/cpp:ukm_builders",
+    "//ui/base",
+    "//ui/strings:ui_strings",
+    "//ui/strings:ui_strings_grit",
+  ]
+
+  if (is_win) {
+    sources += [ "badge_manager_delegate_win.cc" ]
+    deps += [ "//chrome/browser/ui/browser_window" ]
+  }
+
+  if (is_mac) {
+    sources += [ "badge_manager_delegate_mac.cc" ]
+    deps += [ "//chrome/browser/apps/app_shim" ]
+  }
+
+  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
+}
+
+source_set("test_support") {
+  sources = []
+  deps = []
+
+  if (!is_android) {
+    sources += [
+      "test_badge_manager_delegate.cc",
+      "test_badge_manager_delegate.h",
+    ]
+    public_deps = [
+      ":badging",
+      "//base",
+      "//components/webapps/common",
+    ]
+    deps += [ "//chrome/browser/profiles:profile" ]
+  }
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = []
+  deps = []
+
+  if (!is_android) {
+    sources += [ "badge_manager_unittest.cc" ]
+    deps += [
+      ":badging",
+      ":test_support",
+      "//base/test:test_support",
+      "//chrome/browser/web_applications",
+      "//chrome/browser/web_applications:web_applications_test_support",
+      "//chrome/test:test_support",
+      "//components/ukm:test_support",
+      "//content/test:test_support",
+      "//extensions:test_support",
+      "//extensions/common",
+      "//services/metrics/public/cpp:gen_ukm_builders",
+      "//services/metrics/public/cpp:ukm_builders",
+      "//testing/gtest",
+    ]
+  }
+}
diff --git a/chrome/browser/devtools/BUILD.gn b/chrome/browser/devtools/BUILD.gn
index 0fc7b994..a7dd595 100644
--- a/chrome/browser/devtools/BUILD.gn
+++ b/chrome/browser/devtools/BUILD.gn
@@ -347,6 +347,7 @@
   if (!is_android) {
     deps += [
       "//chrome/app:command_ids",
+      "//chrome/browser/badging",
       "//chrome/browser/first_party_sets",
       "//chrome/browser/ui/browser_window",
       "//chrome/browser/ui/media_router",
diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn
index 8772a74..a5fd2ae 100644
--- a/chrome/browser/profiles/BUILD.gn
+++ b/chrome/browser/profiles/BUILD.gn
@@ -338,6 +338,7 @@
       "//chrome/browser/accessibility/tree_fixing:service",
       "//chrome/browser/apps/app_service",
       "//chrome/browser/autofill",
+      "//chrome/browser/badging",
       "//chrome/browser/contextual_cueing",
       "//chrome/browser/devtools",
       "//chrome/browser/feedback",
diff --git a/chrome/browser/ui/web_applications/BUILD.gn b/chrome/browser/ui/web_applications/BUILD.gn
index efbfadd..985466e 100644
--- a/chrome/browser/ui/web_applications/BUILD.gn
+++ b/chrome/browser/ui/web_applications/BUILD.gn
@@ -358,6 +358,7 @@
     "//chrome/browser/apps/app_service:app_registry_cache_waiter",
     "//chrome/browser/apps/link_capturing",
     "//chrome/browser/apps/link_capturing:test_support",
+    "//chrome/browser/badging:test_support",
     "//chrome/browser/browsing_data:constants",
     "//chrome/browser/ui/web_applications/diagnostics:app_service_browser_tests",
     "//chrome/browser/web_applications",
diff --git a/chrome/browser/web_applications/app_service/BUILD.gn b/chrome/browser/web_applications/app_service/BUILD.gn
index d03698d..b101a171 100644
--- a/chrome/browser/web_applications/app_service/BUILD.gn
+++ b/chrome/browser/web_applications/app_service/BUILD.gn
@@ -19,6 +19,7 @@
 
   public_deps = [
     "//chrome/browser:browser_public_dependencies",
+    "//chrome/browser/badging",
     "//chrome/browser/media/webrtc",
     "//chrome/browser/notifications",
   ]
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 7a290c7..8bcc85cf 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -811,6 +811,7 @@
     # Non-android deps for "test_support" target.
     deps += [
       "//chrome/browser/apps/link_capturing",
+      "//chrome/browser/badging:test_support",
       "//chrome/browser/task_manager",
       "//chrome/browser/themes",
       "//chrome/browser/ui/apps",
@@ -838,8 +839,6 @@
     }
 
     sources += [
-      "../browser/badging/test_badge_manager_delegate.cc",
-      "../browser/badging/test_badge_manager_delegate.h",
       "../browser/banners/test_app_banner_manager_desktop.cc",
       "../browser/banners/test_app_banner_manager_desktop.h",
       "../browser/download/download_browsertest_utils.cc",
@@ -2347,6 +2346,7 @@
       "//chrome/browser/background:test_support",
       "//chrome/browser/background_fetch:browser_tests",
       "//chrome/browser/background_sync:browser_tests",
+      "//chrome/browser/badging",
       "//chrome/browser/battery",
       "//chrome/browser/bitmap_fetcher:browser_tests",
       "//chrome/browser/breadcrumbs:browser_tests",
@@ -8383,11 +8383,6 @@
     }
 
     sources += [
-      # Badging isn't supported on Android.
-      "../browser/badging/badge_manager_unittest.cc",
-    ]
-
-    sources += [
       # Device API isn't supported on Android.
       "../browser/device_api/device_service_unittest.cc",
       "../browser/device_api/managed_configuration_service_unittest.cc",
@@ -8503,6 +8498,7 @@
       "//chrome/browser/apps/link_capturing:test_support",
       "//chrome/browser/apps/link_capturing:unit_tests",
       "//chrome/browser/background",
+      "//chrome/browser/badging:unit_tests",
       "//chrome/browser/companion/text_finder:unit_tests",
       "//chrome/browser/content_settings:unit_tests",
       "//chrome/browser/enterprise/connectors/analysis:features",