# Copyright (c) 2013 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("//testing/test.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("features.gni")

if (is_android) {
  import("//build/config/android/rules.gni")
}

buildflag_header("url_features") {
  header = "url_features.h"
  flags = [ "USE_PLATFORM_ICU_ALTERNATIVES=$use_platform_icu_alternatives" ]
}

component("url") {
  sources = [
    "gurl.cc",
    "gurl.h",
    "origin.cc",
    "origin.h",
    "scheme_host_port.cc",
    "scheme_host_port.h",
    "third_party/mozilla/url_parse.cc",
    "third_party/mozilla/url_parse.h",
    "url_canon.cc",
    "url_canon.h",
    "url_canon_etc.cc",
    "url_canon_filesystemurl.cc",
    "url_canon_fileurl.cc",
    "url_canon_host.cc",
    "url_canon_internal.cc",
    "url_canon_internal.h",
    "url_canon_internal_file.h",
    "url_canon_ip.cc",
    "url_canon_ip.h",
    "url_canon_mailtourl.cc",
    "url_canon_path.cc",
    "url_canon_pathurl.cc",
    "url_canon_query.cc",
    "url_canon_relative.cc",
    "url_canon_stdstring.cc",
    "url_canon_stdstring.h",
    "url_canon_stdurl.cc",
    "url_constants.cc",
    "url_constants.h",
    "url_export.h",
    "url_file.h",
    "url_parse_file.cc",
    "url_parse_internal.h",
    "url_util.cc",
    "url_util.h",
    "url_util_internal.h",
  ]

  defines = [ "URL_IMPLEMENTATION" ]

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
  ]

  if (is_win) {
    # Don't conflict with Windows' "url.dll".
    output_name = "url_lib"
  }

  # ICU support.
  if (use_platform_icu_alternatives) {
    if (is_android) {
      sources += [ "url_canon_icu_alternatives_android.cc" ]
      deps += [
        ":url_features",
        ":url_java",
        ":url_jni_headers",
        "//base",
        "//base/third_party/dynamic_annotations",
      ]
    } else if (is_ios) {
      sources += [ "url_canon_icu_alternatives_ios.mm" ]
    } else {
      assert(false,
             "ICU alternative is not implemented for platform: " + target_os)
    }
  } else {
    # Use ICU.
    sources += [
      "url_canon_icu.cc",
      "url_canon_icu.h",
    ]
    deps += [ "//third_party/icu" ]
  }
}

if (is_android) {
  android_library("url_java") {
    java_files = [ "android/java/src/org/chromium/url/IDNStringUtil.java" ]
    deps = [
      "//base:base_java",
    ]
  }

  generate_jni("url_jni_headers") {
    sources = [
      "android/java/src/org/chromium/url/IDNStringUtil.java",
    ]
    jni_package = "url"
  }
}

test("url_unittests") {
  sources = [
    "gurl_unittest.cc",
    "origin_unittest.cc",
    "run_all_unittests.cc",
    "scheme_host_port_unittest.cc",
    "url_canon_icu_unittest.cc",
    "url_canon_unittest.cc",
    "url_parse_unittest.cc",
    "url_test_utils.h",
    "url_util_unittest.cc",
  ]

  deps = [
    ":url",
    "//base",
    "//base/test:test_support",
    "//testing/gtest",
  ]

  if (!is_ios) {
    sources += [ "mojom/url_gurl_mojom_traits_unittest.cc" ]
  }

  if (use_platform_icu_alternatives) {
    # Unit tests that are not supported by the current ICU alternatives on Android.
    if (is_android) {
      sources -= [
        "url_canon_icu_unittest.cc",
        "url_canon_unittest.cc",
      ]
      deps += [ ":url_java" ]
    }

    # Unit tests that are not supported by the current ICU alternatives on iOS.
    if (is_ios) {
      sources -= [
        "origin_unittest.cc",
        "scheme_host_port_unittest.cc",
        "url_canon_icu_unittest.cc",
        "url_canon_unittest.cc",
      ]
    }
  } else {  # !use_platform_icu_alternatives
    deps += [ "//third_party/icu:icuuc" ]
  }

  # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  if (!is_ios) {
    deps += [
      "//mojo/edk",
      "//mojo/edk/test:test_support",
      "//url/mojom:test_url_mojom_gurl",
    ]
  }
}

fuzzer_test("gurl_fuzzer") {
  sources = [
    "gurl_fuzzer.cc",
  ]
  deps = [
    ":url",
    "//base",
    "//base:i18n",
  ]
  dict = "gurl_fuzzer.dict"
}
