# Copyright 2017 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("//v8/gni/v8.gni")

source_set("lib") {
  sources = [
    "host_resolver_mojo.cc",
    "host_resolver_mojo.h",
    "mojo_proxy_resolver_v8_tracing_bindings.h",
    "pac_js_library.h",
    "proxy_host_resolver.h",
    "proxy_resolver_factory_impl.cc",
    "proxy_resolver_factory_impl.h",
    "proxy_resolver_impl.cc",
    "proxy_resolver_impl.h",
    "proxy_resolver_v8.cc",
    "proxy_resolver_v8.h",
    "proxy_resolver_v8_tracing.cc",
    "proxy_resolver_v8_tracing.h",
  ]

  configs += [
    "//build/config/compiler:wexit_time_destructors",
    "//v8:external_startup_data",
  ]

  deps = [
    "//base",
    "//gin",
    "//mojo/public/cpp/bindings",
    "//url",
    "//v8",
  ]

  public_deps = [
    "//net",
    "//net:constants",
    "//services/network/public/mojom:mojom_ip_address",
    "//services/proxy_resolver/public/mojom",
    "//services/service_manager/public/cpp",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "host_resolver_mojo_unittest.cc",
    "mock_proxy_host_resolver.cc",
    "mock_proxy_host_resolver.h",
    "mojo_proxy_resolver_v8_tracing_bindings_unittest.cc",
    "proxy_resolver_factory_impl_unittest.cc",
    "proxy_resolver_impl_unittest.cc",
    "proxy_resolver_v8_tracing_unittest.cc",
    "proxy_resolver_v8_unittest.cc",
  ]

  deps = [
    ":lib",
    "//base",
    "//base/test:test_support",
    "//net:test_support",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (v8_use_external_startup_data) {
    deps += [ "//gin" ]
  }

  if (is_android) {
    deps += [ "//v8:v8_external_startup_data_assets" ]
  }

  configs += [ "//v8:external_startup_data" ]

  data = [ "test/data/" ]
}
