# Copyright 2020 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//chrome/common/features.gni")
import("//components/captive_portal/core/features.gni")
import("//components/enterprise/buildflags/buildflags.gni")
import("//components/guest_view/buildflags/buildflags.gni")
import("//components/offline_pages/buildflags/features.gni")
import("//components/on_device_translation/buildflags/features.gni")
import("//components/signin/features.gni")
import("//components/spellcheck/spellcheck_build_features.gni")
import("//extensions/buildflags/buildflags.gni")

# This target should be the default place for adding public interface things
# (ie, non-factory, non-impl). There will likely need to be a :factory or :impl
# target (maybe both) for those eventually.
source_set("profiles") {
  public = [
    "incognito_helpers.h",
    "profile_key.h",
    "profiles_state.h",
    "sql_init_error_message_ids.h",
  ]

  if (is_android) {
    public += [ "profile_key_android.h" ]
  }

  public_deps = [
    ":profile",
    ":profile_manager",
    "//build:chromeos_buildflags",
    "//components/leveldb_proto",
    "//sql",
  ]
}

# This set of targets is currently logically homed in the profiles directory,
# but is a grab-bag of different features with different dependencies. This
# should likely be cleaned up at some point.
source_set("misc") {
  sources = [
    "bookmark_model_loaded_observer.cc",
    "bookmark_model_loaded_observer.h",
    "chrome_version_service.cc",
    "incognito_helpers.cc",
    "off_the_record_profile_impl.cc",
    "off_the_record_profile_impl.h",
    "profile_avatar_downloader.cc",
    "profile_avatar_downloader.h",
    "profile_impl.cc",
    "profile_impl.h",
    "profile_key.cc",
    "profiles_state.cc",
    "sql_init_error_message_ids.cc",
    "storage_partition_descriptor.h",
  ]

  public_deps = [
    ":profiles",
    "//chrome/browser:browser_public_dependencies",
  ]

  deps = [
    ":profile",
    ":profile_downloader",
    ":profile_manager",
    ":profile_util",
    "//base",
    "//chrome/app:branded_strings",
    "//chrome/app:generated_resources",
    "//chrome/browser:browser_process",
    "//chrome/browser:buildflags",
    "//chrome/browser:flags",
    "//chrome/browser:global_features",
    "//chrome/browser:startup_data",
    "//chrome/browser/accessibility",
    "//chrome/browser/app_mode",
    "//chrome/browser/background",
    "//chrome/browser/background_fetch",
    "//chrome/browser/background_sync",
    "//chrome/browser/bitmap_fetcher",
    "//chrome/browser/bookmarks",
    "//chrome/browser/browsing_data",
    "//chrome/browser/client_hints",
    "//chrome/browser/content_index",
    "//chrome/browser/content_settings",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/dom_distiller",
    "//chrome/browser/download",
    "//chrome/browser/enterprise/isolated_mode",
    "//chrome/browser/file_system_access",
    "//chrome/browser/first_run",
    "//chrome/browser/heavy_ad_intervention",
    "//chrome/browser/image_decoder",
    "//chrome/browser/lifetime",
    "//chrome/browser/net",
    "//chrome/browser/origin_trials",
    "//chrome/browser/password_manager/factories",
    "//chrome/browser/permissions",
    "//chrome/browser/prefs",
    "//chrome/browser/prefs:util",
    "//chrome/browser/privacy",
    "//chrome/browser/privacy_sandbox:headers",
    "//chrome/browser/profiles/keep_alive",
    "//chrome/browser/push_messaging",
    "//chrome/browser/push_messaging:service_impl_public",
    "//chrome/browser/reading_list",
    "//chrome/browser/reduce_accept_language",
    "//chrome/browser/safe_browsing",
    "//chrome/browser/sessions",
    "//chrome/browser/ssl",
    "//chrome/browser/storage",
    "//chrome/browser/subscription_eligibility",
    "//chrome/browser/transition_manager",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/startup",
    "//chrome/browser/ui/webui:prefs_internals_source",
    "//chrome/browser/ui/zoom",
    "//chrome/browser/updates/announcement_notification",
    "//chrome/browser/webid",
    "//chrome/common",
    "//chrome/common:buildflags",
    "//chrome/common:constants",
    "//components/background_sync",
    "//components/bookmarks/browser",
    "//components/browsing_data/content",
    "//components/content_settings/core/browser",
    "//components/domain_reliability",
    "//components/embedder_support",
    "//components/guest_view/buildflags",
    "//components/heavy_ad_intervention",
    "//components/keyed_service/content",
    "//components/language/core/common",
    "//components/policy/core/browser",
    "//components/policy/core/common",
    "//components/pref_registry",
    "//components/prefs",
    "//components/profile_metrics",
    "//components/signin/public/base",
    "//components/signin/public/identity_manager",
    "//components/site_isolation",
    "//components/spellcheck:buildflags",
    "//components/supervised_user/core/browser",
    "//components/user_prefs",
    "//components/webui/flags",
    "//components/zoom",
    "//content/public/browser",
    "//media/mojo/services",
    "//net",
    "//sql",
    "//ui/base",
  ]

  if (is_android) {
    sources += [
      "android/profile_manager_utils.cc",
      "android/profile_resolver.cc",
      "android/profile_resolver.h",
      "profile_android.cc",
      "profile_key_android.cc",
      "profile_manager_android.cc",
    ]
    deps += [
      "//chrome/browser:profile_key_startup_accessor",
      "//chrome/browser/android:profile_token",
      "//chrome/browser/profiles/android:jni_headers",
      "//chrome/common:constants",
      "//content/public/browser",
    ]
  } else {
    deps += [
      "//chrome/browser/accessibility/tree_fixing:prefs",
      "//chrome/browser/themes",
      "//chrome/browser/ui/dialogs:browser_dialogs",
      "//chrome/browser/ui/signin",
    ]
  }

  if (!is_chromeos) {
    # profiles_state.cc uses GAIAInfoUpdateService on non-ChromeOS platforms.
    deps += [ ":gaia_info_update_service" ]
  }

  if (!is_android && !is_chromeos) {
    sources += [
      "avatar_menu.cc",
      "avatar_menu.h",
      "avatar_menu_desktop.cc",
      "avatar_menu_observer.h",
      "profile_activity_metrics_recorder.cc",
      "profile_activity_metrics_recorder.h",
      "profile_list_desktop.cc",
      "profile_list_desktop.h",
    ]
    deps += [
      "//chrome/browser/metrics/desktop_session_duration",
      "//chrome/browser/ui:chrome_pages",
    ]
  }

  if (is_win) {
    sources += [
      "profile_load_tracker_win.cc",
      "profile_load_tracker_win.h",
      "profile_shortcut_manager_win.cc",
      "profile_shortcut_manager_win.h",
    ]
    deps += [
      "//chrome/browser/policy:path_parser",
      "//chrome/browser/win",
    ]
  } else {
    sources += [ "profile_shortcut_manager_stub.cc" ]
  }

  if (is_linux || is_mac) {
    deps += [
      "//chrome/browser/gapis",
      "//components/gapis",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser:browser_process_platform_part",
      "//chrome/browser/ash/account_manager",
      "//chrome/browser/ash/app_mode",
      "//chrome/browser/ash/arc/session:service_launcher",
      "//chrome/browser/ash/locale",
      "//chrome/browser/ash/login/session",
      "//chrome/browser/ash/login/signin",
      "//chrome/browser/ash/preferences",
      "//chrome/browser/ash/profiles",
      "//chrome/browser/ash/secure_channel",
      "//chromeos/ash/components/account_manager",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/ash/components/demo_mode",
      "//chromeos/components/kiosk",
    ]
  }

  if (enable_guest_view) {
    deps += [ "//components/guest_view/browser" ]
  }

  if (enable_spellcheck) {
    deps += [ "//chrome/browser/spellchecker" ]
  }

  if (enable_extensions_core) {
    deps += [ "//chrome/browser/extensions" ]
  }

  if (enable_bound_session_credentials) {
    deps += [ "//components/unexportable_keys/mojom:mojo_service" ]
  }
}

if (!is_chromeos) {
  source_set("gaia_info_update_service") {
    public = [
      "gaia_info_update_service.h",
      "gaia_info_update_service_factory.h",
    ]
    sources = [
      "gaia_info_update_service.cc",
      "gaia_info_update_service_factory.cc",
    ]
    public_deps = [
      ":profile",
      ":profile_downloader",
      ":profile_util",
      "//base",
      "//components/keyed_service/core",
      "//components/signin/public/identity_manager",
      "//skia",
      "//ui/gfx",
    ]
    deps = [
      ":profile_manager",
      ":profiles",
      "//chrome/browser:browser_process",
      "//chrome/browser/signin",
      "//chrome/common:buildflags",
      "//chrome/common:constants",
      "//components/pref_registry",
      "//components/prefs",
      "//components/signin/public/base",
      "//content/public/browser",
      "//google_apis",
    ]
  }
}

source_set("policy_handlers") {
  public = [
    "chrome_incognito_mode_policy_handler.h",
    "force_safe_search_policy_handler.h",
    "force_youtube_safety_mode_policy_handler.h",
  ]
  sources = [
    "chrome_incognito_mode_policy_handler.cc",
    "force_safe_search_policy_handler.cc",
    "force_youtube_safety_mode_policy_handler.cc",
  ]
  deps = [
    "//base",
    "//chrome/browser/prefs",
    "//components/policy:generated",
    "//components/policy/core/browser",
    "//components/policy/core/common",
    "//components/prefs",
    "//components/safe_search_api",
    "//components/strings:components_strings",
  ]

  if (is_win) {
    deps += [ "//chrome/credential_provider/common:common_constants" ]
  }

  if (is_linux || is_win || is_mac) {
    public += [ "guest_mode_policy_handler.h" ]
    sources += [ "guest_mode_policy_handler.cc" ]
    deps += [
      "//chrome/browser/policy",
      "//chrome/common:constants",
    ]
  }
}

source_set("renderer_updater") {
  public = [
    "renderer_updater.h",
    "renderer_updater_factory.h",
  ]

  sources = [
    "renderer_updater.cc",
    "renderer_updater_factory.cc",
  ]

  public_deps = [
    ":profile",
    "//base",
    "//build:chromeos_buildflags",
    "//chrome/browser:browser_public_dependencies",
    "//chrome/common",
    "//components/content_settings/core/browser",
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/signin/public/base",
    "//mojo/public/cpp/bindings",
  ]

  deps = [
    "//chrome/browser/content_settings",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/signin",
    "//chrome/common:constants",
    "//components/content_settings/common:mojom",
    "//components/content_settings/core/common",
    "//components/keyed_service/content",
    "//components/policy/core/common",
    "//content/public/browser",
    "//content/public/common",
    "//extensions/buildflags",
    "//ipc",
    "//services/network/public/cpp",
  ]

  if (is_chromeos) {
    deps += [ "//chrome/browser/ash/login/signin" ]
  }

  if (enable_bound_session_credentials) {
    deps += [ "//components/unexportable_keys/mojom:mojo_service" ]
  }
}

# This target should be very minimal, likely no new sources should be added
# here. It should not depend on anything besides flags/constants in
# //chrome/browser/* because almost everything else depends on it.
source_set("profile") {
  public = [
    "profile.h",
    "profile_keyed_service_factory.h",
    "profile_manager_observer.h",
    "profile_observer.h",
    "profile_selections.h",
    "refcounted_profile_keyed_service_factory.h",
  ]

  sources = [
    "profile.cc",
    "profile_keyed_service_factory.cc",
    "profile_selections.cc",
    "refcounted_profile_keyed_service_factory.cc",
  ]

  public_deps = [
    "//base",
    "//components/media_router/common",
  ]

  # Cannot depend on //chrome/browser:browser.
  deps = [
    "//build:chromeos_buildflags",
    "//chrome/browser/browsing_data:constants",
    "//chrome/common:buildflags",
    "//chrome/common:constants",
    "//components/keyed_service/content",
    "//components/language/core/browser",
    "//components/live_caption:constants",
    "//components/pref_registry",
    "//components/prefs",
    "//components/profile_metrics",
    "//components/sync/service",
    "//components/variations",
    "//content/public/browser",
    "//extensions/buildflags",
  ]
  if (enable_extensions) {
    deps += [ "//extensions/browser" ]
  }
  if (is_chromeos) {
    deps += [
      "//ash/constants",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/constants",
    ]
  }
  if (is_android) {
    deps += [ "//chrome/browser/profiles/android:jni_headers" ]
  }
}

source_set("profile_manager") {
  sources = [
    "chrome_version_service.h",
    "profile_destroyer.h",
    "profile_manager.h",
    "profile_metrics.h",
    "profile_shortcut_manager.h",
  ]

  deps = [
    ":profile",
    "//base",
    "//build:chromeos_buildflags",
    "//chrome/common:buildflags",
    "//components/profile_metrics",
    "//content/public/browser",
  ]

  if (!is_android) {
    sources += [
      "delete_profile_helper.h",
      "profile_window.h",
    ]
    deps += [ "//chrome/browser/ui/browser_window" ]
  }

  if (is_android) {
    sources += [ "profile_manager_android.h" ]
  }
}

source_set("profile_manager_impl") {
  sources = [
    "profile_destroyer.cc",
    "profile_manager.cc",
    "profile_metrics.cc",
    "profile_shortcut_manager.cc",
  ]

  deps = [
    ":profile",
    ":profile_manager",
    ":profile_util",
    "//base",
    "//chrome/browser:browser_features",
    "//chrome/browser:browser_process",
    "//chrome/browser:browser_process_platform_part",
    "//chrome/browser:buildflags",
    "//chrome/browser:flags",
    "//chrome/browser/accessibility",
    "//chrome/browser/browsing_data",
    "//chrome/browser/lifetime",
    "//chrome/browser/navigation_predictor",
    "//chrome/browser/prefs",
    "//chrome/browser/profiles/keep_alive",
    "//chrome/browser/signin",
    "//chrome/browser/supervised_user",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/unified_consent",
    "//chrome/common:buildflags",
    "//chrome/common:constants",
    "//components/crash/core/common",
    "//components/profile_metrics",
    "//components/signin/core/browser",
    "//components/signin/public/base:signin_buildflags",
    "//components/supervised_user/core/browser",
    "//components/supervised_user/core/common",
    "//components/sync/base",
    "//components/user_manager",
    "//content/public/browser",
    "//extensions/buildflags",
    "//google_apis",
  ]

  if (enable_extensions) {
    deps += [ "//chrome/browser/extensions" ]
  }

  if (!is_android) {
    sources += [
      "delete_profile_helper.cc",
      "profile_window.cc",
    ]
    deps += [
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/dialogs:browser_dialogs",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/signin",
      "//chrome/browser/ui/startup",
      "//chrome/browser/web_applications",
      "//components/live_caption",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser/ash/account_manager",
      "//chrome/browser/ash/arc/policy",
      "//chrome/browser/ash/profiles",
      "//chrome/browser/chromeos/extensions/desk_api",
      "//chromeos/ash/components/browser_context_helper",
      "//chromeos/ash/experiences/arc/session:arc_base_enums",
    ]
  }
}

source_set("profile_io_data") {
  public = [ "profile_io_data.h" ]

  sources = [ "profile_io_data.cc" ]

  deps = [
    "//base",
    "//chrome/common",
    "//chrome/common:buildflags",
    "//components/dom_distiller/core",
    "//extensions/buildflags",
    "//net:buildflags",
    "//url",
  ]

  if (is_linux || is_win || is_mac || is_chromeos) {
    deps += [ "//components/webapps/isolated_web_apps:scheme" ]
  }

  if (enable_extensions) {
    deps += [ "//extensions/common:common_constants" ]
  }
}

source_set("profile_util") {
  sources = [
    "nuke_profile_directory_utils.h",
    "pref_service_builder_utils.h",
    "profile_attributes_entry.h",
    "profile_attributes_init_params.h",
    "profile_attributes_storage.h",
    "profile_attributes_storage_observer.h",
    "profile_avatar_icon_util.h",
    "profile_statistics.h",
    "profile_statistics_aggregator.h",
    "profile_statistics_common.h",
    "profile_statistics_factory.h",
    "reporting_util.h",
  ]

  public_deps = [
    ":profile",
    "//base",
    "//build:chromeos_buildflags",
    "//components/account_id",
    "//components/autofill/core/browser",
    "//components/browsing_data/core",
    "//components/enterprise/common/proto:connectors_proto",
    "//components/enterprise/common/proto:upload_request_response",
    "//components/keyed_service/core",
    "//components/password_manager/core/browser/password_store:password_store_interface",
    "//components/signin/public/identity_manager:tribool",
    "//device/fido",
    "//mojo/public/cpp/bindings",
    "//services/preferences/public/mojom",
    "//skia",
    "//ui/base",
    "//ui/gfx",
  ]
}

source_set("profile_util_impl") {
  sources = [
    "nuke_profile_directory_utils.cc",
    "pref_service_builder_utils.cc",
    "profile_attributes_entry.cc",
    "profile_attributes_init_params.cc",
    "profile_attributes_storage.cc",
    "profile_avatar_icon_util.cc",
    "profile_statistics.cc",
    "profile_statistics_aggregator.cc",
    "profile_statistics_common.cc",
    "profile_statistics_factory.cc",
    "reporting_util.cc",
  ]

  public_deps = [
    "//chrome/browser:browser_public_dependencies",
    "//chrome/browser/browsing_data",
  ]

  deps = [
    ":misc",
    ":profile",
    ":profile_manager",
    ":profile_util",
    "//base",
    "//base:i18n",
    "//build:chromeos_buildflags",
    "//cc/paint",
    "//chrome/app:generated_resources",
    "//chrome/app/vector_icons",
    "//chrome/browser:browser_process",
    "//chrome/browser:browser_process_platform_part",
    "//chrome/browser/autofill",
    "//chrome/browser/bookmarks",
    "//chrome/browser/history",
    "//chrome/browser/password_manager/factories",
    "//chrome/browser/prefs",
    "//chrome/browser/profiles",
    "//chrome/browser/safe_browsing",
    "//chrome/browser/supervised_user",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/profiles",
    "//chrome/browser/webauthn:chrome_web_authentication_delegate",
    "//chrome/browser/webdata_services",
    "//chrome/common",
    "//chrome/common:constants",
    "//components/account_id",
    "//components/browsing_data/core",
    "//components/embedder_support:user_agent",
    "//components/enterprise/common/proto:connectors_proto",
    "//components/keyed_service/content",
    "//components/policy/core/browser",
    "//components/policy/core/common",
    "//components/pref_registry",
    "//components/prefs",
    "//components/profile_metrics",
    "//components/signin/public/base",
    "//components/signin/public/identity_manager",
    "//components/supervised_user/core/browser",
    "//components/sync_preferences",
    "//components/variations/service",
    "//components/vector_icons",
    "//content/public/browser",
    "//services/preferences/public/mojom",
    "//third_party/icu:icui18n",
    "//ui/base",
    "//ui/color",
    "//ui/color/dynamic_color",
    "//ui/gfx",
    "//ui/gfx:color_utils",
    "//ui/gfx/geometry",
    "//ui/native_theme",
    "//url",
  ]

  if (!is_android) {
    deps += [
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/views:dotted_icon",
    ]
  }

  if (is_android) {
    deps += [ "//components/supervised_user/core/browser/android" ]
  }

  if (is_chromeos) {
    deps += [
      "//chrome/browser/ash/login/users",
      "//chrome/browser/ash/policy/core",
      "//chrome/browser/ash/profiles",
    ]
  }
}

source_set("profiles_extra_parts") {
  sources = [ "chrome_browser_main_extra_parts_profiles.h" ]

  public_deps = [ "//chrome/browser:main_extra_parts" ]
}

source_set("profiles_extra_parts_impl") {
  sources = [ "chrome_browser_main_extra_parts_profiles.cc" ]

  deps = [
    ":misc",
    ":profile_manager",
    ":profile_util",
    ":profiles_extra_parts",
    ":renderer_updater",
    "//base",
    "//chrome/browser:browser_process",
    "//chrome/browser:chrome_browser_main",
    "//chrome/browser:font_pref",
    "//chrome/browser/accessibility",
    "//chrome/browser/account_settings",
    "//chrome/browser/affiliations",
    "//chrome/browser/ai",
    "//chrome/browser/autocomplete",
    "//chrome/browser/autocomplete:aim_eligibility_service",
    "//chrome/browser/autofill",
    "//chrome/browser/background",
    "//chrome/browser/background_fetch",
    "//chrome/browser/background_sync",
    "//chrome/browser/bitmap_fetcher",
    "//chrome/browser/bluetooth",
    "//chrome/browser/bookmarks",
    "//chrome/browser/breadcrumbs",
    "//chrome/browser/browser_actuator",
    "//chrome/browser/browsing_data",
    "//chrome/browser/btm",
    "//chrome/browser/client_hints",
    "//chrome/browser/collaboration",
    "//chrome/browser/collaboration/comments",
    "//chrome/browser/collaboration/messaging",
    "//chrome/browser/commerce",
    "//chrome/browser/consent_auditor",
    "//chrome/browser/content_index",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/context_hub",
    "//chrome/browser/contextual_cueing",
    "//chrome/browser/contextual_search",
    "//chrome/browser/contextual_tasks",
    "//chrome/browser/contextual_tasks:ui",
    "//chrome/browser/critical_actions",
    "//chrome/browser/custom_handlers",
    "//chrome/browser/data_sharing",
    "//chrome/browser/device_reauth",
    "//chrome/browser/digital_credentials",
    "//chrome/browser/dom_distiller",
    "//chrome/browser/domain_reliability",
    "//chrome/browser/engagement",
    "//chrome/browser/enterprise/connectors/reporting",
    "//chrome/browser/favicon",
    "//chrome/browser/feature_engagement",
    "//chrome/browser/file_system_access",
    "//chrome/browser/finds",
    "//chrome/browser/first_party_sets",
    "//chrome/browser/glic",
    "//chrome/browser/glic/browser_ui",
    "//chrome/browser/glic/suggestions",
    "//chrome/browser/heavy_ad_intervention",
    "//chrome/browser/hid",
    "//chrome/browser/history",
    "//chrome/browser/history_clusters",
    "//chrome/browser/history_embeddings",
    "//chrome/browser/language",
    "//chrome/browser/language_detection",
    "//chrome/browser/loader",
    "//chrome/browser/login_detection",
    "//chrome/browser/lookalikes",
    "//chrome/browser/manta",
    "//chrome/browser/manta:impl",
    "//chrome/browser/media/router",
    "//chrome/browser/media/webrtc",
    "//chrome/browser/notebooks",
    "//chrome/browser/notifications",
    "//chrome/browser/omnibox",
    "//chrome/browser/optimization_guide",
    "//chrome/browser/origin_trials",
    "//chrome/browser/page_content_annotations",
    "//chrome/browser/page_content_annotations:extraction_service",
    "//chrome/browser/page_content_annotations:screenshot_service",
    "//chrome/browser/page_image_service",
    "//chrome/browser/page_info",
    "//chrome/browser/passage_embeddings",
    "//chrome/browser/password_manager",
    "//chrome/browser/password_manager/actor_login:factories",
    "//chrome/browser/password_manager/factories",
    "//chrome/browser/payments",
    "//chrome/browser/payments/browser_binding:browser_bound_key_deleter",
    "//chrome/browser/performance_manager",
    "//chrome/browser/permissions",
    "//chrome/browser/persisted_state_db",
    "//chrome/browser/personal_context",
    "//chrome/browser/personal_context/first_run",
    "//chrome/browser/predictors",
    "//chrome/browser/prefs",
    "//chrome/browser/preloading",
    "//chrome/browser/preloading/prefetch/no_state_prefetch",
    "//chrome/browser/preloading/prefetch/search_prefetch",
    "//chrome/browser/preloading/prerender",
    "//chrome/browser/preloading/search_preload",
    "//chrome/browser/privacy",
    "//chrome/browser/privacy_sandbox:headers",
    "//chrome/browser/private_ai",
    "//chrome/browser/private_insights",
    "//chrome/browser/private_verification_tokens",
    "//chrome/browser/push_messaging",
    "//chrome/browser/reading_list",
    "//chrome/browser/reduce_accept_language",
    "//chrome/browser/regional_capabilities",
    "//chrome/browser/safe_browsing",
    "//chrome/browser/safe_browsing:advanced_protection",
    "//chrome/browser/safe_browsing:metrics_collector",
    "//chrome/browser/safe_browsing:verdict_cache_manager_factory",
    "//chrome/browser/search_engine_choice",
    "//chrome/browser/search_engines",
    "//chrome/browser/search_provider_logos",
    "//chrome/browser/segmentation_platform",
    "//chrome/browser/send_tab_to_self",
    "//chrome/browser/serial",
    "//chrome/browser/sessions",
    "//chrome/browser/sharing",
    "//chrome/browser/signin",
    "//chrome/browser/site_token_provider",
    "//chrome/browser/skills",
    "//chrome/browser/speech",
    "//chrome/browser/ssl",
    "//chrome/browser/storage",
    "//chrome/browser/storage_access_api",
    "//chrome/browser/subresource_filter",
    "//chrome/browser/subscription_eligibility",
    "//chrome/browser/supervised_user",
    "//chrome/browser/sync",
    "//chrome/browser/tab_group_sync:factories",
    "//chrome/browser/tips",
    "//chrome/browser/ui",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/autofill",
    "//chrome/browser/ui/find_bar",
    "//chrome/browser/ui/hats",
    "//chrome/browser/ui/omnibox",
    "//chrome/browser/ui/prefs",
    "//chrome/browser/ui/safety_hub",
    "//chrome/browser/ui/startup",
    "//chrome/browser/ui/toolbar",
    "//chrome/browser/ui/toolbar/pinned_toolbar",
    "//chrome/browser/undo",
    "//chrome/browser/unified_consent",
    "//chrome/browser/universal_optout",
    "//chrome/browser/updates/announcement_notification",
    "//chrome/browser/usb",
    "//chrome/browser/visited_url_ranking",
    "//chrome/browser/webauthn",
    "//chrome/browser/webdata_services",
    "//chrome/browser/webid",
    "//chrome/common:chrome_features",
    "//components/autofill/content/browser",
    "//components/breadcrumbs/core:status",
    "//components/captive_portal/core:buildflags",
    "//components/commerce/core:cart_db_content_proto",
    "//components/commerce/core:commerce_subscription_db_content_proto",
    "//components/commerce/core:feature_list",
    "//components/commerce/core:persisted_state_db_content_proto",
    "//components/enterprise/content",
    "//components/manta",
    "//components/omnibox/browser",
    "//components/optimization_guide/core",
    "//components/password_manager/content/browser",
    "//components/payments/content",
    "//components/permissions:permissions_common",
    "//components/policy/content",
    "//components/policy/content:safe_sites_navigation_throttle",
    "//components/safe_browsing/core/common:features",
    "//components/signin/public/base",
    "//components/site_engagement/content",
    "//components/site_token_provider",
    "//components/spellcheck:buildflags",
    "//components/sync/base:features",
    "//media",
    "//services/network/public/cpp",
    "//ui/webui:buildflags",
  ]

  public_deps = [
    "//chrome/browser:browser_public_dependencies",
    "//chrome/browser/search/background",
  ]

  if (is_android) {
    deps += [
      "//chrome/browser/auxiliary_search",
      "//chrome/browser/commerce/merchant_viewer:merchant_viewer_data_manager",
      "//chrome/browser/feed",
      "//chrome/browser/ntp_customization",
      "//chrome/browser/readaloud",
      "//chrome/browser/tab",
      "//chrome/browser/ui/android",
      "//components/commerce/core:merchant_signal_db_proto",
    ]
    if (enable_webui_ntp) {
      deps += [ "//chrome/browser/new_tab_page" ]
    }
  } else {
    deps += [
      "//chrome/browser/accessibility/phrase_segmentation",
      "//chrome/browser/accessibility/tree_fixing:service",
      "//chrome/browser/apps/app_service",
      "//chrome/browser/autofill",
      "//chrome/browser/badging",
      "//chrome/browser/device_api",
      "//chrome/browser/devtools",
      "//chrome/browser/dictation",
      "//chrome/browser/feedback",
      "//chrome/browser/indigo",
      "//chrome/browser/media/router/discovery/access_code:access_code_sink_service",
      "//chrome/browser/metrics/critical_user_journeys",
      "//chrome/browser/new_tab_page",
      "//chrome/browser/profile_resetter",
      "//chrome/browser/record_replay",
      "//chrome/browser/record_replay:impl",
      "//chrome/browser/screen_ai:screen_ai_service_router_factory",
      "//chrome/browser/search",
      "//chrome/browser/search_engine_choice",
      "//chrome/browser/sharing_hub",
      "//chrome/browser/themes",
      "//chrome/browser/ui/desktop_to_mobile_promos:service",
      "//chrome/browser/ui/global_error",
      "//chrome/browser/ui/global_media_controls",
      "//chrome/browser/ui/lens",
      "//chrome/browser/ui/media_router",
      "//chrome/browser/ui/performance_controls",
      "//chrome/browser/ui/read_anything",
      "//chrome/browser/ui/tabs/saved_tab_groups",
      "//chrome/browser/ui/views/profiles:avatar_toolbar_button",
      "//chrome/browser/ui/views/side_panel",
      "//chrome/browser/ui/waap",
      "//chrome/browser/ui/webui:theme_colors_source_manager",
      "//chrome/browser/ui/webui:theme_source",
      "//chrome/browser/ui/webui/ntp:ntp_resource_cache",
      "//chrome/browser/ui/webui/signin",
      "//chrome/browser/ui/webui/signin:login_ui_service",
      "//chrome/browser/user_education",
      "//chrome/browser/web_applications/isolated_web_apps",
      "//chrome/browser/web_applications/isolated_web_apps/window_management",
    ]
  }
  if (!is_android && !is_chromeos) {
    deps += [ "//chrome/browser/download/bubble" ]
  }
  if (is_chromeos) {
    deps += [
      "//chrome/browser/apps/almanac_api_client",
      "//chrome/browser/apps/app_preload_service",
      "//chrome/browser/ash/app_list",
      "//chrome/browser/ash/certificate_provider",
      "//chrome/browser/ash/file_manager",
      "//chrome/browser/ash/floating_sso",
      "//chrome/browser/ash/input_method",
      "//chrome/browser/ash/keyed_service",
      "//chrome/browser/ash/language_packs",
      "//chrome/browser/ash/lobster",
      "//chrome/browser/ash/login/auth_factors_policy",
      "//chrome/browser/ash/policy/dlp",
      "//chrome/browser/ash/policy/skyvault",
      "//chrome/browser/ash/scanner",
      "//chrome/browser/chromeos/enterprise/cloud_storage",
      "//chrome/browser/chromeos/extensions/telemetry/api:keyed_service_factory",
      "//chrome/browser/chromeos/policy/dlp",
      "//chrome/browser/media_galleries",
      "//chrome/browser/nearby_sharing",
      "//chrome/browser/policy:onc",
      "//chrome/browser/push_notification",
      "//chrome/browser/smart_card",
    ]
  }

  if (!is_chromeos) {
    deps += [ ":gaia_info_update_service" ]
  }

  if (!is_chromeos && !is_android) {
    deps += [
      ":profile_util",
      "//chrome/browser/download/bubble",
    ]
  }

  if (is_win || is_mac || is_linux || is_chromeos) {
    deps += [
      "//chrome/browser/enterprise/network_header_injection",
      "//chrome/browser/multistep_filter",
      "//components/enterprise/network_header_injection/core",
    ]
  }

  if (is_win || is_mac || is_linux) {
    deps += [
      "//chrome/browser/browser_switcher",
      "//chrome/browser/search_integrity",
    ]
  }

  if (enable_spellcheck) {
    deps += [ "//chrome/browser/spellchecker" ]
  }

  if (enable_extensions_core) {
    deps += [
      "//chrome/browser/extensions/keyed_services:keyed_service_factories",
      "//chrome/browser/ui/webui/omnibox/aim_eligibility_extension",
      "//extensions/browser",
    ]
  }

  if (enable_extensions) {
    deps += [
      "//apps",
      "//chrome/browser/apps/platform_apps",
      "//chrome/browser/apps/platform_apps/api",
      "//chrome/browser/extensions",
      "//chrome/browser/sync_file_system",
      "//chrome/browser/ui/web_applications",
      "//chrome/browser/web_applications",
      "//components/omnibox/browser",
      "//components/webapps/isolated_web_apps",
    ]
  }

  if (enterprise_data_controls) {
    deps += [ "//chrome/browser/enterprise/data_controls" ]
  }

  if (enable_on_device_translation) {
    deps += [ "//chrome/browser/on_device_translation" ]
  }

  if (enable_dice_support || is_chromeos) {
    deps += [ "//chrome/browser/profiles/batch_upload" ]
  }

  if (enable_dice_support) {
    deps += [ "//chrome/browser/ui/signin" ]
  }

  if (enable_captive_portal_detection) {
    deps += [ "//chrome/browser/captive_portal" ]
  }

  if (is_linux || is_mac) {
    deps += [
      "//chrome/browser/gapis",
      "//components/gapis",
    ]
  }

  if (!is_android) {
    deps += [
      "//chrome/browser/password_manager/factories:startup_import_factory",
      "//chrome/browser/password_manager/remote_actor",
    ]
  }

  if (enable_offline_pages) {
    deps += [ "//chrome/browser/offline_pages" ]
  }
}

source_set("profile_downloader") {
  public = [
    "profile_downloader.h",
    "profile_downloader_delegate.h",
  ]

  sources = [ "profile_downloader.cc" ]

  public_deps = [
    "//base",
    "//chrome/browser/image_decoder",
    "//components/signin/public/identity_manager",
    "//services/network/public/cpp",
    "//skia",
  ]

  deps = [
    ":profile",
    "//components/signin/public/base",
    "//google_apis",
    "//net",
    "//net/traffic_annotation",
    "//services/network/public/mojom:url_loader_base",
    "//url",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "chrome_incognito_mode_policy_handler_unittest.cc",
    "profile_attributes_storage_unittest.cc",
    "profile_downloader_unittest.cc",
    "profile_keyed_service_factory_unittest.cc",
    "profile_manager_unittest.cc",
    "profile_metrics_unittest.cc",
    "profile_selections_unittest.cc",
    "profiles_state_unittest.cc",
  ]
  deps = [
    ":misc",
    ":policy_handlers",
    ":profile_downloader",
    ":profile_manager",
    ":profile_util",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//chrome/browser/prefs",
    "//chrome/browser/signin",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/profiles",
    "//chrome/test:test_support",
    "//components/policy/core/browser",
    "//components/policy/core/browser:incognito_mode_policy_test_support",
    "//components/policy/core/browser:test_support",
    "//components/prefs:test_support",
    "//components/signin/public/base:test_support",
    "//components/signin/public/identity_manager:test_support",
    "//components/user_manager",
    "//content/test:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/native_theme:test_support",
  ]

  if (is_chromeos) {
    sources += [ "profile_os_sync_unittest.cc" ]
    deps += [
      "//ash/constants",
      "//chrome/browser/ash/login/users",
      "//chrome/browser/ash/login/users/avatar",
      "//chrome/browser/ash/wallpaper_handlers:test_support",
      "//chrome/browser/ui/ash/wallpaper",
      "//chrome/browser/ui/ash/wallpaper:test_support",
      "//chromeos/ash/components/system",
      "//components/live_caption:constants",
    ]
  }

  if (is_win) {
    sources += [
      "profile_load_tracker_win_unittest.cc",
      "profile_shortcut_manager_unittest_win.cc",
    ]
  }

  if (is_android) {
    sources += [ "android/profile_resolver_unittest.cc" ]
    deps += [ "//chrome/browser/android:profile_token" ]
  }

  if (!is_chromeos) {
    sources += [ "gaia_info_update_service_unittest.cc" ]
    deps += [
      ":gaia_info_update_service",
      "//chrome/browser:global_features",
    ]
    if (!is_android) {
      deps += [ "//chrome/browser/glic/test_support" ]
    }
  }

  if (!is_android && !is_chromeos) {
    sources += [
      "profile_activity_metrics_recorder_unittest.cc",
      "profile_list_desktop_unittest.cc",
      "profile_statistics_aggregator_unittest.cc",
    ]
    deps += [
      "//chrome/browser/glic/test_support",
      "//chrome/browser/ui/browser_window/test:test_support",
      "//chrome/browser/ui/tabs:test_support",
    ]
  }

  if (is_linux || is_mac || is_win) {
    sources += [ "guest_mode_policy_handler_unittest.cc" ]
  }

  if (!is_android) {
    sources += [
      "profile_avatar_icon_util_unittest.cc",
      "profile_destroyer_unittest.cc",
    ]
    deps += [
      "//chrome/app/theme:theme_resources",
      "//ui/gfx:test_support",
    ]
  }

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}

if (!is_android) {
  source_set("browser_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "host_zoom_map_browsertest.cc",
      "incognito_profile_containment_browsertest.cc",
      "profile_activity_metrics_recorder_browsertest.cc",
      "profile_browsertest.cc",
      "profile_keyed_service_browsertest.cc",
      "profile_manager_browsertest.cc",
    ]

    deps = [
      ":misc",
      ":profile_manager",
      ":profile_util",
      "//base",
      "//chrome/browser/devtools",
      "//chrome/browser/devtools:test_support",
      "//chrome/browser/policy:test_support",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/search_engines",
      "//chrome/browser/ui",
      "//chrome/browser/ui:chrome_pages",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/browser_window:create_browser_window",
      "//chrome/browser/ui/find_bar",
      "//chrome/browser/ui/startup",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/commerce/core:feature_list",
      "//components/universal_optout:features",
      "//components/user_manager",
      "//content/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]

    if (!is_chromeos) {
      sources += [
        "avatar_menu_browsertest.cc",
        "delete_profile_helper_browsertest.cc",
        "profile_list_desktop_browsertest.cc",
        "profile_window_browsertest.cc",
      ]
      deps += [
        "//chrome/browser/prefs",
        "//chrome/browser/profiles/keep_alive:test_support",
      ]
    }

    if (is_mac || is_win || is_linux) {
      sources += [ "profile_statistics_browsertest.cc" ]
    }

    if (is_win) {
      sources += [ "profile_shortcut_manager_browsertest_win.cc" ]
    }

    # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
    # enable the diagnostic by removing this line.
    configs += [ "//build/config/compiler:no_exit_time_destructors" ]
  }
}

if (is_android) {
  source_set("android_browsertests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "profile_browsertest_android.cc" ]

    deps = [
      ":profile_manager",
      "//base",
      "//chrome/test:test_support",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "profile_testing_helper.cc",
    "profile_testing_helper.h",
  ]
  public_deps = [
    "//base",
    "//chrome/test:test_support",
    "//content/test:test_support",
  ]
  deps = [ "//testing/gtest" ]

  if (is_chromeos) {
    deps += [ "//chromeos/ash/components/browser_context_helper" ]
  }
}

source_set("profile_test_util") {
  testonly = true

  sources = [
    "profile_test_util.cc",
    "profile_test_util.h",
  ]

  public_deps = [
    "//base",
    "//build:chromeos_buildflags",
    "//chrome/browser/profiles:profile",
  ]

  # The identity_manager and gtest includes are guarded by !is_android in the
  # source, but gn check does not evaluate the #if, so the deps are declared
  # unconditionally (matching how //chrome/test:test_support provided them).
  deps = [
    "//base/test:test_support",
    "//chrome/browser/profiles:profile_manager",
    "//components/signin/public/identity_manager",
    "//testing/gtest",
  ]

  if (is_chromeos) {
    deps += [ "//chromeos/ash/components/login/login_state" ]
  }
}
