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

source_set("signin") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "about_signin_internals_factory.cc",
    "about_signin_internals_factory.h",
    "account_consistency_service_factory.h",
    "account_consistency_service_factory.mm",
    "account_fetcher_service_factory.cc",
    "account_fetcher_service_factory.h",
    "account_reconcilor_factory.cc",
    "account_reconcilor_factory.h",
    "account_tracker_service_factory.cc",
    "account_tracker_service_factory.h",
    "authentication_service.h",
    "authentication_service.mm",
    "authentication_service_delegate.h",
    "authentication_service_factory.h",
    "authentication_service_factory.mm",
    "chrome_identity_service_observer_bridge.h",
    "chrome_identity_service_observer_bridge.mm",
    "constants.h",
    "constants.mm",
    "gaia_auth_fetcher_ios.h",
    "gaia_auth_fetcher_ios.mm",
    "gaia_auth_fetcher_ios_bridge.h",
    "gaia_auth_fetcher_ios_bridge.mm",
    "gaia_auth_fetcher_ios_ns_url_session_bridge.h",
    "gaia_auth_fetcher_ios_ns_url_session_bridge.mm",
    "gaia_auth_fetcher_ios_wk_webview_bridge.h",
    "gaia_auth_fetcher_ios_wk_webview_bridge.mm",
    "identity_manager_factory.cc",
    "identity_manager_factory.h",
    "identity_manager_factory_observer.h",
    "identity_service_creator.cc",
    "identity_service_creator.h",
    "ios_chrome_signin_client.h",
    "ios_chrome_signin_client.mm",
    "ios_chrome_signin_status_metrics_provider_delegate.cc",
    "ios_chrome_signin_status_metrics_provider_delegate.h",
    "profile_oauth2_token_service_factory.h",
    "profile_oauth2_token_service_factory.mm",
    "profile_oauth2_token_service_ios_provider_impl.h",
    "profile_oauth2_token_service_ios_provider_impl.mm",
    "signin_browser_state_info_updater.h",
    "signin_browser_state_info_updater.mm",
    "signin_browser_state_info_updater_factory.h",
    "signin_browser_state_info_updater_factory.mm",
    "signin_client_factory.cc",
    "signin_client_factory.h",
    "signin_error_controller_factory.cc",
    "signin_error_controller_factory.h",
    "signin_util.h",
    "signin_util.mm",
  ]
  deps = [
    ":feature_flags",
    "//base",
    "//components/browser_sync",
    "//components/content_settings/core/browser",
    "//components/image_fetcher/core",
    "//components/image_fetcher/ios",
    "//components/keyed_service/core",
    "//components/keyed_service/ios",
    "//components/metrics",
    "//components/pref_registry",
    "//components/prefs",
    "//components/signin/core/browser",
    "//components/signin/ios/browser",
    "//components/signin/ios/browser:active_state_manager",
    "//components/sync",
    "//google_apis",
    "//ios/chrome/browser",
    "//ios/chrome/browser/bookmarks:bookmarks_utils",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/content_settings",
    "//ios/chrome/browser/crash_report",
    "//ios/chrome/browser/reading_list:reading_list_remover",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/common",
    "//ios/net",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/signin",
    "//ios/web",
    "//net",
    "//services/identity:lib",
    "//services/identity/public/cpp",
    "//services/identity/public/mojom",
    "//services/service_manager/public/mojom",
    "//url",
  ]
}

source_set("feature_flags") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "feature_flags.h",
    "feature_flags.mm",
  ]
  deps = [
    "//base",
  ]
}

source_set("test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "authentication_service_delegate_fake.h",
    "authentication_service_delegate_fake.mm",
    "authentication_service_fake.h",
    "authentication_service_fake.mm",
    "identity_test_environment_chrome_browser_state_adaptor.cc",
    "identity_test_environment_chrome_browser_state_adaptor.h",
  ]
  deps = [
    ":signin",
    "//base",
    "//components/image_fetcher/core:test_support",
    "//components/keyed_service/core",
    "//components/signin/core/browser:internals_test_support",
    "//components/signin/ios/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/sync",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/signin",
    "//services/identity/public/cpp:test_support",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "authentication_service_unittest.mm",
    "chrome_identity_service_observer_bridge_unittest.mm",
    "gaia_auth_fetcher_ios_ns_url_session_bridge_unittests.mm",
    "gaia_auth_fetcher_ios_unittest.mm",
    "signin_browser_state_info_updater_unittest.mm",
  ]
  deps = [
    ":feature_flags",
    ":signin",
    ":test_support",
    "//base",
    "//components/pref_registry",
    "//components/prefs",
    "//components/signin/core/browser",
    "//components/signin/core/browser:internals_test_support",
    "//components/signin/ios/browser",
    "//components/signin/ios/browser:test_support",
    "//components/sync:test_support_driver",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//google_apis",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state:browser_state_impl",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/content_settings",
    "//ios/chrome/browser/prefs:browser_prefs",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/sync:test_support",
    "//ios/chrome/browser/web:test_support",
    "//ios/chrome/test:test_support",
    "//ios/net",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/signin",
    "//ios/public/provider/chrome/browser/signin:test_support",
    "//ios/web/public/test",
    "//ios/web/public/test/fakes",
    "//net:test_support",
    "//services/identity/public/cpp:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/ocmock",
  ]
}
