# 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/config/android/rules.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/test.gni")

if (is_android) {
  android_library("provider_java") {
    java_files = [ "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsContentProvider.java" ]
  }

  android_library("client_java") {
    java_files = [
      "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClient.java",
      "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClientResult.java",
    ]
    deps = [
      "//base:base_java",
    ]
  }

  junit_binary("components_web_restrictions_junit_tests") {
    java_files = [
      "browser/junit/src/org/chromium/components/webrestrictions/browser/WebRestrictionsContentProviderTest.java",
      "browser/junit/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClientTest.java",
    ]
    deps = [
      ":client_java",
      ":provider_java",
      "//base:base_java",
      "//base:base_junit_test_support",
      "//third_party/hamcrest:hamcrest_java",
    ]
  }

  generate_jni("web_restrictions_jni_headers") {
    sources = [
      "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClient.java",
      "browser/java/src/org/chromium/components/webrestrictions/browser/WebRestrictionsClientResult.java",
    ]
    jni_package = "web_restrictions"
  }

  static_library("browser") {
    sources = [
      "browser/web_restrictions_client.cc",
      "browser/web_restrictions_client.h",
      "browser/web_restrictions_client_result.cc",
      "browser/web_restrictions_client_result.h",
      "browser/web_restrictions_mojo_implementation.cc",
      "browser/web_restrictions_mojo_implementation.h",
      "browser/web_restrictions_resource_throttle.cc",
      "browser/web_restrictions_resource_throttle.h",
    ]
    deps = [
      ":interfaces",
      ":web_restrictions_jni_headers",
      "//base",
      "//content/public/browser",
      "//mojo/public/cpp/bindings:bindings",
      "//net:net",
    ]
  }

  mojom("interfaces") {
    sources = [
      "interfaces/web_restrictions.mojom",
    ]
  }

  generate_jni("test_support_jni_headers") {
    sources = [
      "browser/javatest/src/org/chromium/components/webrestrictions/browser/MockWebRestrictionsClient.java",
    ]
    jni_package = "web_restrictions"
    deps = [
      ":client_java",
    ]
  }

  android_library("test_support_java") {
    java_files = [ "browser/javatest/src/org/chromium/components/webrestrictions/browser/MockWebRestrictionsClient.java" ]
    deps = [
      ":client_java",
      "//base:base_java",
    ]
  }

  source_set("test_support") {
    sources = [
      "browser/mock_web_restrictions_client.cc",
      "browser/mock_web_restrictions_client.h",
    ]
    deps = [
      ":test_support_jni_headers",
      "//base",
    ]
  }

  source_set("unit_tests") {
    testonly = true
    sources = [
      "browser/web_restrictions_client_unittest.cc",
      "browser/web_restrictions_resource_throttle_unittest.cc",
    ]
    deps = [
      ":browser",
      ":test_support",
      "//base",
      "//base/test:test_support",
      "//content/test:test_support",
      "//net",
      "//testing/gtest",
      "//url",
    ]
  }
}
