# Copyright 2019 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/buildflag_header.gni")
import("//components/signin/features.gni")
import("//third_party/protobuf/proto_library.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

buildflag_header("signin_buildflags") {
  header = "signin_buildflags.h"
  flags = [
    "ENABLE_DICE_SUPPORT=$enable_dice_support",
    "ENABLE_MIRROR=$enable_mirror",
    "ENABLE_BOUND_SESSION_CREDENTIALS=$enable_bound_session_credentials",
  ]
}

proto_library("hybrid_encryption_key_proto") {
  sources = [
    "hybrid_encryption_key.proto",
    "tink_key.proto",
  ]
}

static_library("base") {
  sources = [
    "account_consistency_method.h",
    "avatar_icon_util.cc",
    "avatar_icon_util.h",
    "bound_session_oauth_multilogin_delegate.h",
    "consent_level.h",
    "device_id_helper.cc",
    "device_id_helper.h",
    "gaia_id_hash.cc",
    "gaia_id_hash.h",
    "hybrid_encryption_key.cc",
    "hybrid_encryption_key.h",
    "multilogin_parameters.cc",
    "multilogin_parameters.h",
    "oauth_consumer.cc",
    "oauth_consumer.h",
    "oauth_consumer_id.h",
    "oauth_consumer_registry.cc",
    "oauth_consumer_registry.h",
    "persistent_repeating_timer.cc",
    "persistent_repeating_timer.h",
    "session_binding_utils.cc",
    "session_binding_utils.h",
    "signin_client.cc",
    "signin_client.h",
    "signin_metrics.cc",
    "signin_metrics.h",
    "signin_prefs.cc",
    "signin_prefs.h",
    "wait_for_network_callback_helper.cc",
    "wait_for_network_callback_helper.h",
  ]
  deps = [
    "//components/contextual_tasks/public:feature_list",
    "//components/metrics",
    "//components/prefs",

    # TODO(crbug.com/478783796): Remove once kWalletApiPrivatePassesEnabled
    # launches.
    "//components/wallet/core/common:features",
    "//crypto",
    "//third_party/boringssl",
    "//third_party/icu:icui18n",
    "//third_party/re2",
  ]
  public_deps = [
    ":hybrid_encryption_key_proto",
    ":signin_buildflags",
    ":signin_switches",
    "//base",
    "//components/keyed_service/core",
    "//components/version_info:channel",
    "//google_apis",
    "//url",
  ]

  if (is_android) {
    sources += [ "signin_feature_map.cc" ]
    deps += [ "//components/signin/public/android:jni_headers" ]
  }

  if (is_chromeos) {
    deps += [ "//components/user_manager" ]
    public_deps += [ "//components/account_manager_core" ]
  }

  if (enable_dice_support) {
    sources += [
      "binding_key_registration_token_helper.cc",
      "binding_key_registration_token_helper.h",
      "binding_key_registration_token_result.cc",
      "binding_key_registration_token_result.h",
    ]
    public_deps += [ "//components/unexportable_keys" ]
  }
}

if (is_android || is_ios) {
  source_set("signin_deep_link") {
    sources = [
      "signin_deep_link_metrics.cc",
      "signin_deep_link_metrics.h",
      "signin_deep_link_parser.cc",
      "signin_deep_link_parser.h",
      "signin_deep_link_payload.cc",
      "signin_deep_link_payload.h",
    ]
    deps = [
      ":signin_switches",
      "//base",
      "//net",
    ]
    public_deps = [ "//url" ]
    if (is_android) {
      sources += [
        "signin_deep_link_payload_conversions.cc",
        "signin_deep_link_payload_conversions.h",
      ]
      deps += [
        "//components/signin/public/android:jni_headers",
        "//third_party/jni_zero",
      ]
    }
  }
}

if (is_android) {
  java_cpp_enum("signin_metrics_enum_javagen") {
    sources = [
      "signin_deep_link_metrics.h",
      "signin_deep_link_payload.h",
      "signin_metrics.h",
    ]
  }
}

static_library("test_support") {
  testonly = true
  sources = [
    "hybrid_encryption_key_test_utils.cc",
    "hybrid_encryption_key_test_utils.h",
    "list_accounts_test_utils.cc",
    "list_accounts_test_utils.h",
    "session_binding_test_utils.cc",
    "session_binding_test_utils.h",
    "test_signin_client.cc",
    "test_signin_client.h",
  ]

  deps = [
    "//base/test:test_support",

    # TODO(crbug.com/478783796): Remove once kWalletApiPrivatePassesEnabled
    # launches.
    "//components/prefs",
    "//components/wallet/core/common:features",
    "//crypto",
    "//google_apis:test_support",

    # TODO(b/309104936): Remove this unwanted dependency.
    "//components/signin/public/identity_manager",
  ]

  public_deps = [
    ":base",
    "//base",
    "//services/network:test_support",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "avatar_icon_util_unittest.cc",
    "device_id_helper_unittest.cc",
    "gaia_id_hash_unittest.cc",
    "hybrid_encryption_key_unittest.cc",
    "persistent_repeating_timer_unittest.cc",
    "session_binding_utils_unittest.cc",
    "signin_metrics_unittest.cc",
    "signin_prefs_unittest.cc",
  ]

  deps = [
    ":base",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/metrics",
    "//components/prefs:test_support",
    "//components/sync_preferences:test_support",
    "//testing/gtest",
    "//url",
  ]

  if (enable_dice_support) {
    sources += [ "binding_key_registration_token_helper_unittest.cc" ]
    deps += [
      "//components/unexportable_keys:test_support",
      "//crypto:test_support",
    ]
  }

  if (is_android || is_ios) {
    sources += [
      "signin_deep_link_metrics_unittest.cc",
      "signin_deep_link_parser_unittest.cc",
      "signin_deep_link_payload_unittest.cc",
    ]
    deps += [ ":signin_deep_link" ]
  }
}

component("signin_switches") {
  output_name = "signin_switches"

  defines = [ "IS_SIGNIN_SWITCHES_IMPL" ]

  sources = [
    "signin_pref_names.cc",
    "signin_pref_names.h",
    "signin_switches.cc",
    "signin_switches.h",
  ]

  deps = [
    ":signin_buildflags",
    "//base",
    "//components/prefs",
    "//extensions/buildflags",
  ]
}
