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

source_set("native") {
  deps = [
    ":native_jni",
    "//android_webview/common:version",
    "//base",
    "//base/third_party/dynamic_annotations:dynamic_annotations",
    "//cc:cc",
    "//components/autofill/content/browser:browser",
    "//components/strings",
    "//components/web_contents_delegate_android:web_contents_delegate_android",
    "//content/public/common",
    "//device/battery:mojo_bindings",
    "//media/base/android:android",
    "//net",
    "//skia",
    "//storage/browser",
    "//storage/common",
    "//third_party/boringssl",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry:geometry",
  ]

  include_dirs = [
    "//skia/config",
    "//third_party/protobuf",
  ]

  sources = [
    "android_protocol_handler.cc",
    "android_protocol_handler.h",
    "android_webview_jni_registrar.cc",
    "android_webview_jni_registrar.h",
    "aw_autofill_client.cc",
    "aw_autofill_client.h",
    "aw_browser_dependency_factory.cc",
    "aw_browser_dependency_factory.h",
    "aw_contents.cc",
    "aw_contents.h",
    "aw_contents_background_thread_client.cc",
    "aw_contents_background_thread_client.h",
    "aw_contents_client_bridge.cc",
    "aw_contents_client_bridge.h",
    "aw_contents_io_thread_client_impl.cc",
    "aw_contents_io_thread_client_impl.h",
    "aw_contents_lifecycle_notifier.cc",
    "aw_contents_lifecycle_notifier.h",
    "aw_contents_statics.cc",
    "aw_contents_statics.h",
    "aw_debug.cc",
    "aw_debug.h",
    "aw_devtools_server.cc",
    "aw_devtools_server.h",
    "aw_form_database.cc",
    "aw_form_database.h",
    "aw_gl_functor.cc",
    "aw_gl_functor.h",
    "aw_http_auth_handler.cc",
    "aw_http_auth_handler.h",
    "aw_locale_manager_impl.cc",
    "aw_locale_manager_impl.h",
    "aw_media_url_interceptor.cc",
    "aw_media_url_interceptor.h",
    "aw_metrics_switch.cc",
    "aw_metrics_switch.h",
    "aw_pdf_exporter.cc",
    "aw_pdf_exporter.h",
    "aw_picture.cc",
    "aw_picture.h",
    "aw_quota_manager_bridge_impl.cc",
    "aw_quota_manager_bridge_impl.h",
    "aw_resource.cc",
    "aw_settings.cc",
    "aw_settings.h",
    "aw_web_contents_delegate.cc",
    "aw_web_contents_delegate.h",
    "aw_web_contents_view_delegate.cc",
    "aw_web_contents_view_delegate.h",
    "aw_web_preferences_populater_impl.cc",
    "aw_web_preferences_populater_impl.h",
    "aw_web_resource_response_impl.cc",
    "aw_web_resource_response_impl.h",
    "cookie_manager.cc",
    "cookie_manager.h",
    "input_stream_impl.cc",
    "input_stream_impl.h",
    "java_browser_view_renderer_helper.cc",
    "java_browser_view_renderer_helper.h",
    "net_init_native_callback.cc",
    "permission/aw_permission_request.cc",
    "permission/aw_permission_request.h",
    "permission/aw_permission_request_delegate.cc",
    "permission/aw_permission_request_delegate.h",
    "permission/media_access_permission_request.cc",
    "permission/media_access_permission_request.h",
    "permission/permission_request_handler.cc",
    "permission/permission_request_handler.h",
    "permission/permission_request_handler_client.cc",
    "permission/permission_request_handler_client.h",
    "permission/simple_permission_request.cc",
    "permission/simple_permission_request.h",
    "popup_touch_handle_drawable.cc",
    "popup_touch_handle_drawable.h",
    "state_serializer.cc",
    "state_serializer.h",
    "token_binding_manager_bridge.cc",
    "token_binding_manager_bridge.h",
  ]

  if (enable_spellcheck) {
    deps += [ "//components/spellcheck/browser:browser" ]
  }

  libs = [ "jnigraphics" ]
}

generate_jni("native_jni") {
  sources = [
    "../java/src/org/chromium/android_webview/AndroidProtocolHandler.java",
    "../java/src/org/chromium/android_webview/AwAutofillClient.java",
    "../java/src/org/chromium/android_webview/AwContents.java",
    "../java/src/org/chromium/android_webview/AwContentsBackgroundThreadClient.java",
    "../java/src/org/chromium/android_webview/AwContentsClientBridge.java",
    "../java/src/org/chromium/android_webview/AwContentsIoThreadClient.java",
    "../java/src/org/chromium/android_webview/AwContentsLifecycleNotifier.java",
    "../java/src/org/chromium/android_webview/AwContentsStatics.java",
    "../java/src/org/chromium/android_webview/AwCookieManager.java",
    "../java/src/org/chromium/android_webview/AwDebug.java",
    "../java/src/org/chromium/android_webview/AwDevToolsServer.java",
    "../java/src/org/chromium/android_webview/AwFormDatabase.java",
    "../java/src/org/chromium/android_webview/AwGLFunctor.java",
    "../java/src/org/chromium/android_webview/AwHttpAuthHandler.java",
    "../java/src/org/chromium/android_webview/AwMetricsServiceClient.java",
    "../java/src/org/chromium/android_webview/AwPdfExporter.java",
    "../java/src/org/chromium/android_webview/AwPicture.java",
    "../java/src/org/chromium/android_webview/AwQuotaManagerBridge.java",
    "../java/src/org/chromium/android_webview/AwResource.java",
    "../java/src/org/chromium/android_webview/AwSettings.java",
    "../java/src/org/chromium/android_webview/AwTokenBindingManager.java",
    "../java/src/org/chromium/android_webview/AwWebContentsDelegate.java",
    "../java/src/org/chromium/android_webview/AwWebResourceResponse.java",
    "../java/src/org/chromium/android_webview/InputStreamUtil.java",
    "../java/src/org/chromium/android_webview/JavaBrowserViewRendererHelper.java",
    "../java/src/org/chromium/android_webview/PopupTouchHandleDrawable.java",
    "../java/src/org/chromium/android_webview/permission/AwPermissionRequest.java",
  ]
  jni_package = "android_webview"

  deps = [
    ":cancellation_signal_android_jar_jni_headers",
  ]
}

generate_jar_jni("cancellation_signal_android_jar_jni_headers") {
  classes = [ "android/os/CancellationSignal.class" ]
  jni_package = "android_webview"
}

java_cpp_enum("aw_permission_request_resource") {
  sources = [
    "permission/aw_permission_request.h",
  ]
}
