# 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("infobars") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "infobar_container_mediator.h",
    "infobar_container_mediator.mm",
    "infobar_coordinator.h",
    "infobar_coordinator.mm",
  ]
  deps = [
    ":infobars_ui",
    ":public",
    "//base",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/browser/translate",
    "//ios/chrome/browser/ui/authentication",
    "//ios/chrome/browser/ui/commands",
    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
    "//ios/chrome/browser/ui/settings/sync_utils",
    "//ios/chrome/browser/ui/signin_interaction/public",
    "//ios/chrome/browser/ui/translate",
    "//ios/chrome/browser/upgrade",
    "//ios/chrome/browser/web:tab_id_tab_helper",
    "//ios/chrome/browser/web_state_list",
  ]
}

source_set("public") {
  sources = [
    "infobar_positioner.h",
  ]
}

source_set("infobars_ui") {
  configs += [ "//build/config/compiler:enable_arc" ]
  sources = [
    "confirm_infobar_view.h",
    "confirm_infobar_view.mm",
    "infobar_constants.h",
    "infobar_constants.mm",
    "infobar_container_consumer.h",
    "infobar_container_view_controller.h",
    "infobar_container_view_controller.mm",
  ]
  deps = [
    ":public",
    "resources:infobar_downloading",
    "resources:infobar_popup_blocker",
    "resources:infobar_warning",
    "//base",
    "//base:i18n",
    "//components/strings",
    "//ios/chrome/app/theme:theme",
    "//ios/chrome/app/theme:theme_grit",
    "//ios/chrome/browser/ui",
    "//ios/chrome/browser/ui/colors",
    "//ios/chrome/browser/ui/fancy_ui",
    "//ios/chrome/browser/ui/util",
    "//ios/public/provider/chrome/browser/ui",
    "//ios/third_party/material_components_ios",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]
  libs = [
    "CoreGraphics.framework",
    "QuartzCore.framework",
    "UIKit.framework",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "confirm_infobar_view_unittest.mm",
  ]
  deps = [
    ":infobars_ui",
    "//testing/gtest",
  ]
}

source_set("test_support") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "test_infobar_delegate.h",
    "test_infobar_delegate.mm",
  ]
  deps = [
    "//base",
    "//components/infobars/core",
  ]
}

source_set("eg_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "infobar_egtest.mm",
  ]
  deps = [
    ":test_support",
    "//base",
    "//components/infobars/core",
    "//ios/chrome/app:app_internal",
    "//ios/chrome/browser/infobars",
    "//ios/chrome/browser/tabs",
    "//ios/chrome/test/app:test_support",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/third_party/earl_grey:earl_grey+link",
    "//ios/web/public/test/http_server",
    "//url",
  ]
  libs = [ "XCTest.framework" ]
}
