Modularize //chrome/browser/file_system_access

R=erikchen@chromium.org

Bug: 366272539
Change-Id: Iac1b4304dfd4c1775426d3eea08c55b31106db26
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5860419
Reviewed-by: Erik Chen <erikchen@chromium.org>
Commit-Queue: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/main@{#1355488}
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn
index 392043bf..640be07 100644
--- a/chrome/browser/BUILD.gn
+++ b/chrome/browser/BUILD.gn
@@ -551,16 +551,6 @@
     "feature_engagement/tracker_factory.h",
     "file_select_helper.cc",
     "file_select_helper.h",
-    "file_system_access/chrome_file_system_access_permission_context.cc",
-    "file_system_access/chrome_file_system_access_permission_context.h",
-    "file_system_access/file_system_access_features.cc",
-    "file_system_access/file_system_access_features.h",
-    "file_system_access/file_system_access_permission_context_factory.cc",
-    "file_system_access/file_system_access_permission_context_factory.h",
-    "file_system_access/file_system_access_permission_request_manager.cc",
-    "file_system_access/file_system_access_permission_request_manager.h",
-    "file_system_access/file_system_access_tab_helper.cc",
-    "file_system_access/file_system_access_tab_helper.h",
     "file_util_service.cc",
     "file_util_service.h",
     "first_party_sets/first_party_sets_navigation_throttle.cc",
@@ -1804,6 +1794,7 @@
     "//chrome/browser/feedback:feedback_impl",
     "//chrome/browser/google",
     "//chrome/browser/media/webrtc",
+    "//chrome/browser/file_system_access:impl",
     "//chrome/browser/search",
 
     # Circular dependency due to SystemNetworkContextManager.
@@ -1916,6 +1907,8 @@
     "//chrome/browser/favicon",
     "//chrome/browser/feedback",
     "//chrome/browser/feedback:feedback_impl",
+    "//chrome/browser/file_system_access",
+    "//chrome/browser/file_system_access:impl",
     "//chrome/browser/fingerprinting_protection",
     "//chrome/browser/first_party_sets",
     "//chrome/browser/image_decoder",
diff --git a/chrome/browser/ash/fileapi/BUILD.gn b/chrome/browser/ash/fileapi/BUILD.gn
index 1e0ad16..199e42f5 100644
--- a/chrome/browser/ash/fileapi/BUILD.gn
+++ b/chrome/browser/ash/fileapi/BUILD.gn
@@ -93,6 +93,7 @@
     "//chrome/browser/ash/fusebox",
     "//chrome/browser/ash/profiles",
     "//chrome/browser/extensions",
+    "//chrome/browser/file_system_access",
     "//chrome/common:common",
     "//chrome/common/extensions/api",
     "//chromeos/ash/components/dbus/cros_disks",
@@ -147,6 +148,7 @@
     "//chrome/browser/ash/fileapi",
     "//chrome/browser/ash/fileapi/test:test_support",
     "//chrome/browser/ash/login/users:test_support",
+    "//chrome/browser/file_system_access",
     "//chrome/browser/profiles:profile",
     "//chrome/test:test_support",
     "//chromeos/ash/components/dbus/cros_disks",
diff --git a/chrome/browser/ash/system_web_apps/BUILD.gn b/chrome/browser/ash/system_web_apps/BUILD.gn
index ce92315..d6204bf 100644
--- a/chrome/browser/ash/system_web_apps/BUILD.gn
+++ b/chrome/browser/ash/system_web_apps/BUILD.gn
@@ -105,6 +105,7 @@
     "//chrome/browser/ash/file_manager:test_support",
     "//chrome/browser/ash/system_web_apps/test_support",
     "//chrome/browser/ash/system_web_apps/test_support:test_support_ui",
+    "//chrome/browser/file_system_access",
     "//chrome/browser/ui",
     "//chrome/browser/ui/ash/shelf",
     "//chrome/browser/ui/ash/system_web_apps",
diff --git a/chrome/browser/chromeos/policy/dlp/BUILD.gn b/chrome/browser/chromeos/policy/dlp/BUILD.gn
index 61ec088c4..456fbfe 100644
--- a/chrome/browser/chromeos/policy/dlp/BUILD.gn
+++ b/chrome/browser/chromeos/policy/dlp/BUILD.gn
@@ -258,6 +258,7 @@
       "//chrome/browser",
       "//chrome/browser:browser_process",
       "//chrome/browser/chromeos/policy/dlp/test:test_support",
+      "//chrome/browser/file_system_access",
       "//chrome/browser/profiles:profile",
       "//chrome/browser/ui",
       "//chrome/common:constants",
diff --git a/chrome/browser/file_system_access/BUILD.gn b/chrome/browser/file_system_access/BUILD.gn
new file mode 100644
index 0000000..889d8f2
--- /dev/null
+++ b/chrome/browser/file_system_access/BUILD.gn
@@ -0,0 +1,127 @@
+# Copyright 2024 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("//components/enterprise/buildflags/buildflags.gni")
+import("//components/safe_browsing/buildflags.gni")
+
+assert(is_win || is_mac || is_linux || is_chromeos || is_android)
+
+source_set("file_system_access") {
+  sources = [
+    "chrome_file_system_access_permission_context.h",
+    "file_system_access_features.h",
+    "file_system_access_permission_context_factory.h",
+    "file_system_access_permission_request_manager.h",
+    "file_system_access_tab_helper.h",
+  ]
+  public_deps = [
+    "//base",
+    "//chrome/browser/permissions",
+    "//chrome/browser/profiles:profile",
+    "//components/enterprise/buildflags",
+    "//components/enterprise/common:files_scan_data",
+    "//content/public/browser",
+    "//third_party/blink/public/common",
+    "//url",
+  ]
+  if (!is_android) {
+    public_deps += [
+      "//chrome/browser/web_applications",
+      "//components/permissions",
+      "//components/permissions:permissions_common",
+    ]
+  }
+}
+
+source_set("impl") {
+  sources = [
+    "chrome_file_system_access_permission_context.cc",
+    "file_system_access_features.cc",
+    "file_system_access_permission_context_factory.cc",
+    "file_system_access_permission_request_manager.cc",
+    "file_system_access_tab_helper.cc",
+  ]
+  deps = [
+    ":file_system_access",
+    "//chrome/browser:browser_process",
+    "//chrome/browser/safe_browsing",
+    "//chrome/browser/ui",
+    "//components/content_settings/core/browser",
+    "//components/pdf/common:util",
+  ]
+  if (safe_browsing_mode != 0) {
+    deps += [ "//components/safe_browsing/content/common:file_type_policies" ]
+  }
+
+  if (!is_android) {
+    deps += [ "//extensions/browser" ]
+  }
+
+  public_deps = [ "//chrome/browser:browser_public_dependencies" ]
+}
+
+if (!is_android) {
+  source_set("browser_tests") {
+    testonly = true
+    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
+    sources = [
+      "chrome_file_system_access_permission_context_browsertest.cc",
+      "file_system_access_picker_requires_user_gesture_browsertest.cc",
+      "file_system_access_tab_helper_browsertest.cc",
+      "file_system_file_handle_browsertest.cc",
+      "file_system_observer_browsertest.cc",
+    ]
+
+    deps = [
+      ":file_system_access",
+      "//base",
+      "//base/test:test_support",
+      "//chrome/browser/profiles:profile",
+      "//chrome/test:test_support",
+      "//chrome/test:test_support_ui",
+      "//components/content_settings/core/browser:cookie_settings",
+      "//components/content_settings/core/common",
+      "//components/permissions",
+      "//components/permissions:permissions_common",
+      "//components/policy:generated",
+      "//components/policy:policy_code_generate",
+      "//components/policy/core/browser",
+      "//components/policy/core/common",
+      "//components/policy/core/common:common_constants",
+      "//components/policy/core/common:test_support",
+      "//content/public/browser",
+      "//content/public/common",
+      "//content/test:test_support",
+      "//extensions:test_support",
+      "//net:test_support",
+      "//testing/gtest",
+      "//ui/shell_dialogs",
+      "//url",
+    ]
+  }
+}
+
+source_set("unit_tests") {
+  testonly = true
+  sources = [ "chrome_file_system_access_permission_context_unittest.cc" ]
+  deps = [
+    ":file_system_access",
+    "//base/test:test_support",
+    "//chrome/test:test_support",
+    "//components/content_settings/core/browser",
+    "//components/sync_preferences:test_support",
+    "//content/test:test_support",
+    "//ui/shell_dialogs",
+    "//ui/webui",
+  ]
+
+  if (enterprise_cloud_content_analysis) {
+    deps += [ "//chrome/browser/enterprise/connectors/test:test_support" ]
+  }
+
+  if (!is_android) {
+    deps +=
+        [ "//chrome/browser/web_applications:web_applications_test_support" ]
+  }
+}
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn
index c8ff840..f0fc8150 100644
--- a/chrome/browser/ui/BUILD.gn
+++ b/chrome/browser/ui/BUILD.gn
@@ -409,6 +409,7 @@
     "//chrome/browser/devtools",
     "//chrome/browser/favicon",
     "//chrome/browser/feedback:feedback_impl",
+    "//chrome/browser/file_system_access",
     "//chrome/browser/fingerprinting_protection",
     "//chrome/browser/google",
     "//chrome/browser/image_decoder",
diff --git a/chrome/browser/ui/apps/BUILD.gn b/chrome/browser/ui/apps/BUILD.gn
index cdf6fee3..2f56543b 100644
--- a/chrome/browser/ui/apps/BUILD.gn
+++ b/chrome/browser/ui/apps/BUILD.gn
@@ -38,6 +38,7 @@
     "//chrome/browser/apps/platform_apps",
     "//chrome/browser/devtools",
     "//chrome/browser/favicon",
+    "//chrome/browser/file_system_access",
     "//chrome/browser/media/webrtc",
     "//chrome/browser/picture_in_picture",
     "//chrome/browser/profiles:profile",
diff --git a/chrome/browser/ui/ash/holding_space/BUILD.gn b/chrome/browser/ui/ash/holding_space/BUILD.gn
index 11a0f38..7e9e151 100644
--- a/chrome/browser/ui/ash/holding_space/BUILD.gn
+++ b/chrome/browser/ui/ash/holding_space/BUILD.gn
@@ -97,6 +97,7 @@
     "//chrome/browser/ash/file_suggest",
     "//chrome/browser/ash/file_suggest:test_support",
     "//chrome/browser/ash/profiles",
+    "//chrome/browser/file_system_access",
     "//chrome/browser/nearby_sharing/common",
     "//chrome/test:test_support",
     "//chromeos/ash/components/disks",
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 8c61a1bf3..762ac8b 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -1918,6 +1918,8 @@
       "//chrome/browser/favicon",
       "//chrome/browser/feedback",
       "//chrome/browser/feedback:feedback_impl",
+      "//chrome/browser/file_system_access",
+      "//chrome/browser/file_system_access:browser_tests",
       "//chrome/browser/first_party_sets",
       "//chrome/browser/headless:browser_tests",
       "//chrome/browser/icon_transcoder:browser_tests",
@@ -2694,11 +2696,6 @@
       "../browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api_browsertest.cc",
       "../browser/fast_shutdown_browsertest.cc",
       "../browser/favicon/content_favicon_driver_browsertest.cc",
-      "../browser/file_system_access/chrome_file_system_access_permission_context_browsertest.cc",
-      "../browser/file_system_access/file_system_access_picker_requires_user_gesture_browsertest.cc",
-      "../browser/file_system_access/file_system_access_tab_helper_browsertest.cc",
-      "../browser/file_system_access/file_system_file_handle_browsertest.cc",
-      "../browser/file_system_access/file_system_observer_browsertest.cc",
       "../browser/fingerprinting_protection/fingerprinting_protection_filter_browsertest.cc",
       "../browser/fingerprinting_protection/fingerprinting_protection_filter_ruleset_browsertest.cc",
       "../browser/first_party_sets/first_party_sets_browsertest.cc",
@@ -5588,6 +5585,7 @@
       "//chrome/browser/chromeos/printing/print_preview",
       "//chrome/browser/chromeos/smart_reader",
       "//chrome/browser/chromeos/video_conference",
+      "//chrome/browser/file_system_access",
       "//chrome/browser/lacros/account_manager:test_support_ui",
       "//chrome/browser/media/router:test_support",
       "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature",
@@ -6133,7 +6131,6 @@
     "../browser/favicon/favicon_utils_unittest.cc",
     "../browser/favicon/large_icon_service_factory_unittest.cc",
     "../browser/file_select_helper_unittest.cc",
-    "../browser/file_system_access/chrome_file_system_access_permission_context_unittest.cc",
     "../browser/first_party_sets/first_party_sets_navigation_throttle_unittest.cc",
     "../browser/first_party_sets/first_party_sets_overrides_policy_handler_unittest.cc",
     "../browser/first_party_sets/first_party_sets_policy_service_factory_unittest.cc",
@@ -6635,6 +6632,8 @@
     "//chrome/browser/favicon",
     "//chrome/browser/feedback",
     "//chrome/browser/feedback:feedback_impl",
+    "//chrome/browser/file_system_access",
+    "//chrome/browser/file_system_access:unit_tests",
     "//chrome/browser/fingerprinting_protection",
     "//chrome/browser/first_party_sets",
     "//chrome/browser/google:unit_tests",
@@ -11017,6 +11016,7 @@
       "//chrome/browser/autofill:test_support_ui",
       "//chrome/browser/devtools",
       "//chrome/browser/devtools:test_support",
+      "//chrome/browser/file_system_access",
       "//chrome/browser/media/router/discovery/access_code:access_code_cast_feature",
       "//chrome/browser/media/router/discovery/access_code:access_code_sink_service",
       "//chrome/browser/media/webrtc",