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

import("//services/catalog/public/tools/catalog.gni")
import("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")

source_set("lib") {
  sources = [
    "identity_manager_impl.cc",
    "identity_manager_impl.h",
    "identity_service.cc",
    "identity_service.h",
  ]

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

  deps = [
    "//base",
    "//components/signin/core/browser:internals",
    "//components/signin/core/browser:shared",
    "//services/identity/public/cpp:cpp_types",
    "//services/identity/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
  ]
}

service_manifest("manifest") {
  name = "identity"
  source = "manifest.json"
}

source_set("tests") {
  testonly = true
  deps = [
    ":lib",
    "//base",
    "//base/test:test_support",
    "//components/prefs:test_support",
    "//components/signin/core/browser:internals",
    "//components/signin/core/browser:internals_test_support",
    "//components/signin/core/browser:shared",
    "//components/sync_preferences:test_support",
    "//mojo/public/cpp/bindings:bindings",
    "//services/identity/public/cpp",
    "//services/identity/public/cpp:test_support",
    "//services/identity/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/cpp:service_test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
  sources = [
    "identity_manager_impl_unittest.cc",
    "public/cpp/access_token_fetcher_unittest.cc",
    "public/cpp/identity_manager_unittest.cc",
    "public/cpp/identity_test_environment_unittest.cc",
    "public/cpp/primary_account_access_token_fetcher_unittest.cc",
  ]
}

service_manifest("unittest_manifest") {
  name = "identity_unittests"
  source = "unittest_manifest.json"
  packaged_services = [ ":manifest" ]
}

catalog("tests_catalog") {
  testonly = true
  embedded_services = [ ":unittest_manifest" ]
}
