# 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("//chrome/common/features.gni")
import("//components/signin/features.gni")

assert(!is_fuchsia && !is_android)

# Removes circular dep between |login| and |signin|.
if (!is_chromeos) {
  source_set("signin_ui_error") {
    sources = [
      "signin_ui_error.cc",
      "signin_ui_error.h",
    ]

    public_deps = [ "//base" ]
    deps = [
      "//chrome/app:branded_strings",
      "//chrome/app:generated_resources",
      "//components/sync/base:features",
      "//google_apis",
      "//ui/base",
    ]

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

# Removes circular dep between |login| and |signin|.
source_set("signin_utils") {
  sources = [
    "signin_url_utils.h",
    "signin_utils.h",
  ]

  public_deps = [
    "//base",
    "//components/signin/public/base",
    "//components/signin/public/base:signin_buildflags",
    "//components/signin/public/identity_manager",
    "//url",
  ]

  if (!is_chromeos) {
    sources += [ "signin_utils_desktop.h" ]
  }
}

source_set("signin_utils_impl") {
  sources = [
    "signin_url_utils.cc",
    "signin_utils.cc",
  ]

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

  deps = [
    ":signin_utils",
    "//base",
    "//chrome/browser:browser_process",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_manager",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/signin",
    "//chrome/common",
    "//chrome/common:non_code_constants",
    "//components/prefs",
    "//components/signin/public/base",
    "//components/signin/public/identity_manager",
    "//content/public/browser",
    "//extensions/browser",
    "//google_apis",
    "//net",
  ]

  if (!is_chromeos) {
    sources += [ "signin_utils_desktop.cc" ]
    deps += [ ":signin_ui_error" ]
  }
}
source_set("signin") {
  sources = [
    "signin_web_dialog_ui.h",
    "sync_confirmation_handler.h",
    "sync_confirmation_ui.h",
  ]

  public_deps = [
    ":login_ui_service",
    "//base",
    "//chrome/browser/enterprise",
    "//chrome/browser/signin",
    "//chrome/browser/ui/browser_window",
    "//chrome/common",
    "//components/signin/public/identity_manager",
    "//components/sync/base",
    "//content/public/browser",
    "//ui/web_dialogs",
  ]

  deps = [
    "//chrome/app:branded_strings",
    "//chrome/app:generated_resources",
  ]

  # enterprise headers include turn_sync_on_helper_policy_fetch_tracker.h.
  allow_circular_includes_from = [
    "//chrome/browser/enterprise",

    # signin headers include turn_sync_on_helper.h for SigninAbortedMode, and
    # dice_tab_helper.cc includes history_sync_optin_helper.h.
    "//chrome/browser/signin",
  ]

  if (enable_dice_support) {
    sources += [
      "cross_device_signin_qr_bubble_ui.h",
      "dice_web_signin_intercept_handler.h",
      "dice_web_signin_intercept_ui.h",
    ]
    public_deps += [ "cross_device_signin_qr_bubble:mojo_bindings" ]
  }

  if (!is_chromeos) {
    sources += [
      "history_sync_optin_helper.h",
      "history_sync_optin_service.h",
      "history_sync_optin_service_factory.h",
      "signin_email_confirmation_dialog.h",
      "signin_email_confirmation_ui.h",
      "signin_error_handler.h",
      "signin_error_ui.h",
      "turn_sync_on_helper.h",
      "turn_sync_on_helper_delegate_impl.h",
      "turn_sync_on_helper_policy_fetch_tracker.h",
    ]
    public_deps += [
      ":signin_utils",
      "//chrome/browser/search_engine_choice",
      "//chrome/browser/sync",
      "//chrome/browser/ui/webui",
    ]
  }

  if (is_win || is_mac || is_linux) {
    sources += [
      "history_sync_optin/history_sync_optin_handler.h",
      "history_sync_optin/history_sync_optin_ui.h",
    ]
    public_deps += [
      "history_sync_optin:mojo_bindings",
      "//chrome/browser/ui/webui/signin:profile",
      "//ui/webui",
    ]
  }
}

source_set("signin_impl") {
  sources = [
    "signin_web_dialog_ui.cc",
    "sync_confirmation_handler.cc",
    "sync_confirmation_ui.cc",
  ]

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

  deps = [
    ":signin",
    ":signin_utils",
    "//base",
    "//chrome/browser:browser_process",
    "//chrome/browser/consent_auditor",
    "//chrome/browser/enterprise/browser_management:management_identity",
    "//chrome/browser/net",
    "//chrome/browser/profiles:misc",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_manager",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/resources/signin:resources",
    "//chrome/browser/sync",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/profiles",
    "//chrome/browser/ui/signin",
    "//chrome/browser/ui/webui:theme_source",
    "//chrome/browser/unified_consent",
    "//chrome/common",
    "//chrome/common/themes:autogenerated_theme_util",
    "//components/consent_auditor",
    "//components/signin/public/base",
    "//components/signin/public/identity_manager",
    "//content/public/browser",
    "//extensions/browser",
    "//google_apis",
    "//net",
    "//ui/webui",
  ]

  if (enable_dice_support) {
    sources += [
      "cross_device_signin_qr_bubble_ui.cc",
      "dice_web_signin_intercept_handler.cc",
      "dice_web_signin_intercept_ui.cc",
    ]
    deps += [
      "cross_device_signin_qr_bubble:mojo_bindings",
      "//chrome/browser/ui:managed_ui",
      "//chrome/browser/ui/webui",
      "//chrome/browser/ui/webui/util",
      "//components/qr_code_generator:bitmap_generator",
    ]
  }

  if (!is_chromeos) {
    sources += [
      "history_sync_optin_helper.cc",
      "history_sync_optin_service.cc",
      "history_sync_optin_service_factory.cc",
      "signin_email_confirmation_dialog.cc",
      "signin_email_confirmation_ui.cc",
      "signin_error_handler.cc",
      "signin_error_ui.cc",
      "turn_sync_on_helper.cc",
      "turn_sync_on_helper_delegate_impl.cc",
      "turn_sync_on_helper_policy_fetch_tracker.cc",
    ]

    deps += [
      ":login_ui_service",
      "//chrome/browser/new_tab_page/chrome_colors:selected_colors_info",
      "//chrome/browser/ui:chrome_pages",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/browser_window:create_browser_window",
      "//chrome/browser/ui/sync",
      "//chrome/browser/ui/tabs:tab_strip",
      "//components/keyed_service/content",
      "//components/policy/core/browser",
      "//components/signin/core/browser",
      "//components/unified_consent",
      "//ui/webui",
    ]
  }

  if (is_win || is_mac || is_linux) {
    sources += [
      "history_sync_optin/history_sync_optin_handler.cc",
      "history_sync_optin/history_sync_optin_ui.cc",
    ]
    deps += [
      "//chrome/browser/resources/signin/history_sync_optin:resources_grit",
    ]
  }
}

source_set("login_ui_service") {
  sources = [
    "login_ui_service.h",
    "login_ui_service_factory.h",
  ]

  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/keyed_service/core",
  ]

  if (!is_chromeos) {
    public_deps += [ ":signin_ui_error" ]
  }
}

source_set("login_ui_service_impl") {
  sources = [
    "login_ui_service.cc",
    "login_ui_service_factory.cc",
  ]

  deps = [
    ":login_ui_service",
    "//base",
    "//chrome/browser:browser_process",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_manager",
    "//chrome/browser/signin:signin_promo",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/navigator",
    "//chrome/browser/ui/signin",
  ]
}

# "inline_login_*" code is only available on Windows and ChromeOS, since the
# "chrome-signin" webui dialog is only used there.
if (is_win || is_chromeos) {
  source_set("inline_login") {
    sources = [
      "inline_login_handler.h",
      "inline_login_ui.h",
    ]

    public_deps = [
      "//base",
      "//chrome/browser/profiles:profile",
      "//chrome/common",
      "//components/keyed_service/core",
      "//content/public/browser",
      "//google_apis",
      "//net",
      "//ui/web_dialogs",
    ]

    if (is_win) {
      sources += [ "inline_login_handler_impl.h" ]
    }
  }

  source_set("inline_login_impl") {
    sources = [
      "inline_login_handler.cc",
      "inline_login_ui.cc",
    ]

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

    deps = [
      ":inline_login",
      "//chrome/browser:browser_process",
      "//chrome/browser/extensions",
      "//chrome/browser/prefs",
      "//chrome/browser/profiles",
      "//chrome/browser/resources/gaia_auth_host:resources_grit",
      "//chrome/browser/signin:signin_promo",
      "//chrome/browser/ui/navigator",
      "//chrome/browser/ui/webui:metrics_handler",
      "//chrome/browser/ui/webui:theme_source",
      "//components/signin/core/browser",
      "//ui/webui",
    ]

    if (is_win) {
      sources += [ "inline_login_handler_impl.cc" ]
      deps += [
        "//chrome/browser/resources/inline_login:resources_grit",
        "//chrome/browser/ui/webui/signin:signin_ui_error",
      ]
    }

    if (is_chromeos) {
      deps += [
        "//chrome/browser/ash/account_manager",
        "//chrome/browser/ash/profiles",
        "//chrome/browser/resources/ash/inline_login:resources",
        "//chrome/browser/resources/chromeos/account_manager:resources",
        "//chrome/browser/resources/chromeos/edu_coexistence:resources",
        "//chrome/browser/resources/chromeos/gaia_action_buttons:resources",
        "//chrome/browser/resources/chromeos/supervision:resources",
        "//chrome/browser/ui/webui/ash/edu_coexistence",
        "//chrome/browser/ui/webui/signin/ash",
        "//ui/chromeos",
        "//ui/strings:ui_strings_grit",
      ]
    }
  }
}

if (!is_chromeos) {
  source_set("profile") {
    sources = [
      "managed_user_profile_notice_handler.h",
      "managed_user_profile_notice_ui.h",
      "profile_customization_handler.h",
      "profile_customization_ui.h",
      "profile_picker_handler.h",
      "profile_picker_ui.h",
    ]

    public_deps = [
      ":signin_utils",
      "//base",
      "//build:buildflag_header_h",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles:profile_util",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/webui/top_chrome",
      "//chrome/common",
      "//components/signin/public/identity_manager",
      "//components/user_education/webui",
      "//content/public/browser",
      "//google_apis",
      "//mojo/public/cpp/bindings",
      "//skia",
      "//ui/gfx/geometry",
      "//ui/webui",
      "//ui/webui/resources/cr_components/help_bubble:mojo_bindings",
    ]
  }

  source_set("profile_impl") {
    sources = [
      "managed_user_profile_notice_handler.cc",
      "managed_user_profile_notice_ui.cc",
      "profile_customization_handler.cc",
      "profile_customization_ui.cc",
      "profile_picker_handler.cc",
      "profile_picker_ui.cc",
    ]

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

    deps = [
      ":login_ui_service",
      ":profile",
      ":signin_ui_error",
      ":signin_utils",
      "//base",
      "//build:buildflag_header_h",
      "//chrome/app:branded_strings",
      "//chrome/app:generated_resources",
      "//chrome/app/theme:chrome_unscaled_resources_grit",
      "//chrome/browser:browser_process",
      "//chrome/browser:resources",
      "//chrome/browser/enterprise/browser_management:management_identity",
      "//chrome/browser/glic/resources:browser_resources",
      "//chrome/browser/lifetime",
      "//chrome/browser/new_tab_page",
      "//chrome/browser/new_tab_page/chrome_colors:generate_chrome_colors_info",
      "//chrome/browser/profiles",
      "//chrome/browser/profiles:misc",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles:profile_manager",
      "//chrome/browser/profiles:profile_util",
      "//chrome/browser/profiles/keep_alive",
      "//chrome/browser/resources/signin:resources",
      "//chrome/browser/resources/signin/profile_picker:resources",
      "//chrome/browser/search/background",
      "//chrome/browser/themes",
      "//chrome/browser/ui:browser_element_identifiers",
      "//chrome/browser/ui:managed_ui",
      "//chrome/browser/ui:ui_features",
      "//chrome/browser/ui/color:color_headers",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/signin",
      "//chrome/browser/ui/views/profiles:profile_management_types",
      "//chrome/browser/ui/webui:profile_helper",
      "//chrome/browser/ui/webui:theme_source",
      "//chrome/browser/ui/webui/cr_components/theme_color_picker:impl",
      "//chrome/browser/ui/webui/management",
      "//chrome/browser/ui/webui/top_chrome",
      "//chrome/common",
      "//components/policy/core/browser",
      "//components/policy/core/common",
      "//components/prefs",
      "//components/signin/public/base",
      "//components/signin/public/identity_manager",
      "//components/startup_metric_utils",
      "//components/strings:components_strings",
      "//components/supervised_user/core/common:features",
      "//content/public/browser",
      "//google_apis",
      "//services/network/public/mojom:url_loader_base",
      "//skia",
      "//ui/base",
      "//ui/color:color_headers",
      "//ui/gfx",
      "//ui/native_theme",
      "//ui/resources",
      "//ui/strings:ui_strings",
      "//ui/webui",
      "//ui/webui/tracked_element",
      "//url",
    ]

    if (is_win || is_mac || is_linux) {
      deps += [ "//chrome/browser/ui/views/profiles:profile_management_types" ]
    }
  }
}

if (enable_dice_support || is_chromeos) {
  source_set("batch_upload") {
    sources = [
      "batch_upload_handler.cc",
      "batch_upload_ui.cc",
    ]
    public = [
      "batch_upload_handler.h",
      "batch_upload_ui.h",
    ]
    public_deps = [ "//chrome/browser:browser_public_dependencies" ]
    deps = [
      ":signin",
      "batch_upload:mojo_bindings",
      "//base",
      "//chrome/app:generated_resources",
      "//chrome/browser/device_reauth",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/profiles/batch_upload",
      "//chrome/browser/resources/signin/batch_upload:resources",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/tabs:tab_model",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/webui:favicon_source",
      "//chrome/browser/ui/webui:plural_string_handler",
      "//chrome/common",
      "//components/device_reauth",
      "//components/favicon_base",
      "//components/signin/public/identity_manager",
      "//components/strings:components_strings",
      "//components/sync/base",
      "//components/sync/service",
      "//content/public/browser",
      "//mojo/public/cpp/bindings",
      "//ui/webui",
    ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "login_ui_service_unittest.cc",
    "signin_url_utils_unittest.cc",
    "sync_confirmation_handler_unittest.cc",
    "sync_confirmation_ui_unittest.cc",
  ]

  deps = [
    ":login_ui_service",
    ":signin",
    ":signin_utils",
    "//base",
    "//base/test:test_support",
    "//build:buildflag_header_h",
    "//chrome/browser",
    "//chrome/browser:browser_features",
    "//chrome/browser:browser_process",
    "//chrome/browser/consent_auditor",
    "//chrome/browser/consent_auditor:test_support",
    "//chrome/browser/enterprise/browser_management:management_identity",
    "//chrome/browser/extensions",
    "//chrome/browser/extensions:test_support",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/signin",
    "//chrome/browser/sync",
    "//chrome/browser/ui",
    "//chrome/common",
    "//chrome/test:test_support",
    "//components/consent_auditor:test_support",
    "//components/signin/public/base",
    "//components/signin/public/identity_manager:test_support",
    "//components/sync:test_support",
    "//components/sync/base",
    "//content/public/browser",
    "//content/test:test_support",
    "//extensions:test_support",
    "//google_apis",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  if (!is_chromeos) {
    sources += [
      "history_sync_optin/history_sync_optin_handler_unittest.cc",
      "history_sync_optin_service_unittest.cc",
      "managed_user_profile_notice_handler_unittest.cc",
      "profile_picker_handler_unittest.cc",
      "turn_sync_on_helper_unittest.cc",
    ]
    deps += [
      ":signin_ui_error",
      "//chrome/browser/search_engines",
      "//chrome/browser/sync",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/webui/signin:profile",
      "//components/unified_consent",
      "//components/user_manager",
    ]
  }

  if (enable_dice_support) {
    sources += [
      "dice_web_signin_intercept_handler_unittest.cc",
      "signin_utils_desktop_unittest.cc",
    ]
    deps += [
      "//chrome/browser/new_tab_page/chrome_colors:selected_colors_info",
      "//chrome/browser/ui/profiles",
      "//chrome/browser/ui/signin",
    ]
  }

  # 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" ]
}

source_set("test_support_ui") {
  testonly = true
  sources = [
    "login_ui_test_utils.cc",
    "login_ui_test_utils.h",
  ]

  public_deps = [
    ":signin",
    "//base",
    "//components/signin/public/base",
  ]
  deps = [
    ":login_ui_service",
    ":signin_utils",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/signin:signin_promo",
    "//chrome/browser/ui",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/signin",
    "//chrome/test:test_support_ui",
    "//components/signin/public/identity_manager",
    "//content/public/browser",
    "//content/test:test_support",
  ]
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "history_sync_optin_helper_browsertest.cc",
      "signin_error_handler_browsertest.cc",
      "turn_sync_on_helper_browsertest.cc",
    ]

    deps = [
      ":signin",
      "//base",
      "//base/test:test_support",
      "//build:buildflag_header_h",
      "//chrome/browser",
      "//chrome/browser/policy:test_support",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/signin:signin_browser_test_base",
      "//chrome/browser/ui",
      "//chrome/test:test_support",
      "//components/signin/core/browser",
      "//components/signin/public/base",
      "//components/signin/public/identity_manager",
      "//components/signin/public/identity_manager:test_support",
      "//content/test:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}
