# Copyright 2015 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/buildflag_header.gni")
import("//ios/build/config.gni")
import("//ios/features.gni")
import("//testing/test.gni")
import("//url/features.gni")

buildflag_header("ios_net_features") {
  header = "ios_net_features.h"
  flags = [ "CRONET_BUILD=$is_cronet_build" ]
}

group("all_tests") {
  testonly = true
  deps = [
    ":ios_net_unittests",
  ]
}

source_set("net") {
  deps = [
    ":ios_net_features",
    "//base",
    "//net",
    "//url:url_features",
  ]

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

  sources = [
    "clients/crn_network_client_protocol.h",
    "cookies/cookie_cache.cc",
    "cookies/cookie_cache.h",
    "cookies/cookie_creation_time_manager.h",
    "cookies/cookie_creation_time_manager.mm",
    "cookies/cookie_store_ios.h",
    "cookies/cookie_store_ios.mm",
    "cookies/cookie_store_ios_client.h",
    "cookies/cookie_store_ios_client.mm",
    "cookies/cookie_store_ios_persistent.h",
    "cookies/cookie_store_ios_persistent.mm",
    "cookies/system_cookie_util.h",
    "cookies/system_cookie_util.mm",
    "crn_http_protocol_handler.h",
    "crn_http_protocol_handler.mm",
    "crn_http_protocol_handler_proxy.h",
    "crn_http_protocol_handler_proxy_with_client_thread.h",
    "crn_http_protocol_handler_proxy_with_client_thread.mm",
    "crn_http_url_response.h",
    "crn_http_url_response.mm",
    "empty_nsurlcache.h",
    "empty_nsurlcache.mm",
    "http_cache_helper.cc",
    "http_cache_helper.h",
    "http_protocol_logging.h",
    "http_protocol_logging.mm",
    "http_response_headers_util.h",
    "http_response_headers_util.mm",
    "nsurlrequest_util.h",
    "nsurlrequest_util.mm",
    "protocol_handler_util.h",
    "protocol_handler_util.mm",
    "request_tracker.h",
    "request_tracker.mm",
    "url_scheme_util.h",
    "url_scheme_util.mm",
  ]

  if (!use_platform_icu_alternatives) {
    deps += [ "//base:i18n" ]
  }
}

test("ios_net_unittests") {
  deps = [
    ":net",
    "//base",
    "//base/test:run_all_unittests",
    "//net:test_support",
    "//testing/gtest",
    "//url",
  ]

  sources = [
    "cookies/cookie_cache_unittest.cc",
    "cookies/cookie_creation_time_manager_unittest.mm",
    "cookies/cookie_store_ios_persistent_unittest.mm",
    "cookies/cookie_store_ios_test_util.h",
    "cookies/cookie_store_ios_test_util.mm",
    "cookies/cookie_store_ios_unittest.mm",
    "cookies/system_cookie_util_unittest.mm",
    "http_response_headers_util_unittest.mm",
    "nsurlrequest_util_unittest.mm",
    "protocol_handler_util_unittest.mm",
    "url_scheme_util_unittest.mm",
  ]

  assert_no_deps = ios_assert_no_deps
}
