# 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/android/config.gni")
import("//build/config/android/rules.gni")

android_library("net_java") {
  DEPRECATED_java_in_dir = "java/src"
  deps = [
    "//base:base_java",
  ]
  srcjar_deps = [
    ":net_errors_java",
    ":net_android_java_enums_srcjar",
    ":remote_android_keystore_aidl",
  ]
}

android_aidl("remote_android_keystore_aidl") {
  interface_file =
      "java/src/org/chromium/net/IRemoteAndroidKeyStoreInterface.aidl"
  sources = [
    "java/src/org/chromium/net/IRemoteAndroidKeyStore.aidl",
    "java/src/org/chromium/net/IRemoteAndroidKeyStoreCallbacks.aidl",
  ]
}

# TODO(vtl): Doesn't build with SDK version 23; needs some fixin'.
#android_library("net_java_test_support") {
#  DEPRECATED_java_in_dir = "../test/android/javatests/src"
#  deps = [
#    "//base:base_java",
#  ]
#  srcjar_deps = [ ":net_java_test_support_enums_srcjar" ]
#}
#
#android_library("net_javatests") {
#  DEPRECATED_java_in_dir = "javatests/src"
#  deps = [
#    "//base:base_java",
#    "//base:base_java_test_support",
#    ":net_java",
#  ]
#}

java_cpp_template("net_errors_java") {
  package_name = "org/chromium/net"
  sources = [
    "java/NetError.template",
  ]
  inputs = [
    "../base/net_error_list.h",
  ]
}

java_cpp_enum("net_java_test_support_enums_srcjar") {
  sources = [
    "../test/url_request/url_request_failed_job.h",
  ]
  outputs = [
    "org/chromium/net/test/FailurePhase.java",
  ]
}

java_cpp_enum("net_android_java_enums_srcjar") {
  sources = [
    "../base/mime_util.h",
    "../base/network_change_notifier.h",
    "cert_verify_result_android.h",
    "keystore.h",
  ]
  outputs = [
    "org/chromium/net/CertificateMimeType.java",
    "org/chromium/net/CertVerifyStatusAndroid.java",
    "org/chromium/net/ConnectionSubtype.java",
    "org/chromium/net/ConnectionType.java",
    "org/chromium/net/PrivateKeyType.java",
  ]
}

# TODO(GYP)
if (false) {
  unittest_apk("net_unittests_apk") {
    deps = [
      ":net_java",
      ":net_javatests",
      "//net:net_unittests",
    ]
    unittests_dep = "//net:net_unittests"
  }
}
