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

source_set("net") {
  sources = [
    "chrome_cookie_store_ios_client.h",
    "chrome_cookie_store_ios_client.mm",
    "connection_type_observer_bridge.h",
    "connection_type_observer_bridge.mm",
    "cookie_util.h",
    "cookie_util.mm",
    "crl_set_fetcher.cc",
    "crl_set_fetcher.h",
    "http_server_properties_manager_factory.cc",
    "http_server_properties_manager_factory.h",
    "image_fetcher.h",
    "image_fetcher.mm",
    "ios_chrome_http_user_agent_settings.h",
    "ios_chrome_http_user_agent_settings.mm",
    "ios_chrome_network_delegate.cc",
    "ios_chrome_network_delegate.h",
    "ios_chrome_url_request_context_getter.cc",
    "ios_chrome_url_request_context_getter.h",
    "metrics_network_client.h",
    "metrics_network_client.mm",
    "metrics_network_client_manager.h",
    "metrics_network_client_manager.mm",
    "net_types.h",
    "proxy_service_factory.cc",
    "proxy_service_factory.h",
    "retryable_url_fetcher.h",
    "retryable_url_fetcher.mm",
  ]
  deps = [
    "//base",
    "//components/component_updater",
    "//components/content_settings/core/browser",
    "//components/pref_registry",
    "//components/prefs",
    "//components/proxy_config",
    "//components/update_client",
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
    "//ios/chrome/browser/browsing_data",
    "//ios/chrome/browser/webp_transcode",
    "//ios/net",
    "//ios/web",
    "//net",
    "//net:extras",
    "//url",
  ]
  allow_circular_includes_from = [
    "//ios/chrome/browser",
    "//ios/chrome/browser/browser_state",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "mock_image_fetcher.h",
    "mock_image_fetcher.mm",
  ]
  deps = [
    ":net",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  configs += [ "//build/config/compiler:enable_arc" ]
  testonly = true
  sources = [
    "cookie_util_unittest.mm",
    "image_fetcher_unittest.mm",
    "metrics_network_client_unittest.mm",
    "retryable_url_fetcher_unittest.mm",
  ]
  deps = [
    ":net",
    "//base",
    "//base/test:test_support",
    "//ios/web:test_support",
    "//net",
    "//net:test_support",
    "//testing/gtest",
  ]
}
