# 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 = [
    "credential_password_form.h",
    "credential_password_form.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 = [
    "//base",
    "//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/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_list_delegate.h",
    "card_list_delegate.h",
    "credential.h",
    "credential.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_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:addresses",
    "//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",
    "//net:net",
    "//third_party/material_design_icons:ic_credit_card",
    "//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 = [
    "credential_password_form_unittest.mm",
    "credential_unittest.mm",
    "form_observer_helper_unittest.mm",
  ]
  deps = [
    ":manual_fill",
    ":manual_fill_ui",
    "//base:base",
    "//components/autofill/core/common:common",
    "//components/autofill/ios/form_util:form_util",
    "//components/autofill/ios/form_util:test_support",
    "//ios/chrome/browser/web_state_list:test_support",
    "//ios/chrome/browser/web_state_list:web_state_list",
    "//ios/web/public/test/fakes: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: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 = [
    "keyboard_observer_egtest.mm",
    "password_view_controller_egtest.mm",
  ]
  deps = [
    ":manual_fill",
    ":manual_fill_ui",
    "//base",
    "//base/test:test_support",
    "//components/autofill/core/common",
    "//components/autofill/ios/browser",
    "//components/keyed_service/core",
    "//components/password_manager/core/browser",
    "//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",
  ]
}
