# Copyright 2018 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("//ios/web/js_compile.gni")

source_set("manual_fill") {
  sources = [
    "address_coordinator.h",
    "address_coordinator.mm",
    "address_form.h",
    "address_form.mm",
    "address_mediator.h",
    "address_mediator.mm",
    "card_coordinator.h",
    "card_coordinator.mm",
    "card_mediator.h",
    "card_mediator.mm",
    "credential_password_form.h",
    "credential_password_form.mm",
    "credit_card_form.h",
    "credit_card_form.mm",
    "fallback_coordinator.h",
    "fallback_coordinator.mm",
    "form_observer_helper.h",
    "form_observer_helper.mm",
    "manual_fill_injection_handler.h",
    "manual_fill_injection_handler.mm",
    "password_coordinator.h",
    "password_coordinator.mm",
    "password_mediator.h",
    "password_mediator.mm",
  ]
  deps = [
    ":requesters",
    "//base",
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//components/autofill/ios/browser",
    "//components/autofill/ios/form_util",
    "//components/keyed_service/core:core",
    "//components/password_manager/core/browser",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/browser",
    "//ios/chrome/browser/autofill",
    "//ios/chrome/browser/autofill:autofill_shared",
    "//ios/chrome/browser/autofill/manual_fill:manual_fill",
    "//ios/chrome/browser/passwords",
    "//ios/chrome/browser/ui/autofill/manual_fill:manual_fill_ui",
    "//ios/chrome/browser/ui/coordinators:chrome_coordinators",
    "//ios/chrome/browser/ui/list_model:list_model",
    "//ios/chrome/browser/ui/table_view:presentation",
    "//ios/chrome/browser/ui/table_view:table_view",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/browser/web_state_list:web_state_list",
    "//ios/web/public:public",
    "//ui/base:base",
  ]
  libs = [ "UIKit.framework" ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("manual_fill_ui") {
  sources = [
    "action_cell.h",
    "action_cell.mm",
    "address.h",
    "address.mm",
    "address_consumer.h",
    "address_list_delegate.h",
    "address_view_controller.h",
    "address_view_controller.mm",
    "card_consumer.h",
    "card_list_delegate.h",
    "card_view_controller.h",
    "card_view_controller.mm",
    "credential.h",
    "credential.mm",
    "credit_card.h",
    "credit_card.mm",
    "fallback_view_controller.h",
    "fallback_view_controller.mm",
    "keyboard_observer_helper.h",
    "keyboard_observer_helper.mm",
    "manual_fill_accessory_view_controller.h",
    "manual_fill_accessory_view_controller.mm",
    "manual_fill_address_cell.h",
    "manual_fill_address_cell.mm",
    "manual_fill_card_cell.h",
    "manual_fill_card_cell.mm",
    "manual_fill_cell_button.h",
    "manual_fill_cell_button.mm",
    "manual_fill_cell_utils.h",
    "manual_fill_cell_utils.mm",
    "manual_fill_content_delegate.h",
    "manual_fill_password_cell.h",
    "manual_fill_password_cell.mm",
    "password_consumer.h",
    "password_list_delegate.h",
    "password_view_controller.h",
    "password_view_controller.mm",
    "uicolor_manualfill.h",
    "uicolor_manualfill.mm",
  ]
  deps = [
    "//base",
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//components/autofill/ios/browser",
    "//components/password_manager/core/browser",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/browser",
    "//ios/chrome/browser/autofill/manual_fill:manual_fill",
    "//ios/chrome/browser/ui/autofill/manual_fill/resources:mf_arrow_down",
    "//ios/chrome/browser/ui/autofill/manual_fill/resources:mf_arrow_up",
    "//ios/chrome/browser/ui/autofill/manual_fill/resources:mf_gradient",
    "//ios/chrome/browser/ui/autofill/manual_fill/resources:mf_keyboard",
    "//ios/chrome/browser/ui/list_model:list_model",
    "//ios/chrome/browser/ui/table_view:styler",
    "//ios/chrome/browser/ui/table_view:table_view",
    "//ios/chrome/common/ui_util:ui_util",
    "//ios/third_party/material_components_ios",
    "//net:net",
    "//third_party/material_design_icons:ic_credit_card",
    "//third_party/material_design_icons:ic_place",
    "//third_party/material_design_icons:ic_vpn_key",
    "//ui/base:base",
  ]
  libs = [ "UIKit.framework" ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "address_form_unittest.mm",
    "address_unittest.mm",
    "credential_password_form_unittest.mm",
    "credential_unittest.mm",
    "credit_card_form_unittest.mm",
    "credit_card_unittest.mm",
    "form_observer_helper_unittest.mm",
  ]
  deps = [
    ":manual_fill",
    ":manual_fill_ui",
    "//base",
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//components/autofill/ios/form_util:form_util",
    "//components/autofill/ios/form_util:test_support",
    "//ios/chrome/browser",
    "//ios/chrome/browser/web_state_list:test_support",
    "//ios/chrome/browser/web_state_list:web_state_list",
    "//ios/web/public/test/fakes",
    "//testing/gtest:gtest",
    "//third_party/ocmock:ocmock",
    "//url:url",
  ]
}

source_set("requesters") {
  sources = [
    "full_card_request_result_delegate_bridge.h",
    "full_card_request_result_delegate_bridge.mm",
    "full_card_requester.h",
    "full_card_requester.mm",
  ]
  deps = [
    "//base",
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//components/autofill/ios/browser",
    "//ios/chrome/browser/ui/payments:requesters",
    "//ios/chrome/browser/web_state_list:web_state_list",
    "//ios/web/public:public",
    "//ui/base:base",
  ]
  libs = [ "UIKit.framework" ]
  configs += [ "//build/config/compiler:enable_arc" ]
}

source_set("eg_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "card_view_controller_egtest.mm",
    "keyboard_observer_egtest.mm",
    "password_view_controller_egtest.mm",
  ]
  deps = [
    ":manual_fill",
    ":manual_fill_ui",
    "//base",
    "//base/test:test_support",
    "//components/autofill/core/browser",
    "//components/autofill/core/browser:test_support",
    "//components/autofill/core/common",
    "//components/autofill/ios/browser",
    "//components/keyed_service/core",
    "//components/password_manager/core/browser",
    "//ios/chrome/browser/autofill",
    "//ios/chrome/browser/passwords",
    "//ios/chrome/browser/ui/util",
    "//ios/chrome/test/app:test_support",
    "//ios/chrome/test/earl_grey:test_support",
    "//ios/testing/earl_grey:earl_grey_support",
    "//ios/third_party/earl_grey:earl_grey+link",
    "//ios/web:earl_grey_test_support",
    "//ios/web/public/test/http_server",
    "//third_party/ocmock",
  ]
}
