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

if (is_android) {
  import("//build/config/android/config.gni")
  autofill_enable_sync = !is_android_webview_build
} else {
  autofill_enable_sync = true
}

config("autofill_browser_config") {
  if (autofill_enable_sync) {
    defines = [ "AUTOFILL_ENABLE_SYNC" ]
  }
}

# GYP version: components/autofill.gyp:autofill_regexes
action("regexes") {
  visibility = "//components/autofill/*"
  script = "//build/escape_unicode.py"

  inputs = [
    "autofill_regex_constants.cc.utf8",
  ]
  outputs = [
    "$target_gen_dir/autofill_regex_constants.cc",
  ]

  args = [ "-o", rebase_path(target_gen_dir, root_build_dir) ]
  args += rebase_path(inputs, root_build_dir)
}

# GYP version: components/autofill.gyp:autofill_core_browser
static_library("browser") {
  sources = [
    "address.cc",
    "address.h",
    "address_field.cc",
    "address_field.h",
    "address_i18n.cc",
    "address_i18n.h",
    "autocomplete_history_manager.cc",
    "autocomplete_history_manager.h",
    "autofill-inl.h",
    "autofill_country.cc",
    "autofill_country.h",
    "autofill_data_model.cc",
    "autofill_data_model.h",
    "autofill_download.cc",
    "autofill_download.h",
    "autofill_driver.h",
    "autofill_external_delegate.cc",
    "autofill_external_delegate.h",
    "autofill_field.cc",
    "autofill_field.h",
    "autofill_ie_toolbar_import_win.cc",
    "autofill_ie_toolbar_import_win.h",
    "autofill_manager.cc",
    "autofill_manager.h",
    "autofill_client.h",
    "autofill_manager_test_delegate.h",
    "autofill_metrics.cc",
    "autofill_metrics.h",
    "autofill_popup_delegate.h",
    "autofill_profile.cc",
    "autofill_profile.h",
    "autofill_regex_constants.cc.utf8",
    "autofill_regex_constants.h",
    "autofill_regexes.cc",
    "autofill_regexes.h",
    "autofill_scanner.cc",
    "autofill_scanner.h",
    "autofill_server_field_info.h",
    "autofill_type.cc",
    "autofill_type.h",
    "autofill_xml_parser.cc",
    "autofill_xml_parser.h",
    "contact_info.cc",
    "contact_info.h",
    "credit_card.cc",
    "credit_card.h",
    "credit_card_field.cc",
    "credit_card_field.h",
    "email_field.cc",
    "email_field.h",
    "field_types.h",
    "form_field.cc",
    "form_field.h",
    "form_group.cc",
    "form_group.h",
    "form_structure.cc",
    "form_structure.h",
    "name_field.cc",
    "name_field.h",
    "password_generator.cc",
    "password_generator.h",
    "personal_data_manager.cc",
    "personal_data_manager.h",
    "personal_data_manager_mac.mm",
    "personal_data_manager_observer.h",
    "phone_field.cc",
    "phone_field.h",
    "phone_number.cc",
    "phone_number.h",
    "phone_number_i18n.cc",
    "phone_number_i18n.h",
    "popup_item_ids.h",
    "state_names.cc",
    "state_names.h",
    "validation.cc",
    "validation.h",
    "webdata/autofill_change.cc",
    "webdata/autofill_change.h",
    "webdata/autofill_entry.cc",
    "webdata/autofill_entry.h",
    "webdata/autofill_profile_syncable_service.cc",
    "webdata/autofill_profile_syncable_service.h",
    "webdata/autofill_table.cc",
    "webdata/autofill_table.h",
    "webdata/autofill_webdata.h",
    "webdata/autofill_webdata_backend.h",
    "webdata/autofill_webdata_backend_impl.cc",
    "webdata/autofill_webdata_backend_impl.h",
    "webdata/autofill_webdata_service.cc",
    "webdata/autofill_webdata_service.h",
    "webdata/autofill_webdata_service_observer.h",
  ]

  # Compile the generated regex file.
  sources += get_target_outputs(":regexes")

  deps = [
    ":regexes",
    "//base",
    "//base:i18n",
    "//base:prefs",
    "//components/autofill/core/common",
    "//components/keyed_service/core",
    "//components/os_crypt",
    "//components/resources",
    "//components/strings",
    "//components/webdata/common",
    "//google_apis",
    "//skia",
    "//sql",
    "//third_party/icu",
    "//third_party/libaddressinput:util",
    "//third_party/libphonenumber",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
    #'../third_party/fips181/fips181.gyp:fips181',  TODO(GYP)
    # TODO(GYP) also remove libjingle_stub_config below when this is added:
    #'../third_party/libjingle/libjingle.gyp:libjingle',  TODO(GYP)
    #'pref_registry',  TODO(GYP)
  ]

  configs += [ "//content:libjingle_stub_config" ]
  direct_dependent_configs = [ ":autofill_browser_config" ]

  if (autofill_enable_sync) {
    deps += [ "//sync" ]
  } else {
    sources -= [
      "webdata/autofill_profile_syncable_service.cc",
      "webdata/autofill_profile_syncable_service.h",
    ]
  }

  if (is_win) {
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    cflags = [ "/wd4267" ]
  }
}

static_library("test_support") {
  sources = [
    "android/test_auxiliary_profile_loader_android.cc",
    "android/test_auxiliary_profile_loader_android.h",
    "autofill_test_utils.cc",
    "autofill_test_utils.h",
    "data_driven_test.cc",
    "data_driven_test.h",
    "test_autofill_client.cc",
    "test_autofill_client.h",
    "test_autofill_driver.cc",
    "test_autofill_driver.h",
    "test_autofill_external_delegate.cc",
    "test_autofill_external_delegate.h",
    "test_personal_data_manager.cc",
    "test_personal_data_manager.h",
  ]

  deps = [
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//skia",
    "//testing/gtest",
  ]
}
