# 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:table_view",
    "//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",
    "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_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/common",
    "//components/password_manager/core/browser",
    "//ios/chrome/app/strings:ios_strings_grit",
    "//ios/chrome/browser/autofill/manual_fill:manual_fill",
    "//ios/chrome/browser/ui/autofill/manual_fill/resources:addresses",
    "//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_account_circle",
    "//third_party/material_design_icons:ic_credit_card",
    "//third_party/material_design_icons:ic_keyboard",
    "//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("eg_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "keyboard_observer_egtest.mm",
  ]
  deps = [
    ":manual_fill",
    ":manual_fill_ui",
    "//base",
    "//base/test:test_support",
    "//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:ocmock",
  ]
}
