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

import("//build/config/crypto.gni")

assert(!is_ios, "Chromium/iOS shouldn't use anything in //chrome")

static_library("net") {
  sources = [
    "net_resource_provider.cc",
    "net_resource_provider.h",
    "safe_search_util.cc",
    "safe_search_util.h",
  ]

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps = [
    "//base",
    "//base:i18n",
    "//chrome:resources",
    "//chrome:strings",
    "//components/google/core/common",
    "//components/url_formatter",
    "//crypto",
    "//net",
    "//net:net_resources",
    "//third_party/icu",
    "//ui/base",
  ]

  if (use_nss_certs) {
    sources += [
      "x509_certificate_model_nss.cc",
      "x509_certificate_model_nss.h",
    ]
    deps += [
      "//chrome/third_party/mozilla_security_manager",
      "//crypto:platform",
    ]
    allow_circular_includes_from =
        [ "//chrome/third_party/mozilla_security_manager" ]
  }
}
