# 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.

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

  android_library("java") {
    sources = [
      "android/java/src/org/chromium/chrome/browser/webid/DigitalAssetLinksVerifier.java",
      "android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsCreationDelegate.java",
      "android/java/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegate.java",
      "android/java/src/org/chromium/chrome/browser/webid/DigitalIdentityProvider.java",
      "android/java/src/org/chromium/chrome/browser/webid/IdentityCredentialsDelegate.java",
      "android/java/src/org/chromium/chrome/browser/webid/IdentityProviderService.java",
      "android/java/src/org/chromium/chrome/browser/webid/LoginStatusService.java",
      "android/java/src/org/chromium/chrome/browser/webid/TestIdP.java",
      "android/java/src/org/chromium/chrome/browser/webid/VerifiedOriginResolver.java",
    ]
    deps = [
      "$google_play_services_package:google_play_services_identity_credentials_java",
      "$google_play_services_package:google_play_services_tasks_java",
      "//base:base_java",
      "//base:service_loader_java",
      "//chrome/browser/android/browserservices/verification:java",
      "//components/content_relationship_verification/android:java",
      "//components/embedder_support/android:util_java",
      "//content/public/android:content_java",
      "//third_party/androidx:androidx_annotation_annotation_experimental_java",
      "//third_party/androidx:androidx_annotation_annotation_java",
      "//third_party/androidx:androidx_browser_browser_java",
      "//third_party/androidx:androidx_core_core_java",
      "//third_party/androidx:androidx_credentials_credentials_java",
      "//third_party/jni_zero:jni_zero_java",
      "//ui/android:ui_no_recycler_view_java",
      "//url:url_java",
    ]

    srcjar_deps = [ ":jni_headers" ]
  }

  generate_jni("jni_headers") {
    sources = [
      "android/java/src/org/chromium/chrome/browser/webid/DigitalIdentityProvider.java",
      "android/java/src/org/chromium/chrome/browser/webid/IdentityProviderService.java",
      "android/java/src/org/chromium/chrome/browser/webid/VerifiedOriginResolver.java",
    ]
  }

  robolectric_library("junit") {
    testonly = true
    sources = [
      "android/junit/src/org/chromium/chrome/browser/webid/DigitalCredentialsPresentationDelegateTest.java",
      "android/junit/src/org/chromium/chrome/browser/webid/DigitalIdentityProviderUnitTest.java",
    ]

    deps = [
      ":java",
      "$google_play_services_package:google_play_services_identity_credentials_java",
      "//base:base_junit_test_support",
      "//base:promise_java",
      "//content/public/android:content_java",
      "//third_party/androidx:androidx_credentials_credentials_java",
      "//third_party/junit",
      "//third_party/mockito:mockito_java",
    ]
  }

  android_library("javatests") {
    testonly = true
    resources_package = "org.chromium.chrome.browser.webid"

    sources = [ "android/javatests/src/org/chromium/chrome/browser/webid/LoginStatusServiceTest.java" ]

    deps = [
      ":java",
      "//base:base_java",
      "//base:base_java_test_support",
      "//chrome/test/android:chrome_java_integration_test_support",
      "//third_party/androidx:androidx_test_runner_java",
      "//third_party/junit",
    ]
  }
}

source_set("webid") {
  sources = [
    "federated_identity_account_keyed_permission_context.h",
    "federated_identity_api_permission_context.h",
    "federated_identity_api_permission_context_factory.h",
    "federated_identity_auto_reauthn_permission_context.h",
    "federated_identity_auto_reauthn_permission_context_factory.h",
    "federated_identity_identity_provider_registration_context.h",
    "federated_identity_identity_provider_signin_status_context.h",
    "federated_identity_permission_context.h",
    "federated_identity_permission_context_factory.h",
    "identity_provider_permission_request.h",
  ]
  if (is_android) {
    sources += [
      "android_native_idp_fetcher.h",
      "identity_provider_service.h",
      "verified_origin_resolver.h",
    ]
  }
  public_deps = [
    "//chrome/browser/profiles:profile",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/browser:cookie_settings",
    "//components/content_settings/core/common",
    "//components/permissions",
    "//components/signin/public/identity_manager",
    "//components/webid",
    "//content/public/browser",
    "//third_party/blink/public/common",
    "//url",
  ]
  if (is_android) {
    public_deps += [ "//chrome/browser/webid:jni_headers" ]
  }
}

source_set("impl") {
  sources = [
    "federated_identity_account_keyed_permission_context.cc",
    "federated_identity_api_permission_context.cc",
    "federated_identity_api_permission_context_factory.cc",
    "federated_identity_auto_reauthn_permission_context.cc",
    "federated_identity_auto_reauthn_permission_context_factory.cc",
    "federated_identity_identity_provider_registration_context.cc",
    "federated_identity_identity_provider_signin_status_context.cc",
    "federated_identity_permission_context.cc",
    "federated_identity_permission_context_factory.cc",
    "identity_provider_permission_request.cc",
  ]
  if (is_android) {
    sources += [
      "android_native_idp_fetcher.cc",
      "identity_provider_service.cc",
      "verified_origin_resolver.cc",
    ]
  }
  deps = [
    ":webid",
    "//base",
    "//chrome/browser:browser_features",
    "//chrome/browser/actor",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/permissions",
    "//chrome/browser/profiles:profile",
    "//chrome/browser/signin",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/common",
    "//components/password_manager/core/browser",
    "//components/permissions",
    "//components/signin/public/identity_manager",
    "//content/public/browser",
    "//content/public/common",
    "//google_apis",
    "//net",
    "//services/network/public/mojom:cookies_mojom",
    "//third_party/blink/public:runtime_features_for_public",
    "//third_party/blink/public/common",
    "//third_party/blink/public/common:headers",
    "//url",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "federated_embedder_login_request_unittest.cc",
    "federated_identity_account_keyed_permission_context_unittest.cc",
    "federated_identity_api_permission_context_unittest.cc",
    "federated_identity_auto_reauthn_permission_context_unittest.cc",
    "federated_identity_identity_provider_registration_context_unittest.cc",
    "federated_identity_identity_provider_signin_status_context_unittest.cc",
    "federated_identity_permission_context_unittest.cc",
    "identity_provider_permission_request_unittest.cc",
  ]
  deps = [
    ":webid",
    "//base",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/browser/content_settings:content_settings_factory",
    "//chrome/browser/sync",
    "//chrome/browser/sync:factories",
    "//chrome/browser/trusted_vault",
    "//chrome/test:test_support",
    "//components/content_settings/core/browser",
    "//components/content_settings/core/browser:cookie_settings",
    "//components/content_settings/core/common",
    "//components/password_manager/core/browser",
    "//components/password_manager/core/browser:test_support",
    "//components/permissions",
    "//components/prefs",
    "//components/sync_preferences:test_support",
    "//content/public/browser",
    "//content/public/common",
    "//content/test:test_support",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public:runtime_features_for_public",
    "//third_party/blink/public/common",
    "//third_party/blink/public/common:headers",
    "//url",
  ]
}

if (!is_android) {
  source_set("browser_tests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources =
        [ "federated_identity_auto_reauthn_permission_context_browsertest.cc" ]
    deps = [
      ":webid",
      "//chrome/browser/actor",
      "//chrome/browser/actor:test_support",
      "//chrome/browser/actor/ui:test_support",
      "//chrome/browser/password_manager/factories",
      "//chrome/browser/profiles:profile",
      "//chrome/browser/ui",
      "//chrome/test:test_support_ui",
      "//content/test:test_support",
    ]
  }
}

if (is_android) {
  source_set("android_browsertests") {
    testonly = true
    defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]
    sources = [
      "android_native_idp_fetcher_browsertest.cc",
      "identity_provider_service_browsertest.cc",
    ]
    deps = [
      ":webid",
      "//base",
      "//base/test:test_support",
      "//chrome/test:test_support",
      "//chrome/test:test_support_ui_android",
      "//content/test:test_support",
    ]
  }
}

import("//third_party/protobuf/proto_library.gni")

proto_library("fedcm_clickthrough_rate_metadata_proto") {
  sources = [ "proto/fedcm_clickthrough_rate_metadata.proto" ]
  cc_generator_options = "lite=true:"
}
