# 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("//components/captive_portal/core/features.gni")
import("//components/safe_browsing/buildflags.gni")

source_set("ssl") {
  public = [
    "ask_before_http_dialog_controller.h",
    "chrome_security_blocking_page_factory.h",
    "chrome_security_state_util.h",
    "connection_help_tab_helper.h",
    "daily_navigation_counter.h",
    "https_defaulted_callbacks.h",
    "https_first_mode_settings_tracker.h",
    "https_only_mode_controller_client.h",
    "https_only_mode_tab_helper.h",
    "https_upgrades_interceptor.h",
    "https_upgrades_navigation_throttle.h",
    "https_upgrades_util.h",
    "insecure_form/insecure_form_controller_client.h",
    "known_interception_disclosure_infobar_delegate.h",
    "sct_reporting_service.h",
    "sct_reporting_service_factory.h",
    "secure_origin_policy_handler.h",
    "secure_origin_prefs_observer.h",
    "security_state_event_observer.h",
    "ssl_client_certificate_selector.h",
    "ssl_config_service_manager.h",
    "ssl_error_controller_client.h",
    "stateful_ssl_host_state_delegate_factory.h",
    "typed_navigation_upgrade_throttle.h",
  ]

  public_deps = [
    "//base",
    "//chrome/browser/profiles:profile",
    "//components/captive_portal/core:buildflags",
    "//components/infobars/core",
    "//components/keyed_service/core",
    "//components/policy/core/browser",
    "//components/prefs",
    "//components/security_interstitials/content:security_interstitial_page",
    "//components/security_interstitials/core",
    "//components/security_state/content",
    "//components/security_state/core",
    "//components/site_engagement/content",
    "//components/tabs:public",
    "//content/public/browser",
    "//mojo/public/cpp/bindings",
    "//net",
    "//services/metrics/public/cpp:metrics_cpp",
    "//services/metrics/public/cpp:ukm_builders",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
    "//third_party/blink/public/common",
    "//ui/base",
    "//ui/base/interaction",
    "//ui/base/unowned_user_data",
    "//url",
  ]

  if (is_android) {
    public += [
      "chrome_security_state_client.h",
      "chrome_security_state_model_delegate.h",
      "known_interception_disclosure_message_delegate.h",
    ]
    public_deps += [
      "//components/messages/android",
      "//components/security_state/content/android",
    ]
  }

  if (!is_android) {
    public += [
      "generated_https_first_mode_pref.h",
      "ssl_client_auth_observer.h",
    ]
    public_deps += [
      "//chrome/browser/safe_browsing:advanced_protection",
      "//ui/views",
    ]
  }

  if (is_chromeos) {
    public += [ "ssl_config_overlay.h" ]
  }
}

source_set("impl") {
  sources = [
    "ask_before_http_dialog_controller.cc",
    "chrome_security_blocking_page_factory.cc",
    "chrome_security_state_util.cc",
    "connection_help_tab_helper.cc",
    "daily_navigation_counter.cc",
    "https_defaulted_callbacks.cc",
    "https_first_mode_settings_tracker.cc",
    "https_only_mode_controller_client.cc",
    "https_only_mode_tab_helper.cc",
    "https_upgrades_interceptor.cc",
    "https_upgrades_navigation_throttle.cc",
    "https_upgrades_util.cc",
    "insecure_form/insecure_form_controller_client.cc",
    "known_interception_disclosure_infobar_delegate.cc",
    "sct_reporting_service.cc",
    "sct_reporting_service_factory.cc",
    "secure_origin_policy_handler.cc",
    "secure_origin_prefs_observer.cc",
    "security_state_event_observer.cc",
    "ssl_config_service_manager.cc",
    "ssl_error_controller_client.cc",
    "stateful_ssl_host_state_delegate_factory.cc",
    "typed_navigation_upgrade_throttle.cc",
  ]

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

  deps = [
    "//chrome/browser:browser_process",
    "//chrome/browser:browser_process_platform_part",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/history",
    "//chrome/browser/infobars",
    "//chrome/browser/interstitials",
    "//chrome/browser/lookalikes",
    "//chrome/browser/net",
    "//chrome/browser/profiles",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/renderer_host",
    "//chrome/browser/safe_browsing",
    "//chrome/browser/safe_browsing:advanced_protection",
    "//chrome/browser/safe_browsing:metrics_collector",
    "//chrome/browser/ui/browser_window",
    "//chrome/browser/ui/browser_window:create_browser_window",
    "//chrome/browser/ui/navigator",
    "//chrome/browser/ui/tab_contents",
    "//chrome/browser/ui/tabs:tabs_public",
    "//components/captive_portal/content",
    "//components/guest_view/browser",
    "//components/password_manager/core/browser:metrics_util",
    "//components/pref_registry",
    "//components/safe_browsing/core/browser:safe_browsing_metrics_collector",
  ]

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

  if (is_android) {
    sources += [
      "android/https_first_mode_bridge.cc",
      "android/https_upgrades_interceptor_android.cc",
      "chrome_security_state_client.cc",
      "chrome_security_state_model_delegate.cc",
      "known_interception_disclosure_message_delegate.cc",
    ]
    deps += [
      "//chrome/android:chrome_jni_headers",
      "//chrome/browser/android:tabs_public",
      "//chrome/browser/ssl/android:jni_headers",
    ]
  }

  if (!is_android) {
    sources += [
      "generated_https_first_mode_pref.cc",
      "ssl_client_auth_observer.cc",
    ]
    deps += [
      "//chrome/browser:certificate_viewer",
      "//chrome/browser/extensions",
      "//chrome/browser/ui/tabs:tab_strip",
      "//chrome/browser/ui/web_applications",
    ]
  }

  if (is_chromeos) {
    sources += [ "ssl_config_overlay.cc" ]
    deps += [
      "//chrome/browser/ash/policy/core",
      "//chrome/browser/ash/profiles",
    ]
  }
}

source_set("test_support") {
  testonly = true
  public = [
    "ssl_browsertest_util.h",
    "ssl_client_auth_requestor_mock.h",
  ]
  sources = [
    "ssl_browsertest_util.cc",
    "ssl_client_auth_requestor_mock.cc",
  ]

  public_deps = [
    ":ssl",
    "//base",
    "//components/security_state/core",
    "//content/public/browser",
    "//net",
    "//testing/gmock",
  ]

  deps = [
    "//components/security_state/content",
    "//mojo/public/cpp/bindings",
    "//services/network/public/mojom",
    "//testing/gtest",
  ]

  if (!is_android) {
    public += [ "ssl_browsertest_base.h" ]
    sources += [ "ssl_browsertest_base.cc" ]
    deps += [
      ":ssl",
      "//chrome/browser/interstitials:test_support",
      "//chrome/test:test_support_ui",
      "//components/policy/core/browser",
      "//components/policy/core/common:test_support",
      "//components/security_interstitials/content:security_interstitial_page",
      "//components/security_interstitials/core",
    ]
  }
}

# Foundational cert-verification browser-test base classes, used across many
# directories. Kept in a dedicated target so consumers can depend on it without
# pulling all of //chrome/test:test_support_ui.
source_set("cert_verifier_test_support") {
  testonly = true

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

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

  public_deps = [ "//content/test:test_support" ]

  if (is_android) {
    public_deps += [ "//chrome/test:test_support_ui_android" ]
  } else {
    sources += [
      "cert_verifier_browser_test.cc",
      "cert_verifier_browser_test.h",
    ]
    public_deps += [ "//chrome/test:test_support_ui" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "daily_navigation_counter_unittest.cc",
    "https_first_mode_settings_tracker_unittest.cc",
    "ssl_config_service_manager_unittest.cc",
  ]

  deps = [
    ":ssl",
    "//base",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/safe_browsing:advanced_protection",
    "//chrome/test:test_support",
    "//components/prefs:test_support",
    "//components/site_engagement/core",
    "//content/test:test_support",
    "//net",
    "//services/cert_verifier/public/mojom",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (!is_android) {
    sources += [ "generated_https_first_mode_pref_unittest.cc" ]
  }

  if (is_android) {
    sources += [ "known_interception_disclosure_message_delegate_unittest.cc" ]
    deps += [ "//components/messages/android:test_support" ]
  }

  if (is_chromeos) {
    sources += [ "ssl_config_overlay_unittest.cc" ]
  }
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "certificate_transparency_browsertest.cc",
      "connection_help_tab_helper_browsertest.cc",
      "https_upgrades_browsertest.cc",
      "known_interception_disclosure_ui_browsertest.cc",
      "ocsp_browsertest.cc",
      "security_state_tab_helper_browsertest.cc",
      "ssl_browsertest.cc",
      "ssl_fenced_frame_browsertest.cc",
      "ssl_prerender_browsertest.cc",
      "stateful_ssl_host_state_delegate_test.cc",
    ]

    deps = [
      ":cert_verifier_test_support",
      ":ssl",
      ":test_support",
      "//base",
      "//chrome/browser:chrome_content_browser_client",
      "//chrome/browser/captive_portal",
      "//chrome/browser/interstitials:idn_test_support",
      "//chrome/browser/interstitials:test_support",
      "//chrome/browser/policy:test_support",
      "//chrome/browser/preloading/prerender",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/web_applications",
      "//chrome/browser/ui/webui/certificate_viewer",
      "//chrome/browser/web_applications:web_applications_test_support",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//components/captive_portal/content",
      "//components/embedder_support",
      "//components/error_page/content/browser",
      "//components/safe_browsing/content/browser/password_protection",
      "//components/safe_browsing/content/browser/password_protection:test_support",
      "//components/security_interstitials/content:proto_gen",
      "//content/test:browsertest_support",
      "//content/test:test_support",
      "//crypto:test_support",
      "//net",
      "//net:test_support",
      "//services/network/public/cpp:ip_address_space_overrides_test_utils",
      "//services/network/public/proto:sct_audit_report_proto_gen",
      "//testing/gtest",
    ]

    if (enable_captive_portal_detection) {
      sources += [ "captive_portal_blocking_page_browsertest.cc" ]
    }

    if (safe_browsing_mode == 1) {
      sources += [ "sct_reporting_service_browsertest.cc" ]
    }
  }

  source_set("interactive_ui_tests") {
    testonly = true

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [
      "ask_before_http_dialog_controller_interactive_uitest.cc",
      "ssl_interactive_uitest.cc",
      "typed_navigation_upgrade_throttle_interactive_uitest.cc",
    ]

    deps = [
      ":ssl",
      ":test_support",
      "//base",
      "//chrome/browser/history:test_support",
      "//chrome/browser/interstitials:test_support",
      "//chrome/browser/ui/browser_window",
      "//chrome/browser/ui/web_applications",
      "//chrome/browser/web_applications:web_applications_test_support",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui",
      "//content/test:browsertest_support",
      "//content/test:test_support",
      "//testing/gtest",
    ]
  }
}

source_set("platform_browser_tests") {
  testonly = true

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  sources = [
    "crlset_browsertest.cc",
    "known_interception_disclosure_infobar_browsertest.cc",
  ]

  deps = [
    ":cert_verifier_test_support",
    ":ssl",
    ":test_support",
    "//base",
    "//chrome/browser/infobars",
    "//chrome/browser/interstitials:test_support",
    "//chrome/test:test_support",
    "//components/infobars/content",
    "//content/test:test_support",
    "//net",
    "//testing/gtest",
  ]

  if (is_android) {
    deps += [ "//components/messages/android:test_support" ]
  } else {
    deps += [ "//chrome/browser/ui/browser_window" ]
  }
}

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

    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

    sources = [ "chrome_security_state_client_browsertest.cc" ]

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