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

import("//build/config/ui.gni")

assert(toolkit_views)

source_set("password_bubble_view_base") {
  public = [ "password_bubble_view_base.h" ]
  public_deps = [
    "//base",
    "//chrome/browser/ui/views/location_bar",
    "//ui/base",
  ]
}

source_set("passwords") {
  public = [
    "account_chooser_dialog_view.h",
    "auto_signin_first_run_dialog_view.h",
    "credential_leak_dialog_view.h",
    "credentials_item_view.h",
    "manage_passwords_details_view.h",
    "manage_passwords_list_view.h",
    "manage_passwords_page_action_controller.h",
    "manage_passwords_view.h",
    "manage_passwords_view_ids.h",
    "move_to_account_store_bubble_view.h",
    "password_add_username_view.h",
    "password_auto_sign_in_view.h",
    "password_combined_selector_view.h",
    "password_cross_domain_confirmation_popup_view_views.h",
    "password_generation_popup_view_views.h",
    "password_save_update_view.h",
    "post_save_compromised_bubble_view.h",
    "shared_passwords_notification_view.h",
    "views_utils.h",
  ]

  public_deps = [
    ":password_bubble_view_base",
    "//base",
    "//chrome/browser/ui/autofill",
    "//chrome/browser/ui/passwords",
    "//chrome/browser/ui/passwords/bubble_controllers",
    "//chrome/browser/ui/views:layout_provider",
    "//chrome/browser/ui/views/autofill/popup",
    "//content/public/browser",
    "//ui/base",
    "//ui/gfx",
    "//ui/views",
    "//url",
  ]

  if (is_win || is_mac || is_chromeos) {
    public += [
      "biometric_authentication_confirmation_bubble_view.h",
      "biometric_authentication_for_filling_bubble_view.h",
    ]
  }

  if (is_linux || is_mac) {
    # password_relaunch_chrome_view is only shown on Linux and macOS.
    public += [ "password_relaunch_chrome_view.h" ]
  }
}

# Split out from :passwords above so that only the .cc files -- not the
# public headers -- carry the real dependency on
# //chrome/browser/ui/passwords:impl (needed for
# password_generation_popup_controller.h, used by
# password_generation_popup_view_views.cc). :passwords itself never needs
# anything from ui/passwords:impl, so keeping the implementation glue here
# means the header-only target stays a clean, one-directional dependency
# with no allow_circular_includes_from waiver needed on either side --
# avoiding the circular relationship this used to require (which, via
# :passwords's own dependency on //chrome/browser/ui/autofill, sat one step
# away from a real dependency cycle through autofill/webauthn/passwords).
source_set("impl") {
  sources = [
    "account_chooser_dialog_view.cc",
    "auto_signin_first_run_dialog_view.cc",
    "credential_leak_dialog_view.cc",
    "credentials_item_view.cc",
    "manage_passwords_details_view.cc",
    "manage_passwords_list_view.cc",
    "manage_passwords_page_action_controller.cc",
    "manage_passwords_view.cc",
    "move_to_account_store_bubble_view.cc",
    "password_add_username_view.cc",
    "password_auto_sign_in_view.cc",
    "password_bubble_view_base.cc",
    "password_combined_selector_view.cc",
    "password_cross_domain_confirmation_popup_view_views.cc",
    "password_generation_popup_view_views.cc",
    "password_save_update_view.cc",
    "post_save_compromised_bubble_view.cc",
    "shared_passwords_notification_view.cc",
    "views_utils.cc",
  ]

  deps = [
    ":passwords",
    "//chrome/app/vector_icons",
    "//chrome/browser/favicon",
    "//chrome/browser/password_manager/factories",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/profiles:profile_util",
    "//chrome/browser/signin",
    "//chrome/browser/ui:browser_actions",
    "//chrome/browser/ui:browser_element_identifiers",
    "//chrome/browser/ui:layout_constants",
    "//chrome/browser/ui:ui_features",
    "//chrome/browser/ui/actions:actions_headers",
    "//chrome/browser/ui/hats",
    "//chrome/browser/ui/page_action",
    "//chrome/browser/ui/passwords:impl",
    "//chrome/browser/ui/signin",
    "//chrome/browser/ui/tabs:tabs_public",
    "//chrome/browser/ui/user_education",
    "//chrome/browser/ui/views:bubble_anchor_util_views",
    "//chrome/browser/ui/views/accessibility",
    "//chrome/browser/ui/views/controls",
    "//chrome/browser/ui/views/frame:toolbar_button_provider",
    "//chrome/browser/ui/views/location_bar",
    "//chrome/browser/ui/views/page_info",
    "//chrome/browser/ui/views/passwords/password_change:successful_password_change_view",
    "//chrome/browser/ui/views/toolbar",
    "//chrome/browser/ui/views/webauthn",
    "//components/password_manager/core/browser/features:password_features",
  ]

  if (is_win || is_mac || is_chromeos) {
    sources += [
      "biometric_authentication_confirmation_bubble_view.cc",
      "biometric_authentication_for_filling_bubble_view.cc",
    ]
  }

  if (is_linux || is_mac) {
    # password_relaunch_chrome_view is only shown on Linux and macOS.
    sources += [ "password_relaunch_chrome_view.cc" ]
    deps += [ "//components/os_crypt/common" ]
  }
}

source_set("test_support") {
  testonly = true
  public = [ "password_bubble_view_test_base.h" ]
  sources = [ "password_bubble_view_test_base.cc" ]
  public_deps = [
    "//chrome/browser/signin:test_support",
    "//chrome/browser/ui/passwords:test_support_ui",
    "//chrome/test:test_support",
    "//components/password_manager/core/browser:test_support",
    "//components/signin/public/identity_manager:test_support",
    "//content/test:test_support",
    "//testing/gmock",
    "//ui/views",
  ]
  deps = [
    "//chrome/browser/ui/passwords",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "manage_passwords_view_unittest.cc",
    "move_to_account_store_bubble_view_unittest.cc",
    "password_change/password_change_toast_unittest.cc",
    "password_change/successful_password_change_view_unittest.cc",
    "password_save_update_view_unittest.cc",
    "post_save_compromised_bubble_view_unittest.cc",
    "shared_passwords_notification_view_unittest.cc",
  ]

  configs += [ "//build/config/compiler:no_exit_time_destructors" ]

  deps = [
    ":passwords",
    ":test_support",
    "//chrome/browser/password_manager:test_support",
    "//chrome/browser/sync",
    "//chrome/browser/ui/passwords",
    "//chrome/browser/ui/views/passwords/password_change:password_change_toast",
    "//chrome/browser/ui/views/passwords/password_change:successful_password_change_view",
    "//chrome/test:test_support",
    "//components/password_manager/core/browser:test_support",
    "//components/signin/public/identity_manager:test_support",
    "//ui/events:test_support",
  ]
}

source_set("browser_tests") {
  testonly = true
  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  sources = [
    "password_bubble_browsertest.cc",
    "password_change/password_change_toast_browsertest.cc",
    "password_change/password_change_ui_browsertest.cc",
    "password_cross_domain_confirmation_popup_view_views_browsertest.cc",
    "password_dialog_view_browsertest.cc",
    "password_generation_popup_view_views_browsertest.cc",
  ]

  configs += [ "//build/config/compiler:no_exit_time_destructors" ]

  deps = [
    ":passwords",
    ":test_support",
    "//chrome/browser/affiliations",
    "//chrome/browser/optimization_guide:test_support",
    "//chrome/browser/password_manager",
    "//chrome/browser/password_manager:impl",
    "//chrome/browser/ui/passwords",
    "//chrome/browser/ui/passwords:impl",
    "//chrome/browser/ui/passwords:test_support",
    "//chrome/browser/ui/views/passwords/password_change:password_change_toast",
    "//chrome/test:test_support",
    "//chrome/test:test_support_ui",
    "//components/affiliations/core/browser:test_support",
    "//components/password_manager/core/browser:test_support",
  ]
}

if (!is_chromeos_device) {
  source_set("interactive_ui_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "manage_passwords_icon_view_interactive_uitest.cc",
      "manage_passwords_page_action_controller_interactive_uitest.cc",
      "password_bubble_interactive_uitest.cc",
    ]

    configs += [ "//build/config/compiler:no_exit_time_destructors" ]

    deps = [
      ":passwords",
      ":test_support",
      "//chrome/browser/actor:test_support",
      "//chrome/browser/ui/passwords",
      "//chrome/browser/ui/passwords:test_support",
      "//chrome/browser/ui/views/controls",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//ui/base/clipboard:clipboard_test_support",
    ]
  }
}
