Componentize chrome/browser/background_sync

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

[1] docs/chrome_browser_design_principles.md

R=dljames@chromium.org

Bug: 353332589
Change-Id: I5fdcfd3713a6a337b0f2b901d61a95fdb323e749
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6947107
Reviewed-by: Darryl James <dljames@chromium.org>
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/main@{#1515615}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 283da969..b405b93 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -201,12 +201,6 @@
     "accessibility/prefers_default_scrollbar_styles_prefs.h",
     "after_startup_task_utils.cc",
     "after_startup_task_utils.h",
-    "background_sync/background_sync_controller_factory.cc",
-    "background_sync/background_sync_controller_factory.h",
-    "background_sync/background_sync_delegate_impl.cc",
-    "background_sync/background_sync_delegate_impl.h",
-    "background_sync/periodic_background_sync_permission_context.cc",
-    "background_sync/periodic_background_sync_permission_context.h",
     "bad_message.cc",
     "bad_message.h",
     "bluetooth/bluetooth_chooser_context_factory.cc",
@@ -1830,12 +1824,20 @@
     # - c/b/profiles/profile_manager.h"
     "//chrome/browser/usb:impl",
 
+    # TODO(crbug.com/353332589): Remove this circular dependencies when the following
     # headers are componentized:
     # - c/b/download/download_request_limiter.h
     # - c/b/download/background_download_service_factory.h
     # - c/b/offline_items_collection/offline_content_aggregator_factory.h
     # - c/b/metrics/ukm_background_recorder_service.h
     "//chrome/browser/background_fetch:impl",
+
+    # TODO(crbug.com/353332589): Remove this circular dependencies when the following
+    # headers get componentized:
+    # - c/b/metrics/ukm_background_recorder_service.h
+    # - c/b/engagement/site_engagement_service_factory.h
+    # - c/b/webapps/installable/installable_utils.h
+    "//chrome/browser/background_sync:impl",
   ]
 
   public_deps = [
@@ -1893,6 +1895,8 @@
     "//chrome/browser/background:impl",
     "//chrome/browser/background_fetch",
     "//chrome/browser/background_fetch:impl",
+    "//chrome/browser/background_sync",
+    "//chrome/browser/background_sync:impl",
     "//chrome/browser/battery",
     "//chrome/browser/bitmap_fetcher",
     "//chrome/browser/breadcrumbs",
@@ -4657,10 +4661,12 @@
       "//chrome/browser/ui/passwords/bubble_controllers:impl",
 
       # TODO(crbug.com/438226511): Remove this circular dependency when:
-      # - headers in c/b/notifications/ and c/b/sessions/
+      # - c/b/engagement/site_engagement_service_factory.h
+      # - c/b/sessions/app_session_service.h
+      # - c/b/sessions/app_session_service_factory.h
+      # - c/b/sessions/session_service_base.h
+      # - c/b/sessions/session_service_lookup.h
       # - c/b/after_startup_task_utils.h
-      # - c/b/app_mode/app_mode_utils.h
-      # - app_mode/app_mode_utils.h
       # ... get componentized.
       "//chrome/browser/ui/web_applications:impl",
 
diff --git a/chrome/browser/background_sync/BUILD.gn b/chrome/browser/background_sync/BUILD.gn
new file mode 100644
index 0000000..26fe57d7
--- /dev/null
+++ b/chrome/browser/background_sync/BUILD.gn
@@ -0,0 +1,106 @@
+# 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("background_sync") {
+  sources = [
+    "background_sync_controller_factory.h",
+    "background_sync_delegate_impl.h",
+    "periodic_background_sync_permission_context.h",
+  ]
+  public_deps = [
+    "//base",
+    "//chrome/browser/profiles:profile",
+    "//chrome/browser/profiles/keep_alive",
+    "//components/background_sync",
+    "//components/content_settings/core/common",
+    "//components/permissions",
+    "//components/site_engagement/content",
+    "//components/webapps/common",
+    "//content/public/browser",
+    "//url",
+  ]
+  if (!is_android) {
+    public_deps += [
+      "//chrome/browser/web_applications",
+      "//components/keep_alive_registry",
+    ]
+  }
+}
+
+source_set("impl") {
+  sources = [
+    "background_sync_controller_factory.cc",
+    "background_sync_delegate_impl.cc",
+    "periodic_background_sync_permission_context.cc",
+  ]
+  deps = [
+    ":background_sync",
+    "//chrome/browser/content_settings:content_settings_factory",
+    "//chrome/browser/search_engines",
+    "//chrome/common:chrome_features",
+    "//components/content_settings/core/browser",
+    "//components/search_engines",
+    "//services/network/public/mojom:mojom_permissions_policy",
+  ]
+  if (!is_android) {
+    deps += [ "//chrome/browser/web_applications/proto" ]
+  }
+
+  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [
+    "background_sync_controller_impl_unittest.cc",
+    "periodic_background_sync_permission_context_unittest.cc",
+  ]
+  deps = [
+    ":background_sync",
+    "//base/test:test_support",
+    "//chrome/browser/content_settings:content_settings_factory",
+    "//chrome/browser/history",
+    "//chrome/test:test_support",
+    "//components/content_settings/core/browser",
+    "//components/history/core/browser",
+    "//components/history/core/test",
+    "//components/variations",
+    "//content/test:test_support",
+    "//testing/gmock",
+    "//testing/gtest",
+    "//third_party/blink/public/common",
+  ]
+  if (!is_android) {
+    deps +=
+        [ "//chrome/browser/web_applications:web_applications_test_support" ]
+  }
+}
+
+if (!is_android) {
+  source_set("browser_tests") {
+    testonly = true
+    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+    sources = [
+      "background_sync_browsertest.cc",
+      "background_sync_content_setting_browsertest.cc",
+      "background_sync_metrics_browsertest.cc",
+    ]
+    deps = [
+      ":background_sync",
+      "//chrome/browser/content_settings:content_settings_factory",
+      "//chrome/browser/profiles:profile",
+      "//chrome/browser/ui/tabs:tab_strip",
+      "//chrome/test:test_support",
+      "//chrome/test:test_support_ui",
+      "//components/background_sync",
+      "//components/content_settings/core/browser",
+      "//components/ukm:test_support",
+      "//content/test:test_support",
+      "//net:test_support",
+      "//services/metrics/public/cpp:gen_ukm_builders",
+      "//services/metrics/public/cpp:metrics_cpp",
+      "//services/metrics/public/cpp:ukm_builders",
+    ]
+  }
+}
diff --git a/chrome/browser/background_sync/background_sync_delegate_impl.h b/chrome/browser/background_sync/background_sync_delegate_impl.h
index 492986e..3d269b8 100644
--- a/chrome/browser/background_sync/background_sync_delegate_impl.h
+++ b/chrome/browser/background_sync/background_sync_delegate_impl.h
@@ -12,13 +12,16 @@
 #include "chrome/browser/profiles/keep_alive/scoped_profile_keep_alive.h"
 #include "chrome/browser/profiles/profile.h"
 #include "components/background_sync/background_sync_delegate.h"
-#include "components/keep_alive_registry/scoped_keep_alive.h"
 #include "components/site_engagement/content/site_engagement_observer.h"
 #include "components/webapps/common/web_app_id.h"
 #include "content/public/browser/background_sync_controller.h"
 #include "content/public/browser/browser_thread.h"
 #include "url/origin.h"
 
+#if !BUILDFLAG(IS_ANDROID)
+#include "components/keep_alive_registry/scoped_keep_alive.h"
+#endif
+
 class Profile;
 class HostContentSettingsMap;
 class ScopedKeepAlive;
diff --git a/chrome/browser/permissions/BUILD.gn b/chrome/browser/permissions/BUILD.gn
index 9304f6c4..9c49223 100644
--- a/chrome/browser/permissions/BUILD.gn
+++ b/chrome/browser/permissions/BUILD.gn
@@ -72,6 +72,7 @@
     "//chrome/browser:browser_process",
     "//chrome/browser/app_mode",
     "//chrome/browser/background_fetch",
+    "//chrome/browser/background_sync",
     "//chrome/browser/content_extraction",
     "//chrome/browser/content_settings:content_settings_factory",
     "//chrome/browser/favicon",
diff --git a/chrome/browser/profiles/BUILD.gn b/chrome/browser/profiles/BUILD.gn
index 03f61bc..8772a74 100644
--- a/chrome/browser/profiles/BUILD.gn
+++ b/chrome/browser/profiles/BUILD.gn
@@ -237,6 +237,7 @@
     "//chrome/browser/autofill",
     "//chrome/browser/background",
     "//chrome/browser/background_fetch",
+    "//chrome/browser/background_sync",
     "//chrome/browser/bitmap_fetcher",
     "//chrome/browser/breadcrumbs",
     "//chrome/browser/commerce",
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 68bd51f5..1fec26c 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -2346,6 +2346,7 @@
       "//chrome/browser/background",
       "//chrome/browser/background:test_support",
       "//chrome/browser/background_fetch:browser_tests",
+      "//chrome/browser/background_sync:browser_tests",
       "//chrome/browser/battery",
       "//chrome/browser/bitmap_fetcher:browser_tests",
       "//chrome/browser/breadcrumbs:browser_tests",
@@ -3177,9 +3178,6 @@
       "../browser/ai/ai_data_keyed_service_browsertest.cc",
       "../browser/attribution_reporting/chrome_attribution_browsertest.cc",
       "../browser/autofill/content_autofill_shared_storage_handler_browsertest.cc",
-      "../browser/background_sync/background_sync_browsertest.cc",
-      "../browser/background_sync/background_sync_content_setting_browsertest.cc",
-      "../browser/background_sync/background_sync_metrics_browsertest.cc",
       "../browser/banners/app_banner_manager_browsertest.cc",
       "../browser/banners/app_banner_manager_desktop_browsertest.cc",
       "../browser/battery/battery_metrics_browsertest.cc",
@@ -6325,8 +6323,6 @@
     "../browser/apps/icon_standardizer_unittest.cc",
     "../browser/apps/user_type_filter_unittest.cc",
     "../browser/autofill/automated_tests/cache_replayer_unittest.cc",
-    "../browser/background_sync/background_sync_controller_impl_unittest.cc",
-    "../browser/background_sync/periodic_background_sync_permission_context_unittest.cc",
     "../browser/battery/battery_saver_unittest.cc",
     "../browser/bluetooth/bluetooth_chooser_context_unittest.cc",
     "../browser/bookmarks/managed_bookmark_service_unittest.cc",
@@ -6849,6 +6845,7 @@
     "//chrome/browser/autofill",
     "//chrome/browser/background:unit_tests",
     "//chrome/browser/background_fetch:unit_tests",
+    "//chrome/browser/background_sync:unit_tests",
     "//chrome/browser/battery",
     "//chrome/browser/bitmap_fetcher",
     "//chrome/browser/bitmap_fetcher:unit_tests",