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

import("//build/config/chrome_build.gni")

source_set("authentication") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "authentication_flow.h",
    "authentication_flow.mm",
    "authentication_flow_performer.h",
    "authentication_flow_performer.mm",
    "authentication_flow_performer_delegate.h",
    "authentication_ui_util.h",
    "authentication_ui_util.mm",
    "chrome_signin_view_controller.h",
    "chrome_signin_view_controller.mm",
    "re_signin_infobar_delegate.h",
    "re_signin_infobar_delegate.mm",
    "resized_avatar_cache.h",
    "resized_avatar_cache.mm",
    "signed_in_accounts_view_controller.h",
    "signed_in_accounts_view_controller.mm",
    "signin_account_selector_view_controller.h",
    "signin_account_selector_view_controller.mm",
    "signin_confirmation_view_controller.h",
    "signin_confirmation_view_controller.mm",
    "signin_promo_view_mediator.h",
    "signin_promo_view_mediator.mm",
  ]
  deps = [
    "resources:signin_confirmation_more",
    "resources:signin_promo_close_gray",
    "unified_consent",
    "//base",
    "//components/consent_auditor",
    "//components/google/core/browser",
    "//components/infobars/core",
    "//components/prefs",
    "//components/signin/core/browser",
    "//components/signin/ios/browser",
    "//components/strings",
    "//components/unified_consent",
    "//google_apis",
    "//ios/chrome/app/strings",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/alert_coordinator",
    "//ios/chrome/browser/ui/authentication/cells",
    "//ios/chrome/browser/ui/collection_view/cells",
    "//ios/chrome/browser/ui/colors",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/material_components",
    "//ios/chrome/browser/ui/signin_interaction/public",
    "//ios/chrome/browser/unified_consent",
    "//ios/chrome/common",
    "//ios/public/provider/chrome/browser",
    "//ios/public/provider/chrome/browser/images",
    "//ios/public/provider/chrome/browser/signin",
    "//services/identity/public/cpp",
    "//services/identity/public/objc",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]
  public_deps = [
    "//ios/chrome/browser/ui/collection_view",
  ]
  if (is_chrome_branded) {
    deps += [ "resources:signin_promo_logo_chrome_color" ]
  } else {
    deps += [ "resources:signin_promo_logo_chromium_color" ]
  }
  libs = [
    "CoreGraphics.framework",
    "QuartzCore.framework",
    "UIKit.framework",
  ]
}

source_set("authentication_constants") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "authentication_constants.h",
    "authentication_constants.mm",
  ]
  libs = [ "UIKit.framework" ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "authentication_flow_unittest.mm",
    "authentication_ui_util_unittest.mm",
    "chrome_signin_view_controller_unittest.mm",
    "re_signin_infobar_delegate_unittest.mm",
    "signed_in_accounts_view_controller_unittest.mm",
    "signin_promo_view_mediator_unittest.mm",
  ]
  deps = [
    ":authentication",
    "//base",
    "//base/test:test_support",
    "//components/consent_auditor",
    "//components/consent_auditor:test_support",
    "//components/pref_registry",
    "//components/signin/core/browser:browser",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//components/unified_consent",
    "//components/unified_consent:test_support",
    "//components/version_info",
    "//ios/chrome/app/strings:ios_chromium_strings_grit",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state:test_support",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/prefs:browser_prefs",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/signin:test_support",
    "//ios/chrome/browser/sync",
    "//ios/chrome/browser/ui:feature_flags",
    "//ios/chrome/browser/ui/authentication/cells",
    "//ios/chrome/browser/ui/colors",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/signin_interaction/public",
    "//ios/chrome/browser/ui/table_view:styler",
    "//ios/chrome/browser/unified_consent",
    "//ios/chrome/test:test_support",
    "//ios/public/provider/chrome/browser/signin:test_support",
    "//ios/web/public/test",
    "//testing/gtest",
    "//third_party/ocmock",
    "//ui/base",
  ]
}

source_set("eg_test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "signin_earl_grey_ui.h",
    "signin_earl_grey_ui.mm",
    "signin_earlgrey_utils.h",
    "signin_earlgrey_utils.mm",
  ]
  deps = [
    ":authentication",
    "unified_consent",
    "//components/signin/core/browser",
    "//components/signin/core/browser:shared",
    "//components/unified_consent",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/signin",
    "//ios/chrome/browser/ui/authentication/cells",
    "//ios/chrome/browser/ui/authentication/unified_consent:unified_consent_ui",
    "//ios/chrome/browser/ui/authentication/unified_consent/identity_chooser:identity_chooser_ui",
    "//ios/chrome/test/app:test_support",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/public/provider/chrome/browser/signin",
    "//ios/public/provider/chrome/browser/signin:test_support",
    "//ios/third_party/earl_grey:earl_grey+link",
    "//services/identity/public/cpp",
  ]
}
