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

config("proxy_implementation") {
  defines = [ "PPAPI_PROXY_IMPLEMENTATION" ]
}

jumbo_component("proxy") {
  output_name = "ppapi_proxy"

  if (is_nacl) {
    # The nacl toolchain has template related bugs that are triggered
    # in jumbo builds. https://crbug.com/912152
    never_build_jumbo = true
  }

  sources = [
    # Take some standalone files from the C++ wrapper allowing us to more
    # easily make async callbacks in the proxy. We can't depend on the
    # full C++ wrappers at this layer since the C++ wrappers expect
    # symbols defining the globals for "being a plugin" which we are not.
    # These callback files are standalone.
    "../cpp/completion_callback.h",
    "../utility/completion_callback_factory.h",
    "audio_buffer_resource.cc",
    "audio_buffer_resource.h",
    "audio_encoder_resource.cc",
    "audio_encoder_resource.h",
    "broker_resource.cc",
    "broker_resource.h",
    "camera_capabilities_resource.cc",
    "camera_capabilities_resource.h",
    "camera_device_resource.cc",
    "camera_device_resource.h",
    "connection.h",
    "dispatcher.cc",
    "dispatcher.h",
    "enter_proxy.h",
    "error_conversion.cc",
    "error_conversion.h",
    "file_chooser_resource.cc",
    "file_chooser_resource.h",
    "file_io_resource.cc",
    "file_io_resource.h",
    "file_ref_resource.cc",
    "file_ref_resource.h",
    "file_system_resource.cc",
    "file_system_resource.h",
    "gamepad_resource.cc",
    "gamepad_resource.h",
    "graphics_2d_resource.cc",
    "graphics_2d_resource.h",
    "host_resolver_private_resource.cc",
    "host_resolver_private_resource.h",
    "host_resolver_resource.cc",
    "host_resolver_resource.h",
    "host_resolver_resource_base.cc",
    "host_resolver_resource_base.h",
    "interface_list.cc",
    "interface_list.h",
    "interface_proxy.cc",
    "interface_proxy.h",
    "isolated_file_system_private_resource.cc",
    "isolated_file_system_private_resource.h",
    "locking_resource_releaser.h",
    "media_stream_audio_track_resource.cc",
    "media_stream_audio_track_resource.h",
    "media_stream_track_resource_base.cc",
    "media_stream_track_resource_base.h",
    "media_stream_video_track_resource.cc",
    "media_stream_video_track_resource.h",
    "message_handler.cc",
    "message_handler.h",
    "net_address_resource.cc",
    "net_address_resource.h",
    "network_list_resource.cc",
    "network_list_resource.h",
    "network_monitor_resource.cc",
    "network_monitor_resource.h",
    "network_proxy_resource.cc",
    "network_proxy_resource.h",
    "plugin_array_buffer_var.cc",
    "plugin_array_buffer_var.h",
    "plugin_dispatcher.cc",
    "plugin_dispatcher.h",
    "plugin_globals.cc",
    "plugin_globals.h",
    "plugin_message_filter.cc",
    "plugin_message_filter.h",
    "plugin_resource.cc",
    "plugin_resource.h",
    "plugin_resource_tracker.cc",
    "plugin_resource_tracker.h",
    "plugin_resource_var.cc",
    "plugin_resource_var.h",
    "plugin_var_serialization_rules.cc",
    "plugin_var_serialization_rules.h",
    "plugin_var_tracker.cc",
    "plugin_var_tracker.h",
    "ppapi_command_buffer_proxy.cc",
    "ppapi_command_buffer_proxy.h",
    "ppapi_messages.h",
    "ppb_audio_proxy.cc",
    "ppb_audio_proxy.h",
    "ppb_core_proxy.cc",
    "ppb_core_proxy.h",
    "ppb_graphics_3d_proxy.cc",
    "ppb_graphics_3d_proxy.h",
    "ppb_image_data_proxy.cc",
    "ppb_image_data_proxy.h",
    "ppb_instance_proxy.cc",
    "ppb_instance_proxy.h",
    "ppb_message_loop_proxy.cc",
    "ppb_message_loop_proxy.h",
    "ppb_testing_proxy.cc",
    "ppb_testing_proxy.h",
    "ppb_x509_certificate_private_proxy.cc",
    "ppb_x509_certificate_private_proxy.h",
    "ppp_class_proxy.cc",
    "ppp_class_proxy.h",
    "ppp_find_proxy.cc",
    "ppp_find_proxy.h",
    "ppp_graphics_3d_proxy.cc",
    "ppp_graphics_3d_proxy.h",
    "ppp_input_event_proxy.cc",
    "ppp_input_event_proxy.h",
    "ppp_instance_proxy.cc",
    "ppp_instance_proxy.h",
    "ppp_messaging_proxy.cc",
    "ppp_messaging_proxy.h",
    "ppp_mouse_lock_proxy.cc",
    "ppp_mouse_lock_proxy.h",
    "ppp_pdf_proxy.cc",
    "ppp_pdf_proxy.h",
    "ppp_printing_proxy.cc",
    "ppp_printing_proxy.h",
    "ppp_text_input_proxy.cc",
    "ppp_text_input_proxy.h",
    "printing_resource.cc",
    "printing_resource.h",
    "proxy_array_output.cc",
    "proxy_array_output.h",
    "proxy_channel.cc",
    "proxy_channel.h",
    "proxy_completion_callback_factory.h",
    "proxy_module.cc",
    "proxy_module.h",
    "proxy_object_var.cc",
    "proxy_object_var.h",
    "resource_creation_proxy.cc",
    "resource_creation_proxy.h",
    "resource_reply_thread_registrar.cc",
    "resource_reply_thread_registrar.h",
    "tcp_server_socket_private_resource.cc",
    "tcp_server_socket_private_resource.h",
    "tcp_socket_private_resource.cc",
    "tcp_socket_private_resource.h",
    "tcp_socket_resource.cc",
    "tcp_socket_resource.h",
    "tcp_socket_resource_base.cc",
    "tcp_socket_resource_base.h",
    "truetype_font_resource.cc",
    "truetype_font_resource.h",
    "truetype_font_singleton_resource.cc",
    "truetype_font_singleton_resource.h",
    "udp_socket_filter.cc",
    "udp_socket_filter.h",
    "udp_socket_private_resource.cc",
    "udp_socket_private_resource.h",
    "udp_socket_resource.cc",
    "udp_socket_resource.h",
    "udp_socket_resource_base.cc",
    "udp_socket_resource_base.h",
    "uma_private_resource.cc",
    "uma_private_resource.h",
    "url_loader_resource.cc",
    "url_loader_resource.h",
    "url_request_info_resource.cc",
    "url_request_info_resource.h",
    "url_response_info_resource.cc",
    "url_response_info_resource.h",
    "var_serialization_rules.h",
    "video_decoder_resource.cc",
    "video_decoder_resource.h",
    "video_encoder_resource.cc",
    "video_encoder_resource.h",
    "video_frame_resource.cc",
    "video_frame_resource.h",
    "vpn_provider_resource.cc",
    "vpn_provider_resource.h",
    "websocket_resource.cc",
    "websocket_resource.h",
  ]

  if (is_nacl) {
    sources += [
      "../nacl_irt/irt_interfaces.cc",
      "../nacl_irt/irt_interfaces.h",
      "../nacl_irt/irt_pnacl_translator_compile.cc",
      "../nacl_irt/irt_pnacl_translator_link.cc",
      "../nacl_irt/irt_ppapi.cc",
      "../nacl_irt/irt_ppapi.h",
      "../nacl_irt/irt_start.cc",
      "../nacl_irt/manifest_service.cc",
      "../nacl_irt/manifest_service.h",
      "../nacl_irt/plugin_startup.cc",
      "../nacl_irt/plugin_startup.h",
      "../nacl_irt/ppapi_dispatcher.cc",
      "../nacl_irt/ppapi_dispatcher.h",
    ]
  } else {
    sources += [
      "audio_input_resource.cc",
      "audio_input_resource.h",
      "audio_output_resource.cc",
      "audio_output_resource.h",
      "broker_dispatcher.cc",
      "broker_dispatcher.h",
      "browser_font_singleton_resource.cc",
      "browser_font_singleton_resource.h",
      "device_enumeration_resource_helper.cc",
      "device_enumeration_resource_helper.h",
      "flash_clipboard_resource.cc",
      "flash_clipboard_resource.h",
      "flash_drm_resource.cc",
      "flash_drm_resource.h",
      "flash_file_resource.cc",
      "flash_file_resource.h",
      "flash_font_file_resource.cc",
      "flash_font_file_resource.h",
      "flash_fullscreen_resource.cc",
      "flash_fullscreen_resource.h",
      "flash_menu_resource.cc",
      "flash_menu_resource.h",
      "flash_resource.cc",
      "flash_resource.h",
      "host_dispatcher.cc",
      "host_dispatcher.h",
      "host_var_serialization_rules.cc",
      "host_var_serialization_rules.h",
      "pdf_resource.cc",
      "pdf_resource.h",
      "ppb_broker_proxy.cc",
      "ppb_broker_proxy.h",
      "ppb_buffer_proxy.cc",
      "ppb_buffer_proxy.h",
      "ppb_flash_message_loop_proxy.cc",
      "ppb_flash_message_loop_proxy.h",
      "ppb_var_deprecated_proxy.cc",
      "ppb_var_deprecated_proxy.h",
      "ppb_video_decoder_proxy.cc",
      "ppb_video_decoder_proxy.h",
      "ppp_instance_private_proxy.cc",
      "ppp_instance_private_proxy.h",
      "ppp_video_decoder_proxy.cc",
      "ppp_video_decoder_proxy.h",
      "video_capture_resource.cc",
      "video_capture_resource.h",
    ]
  }

  configs += [
    ":proxy_implementation",
    "//build/config:precompiled_headers",
  ]

  public_deps = [
    "//ipc",
    "//ppapi/proxy:ipc_sources",
  ]

  deps = [
    ":common",
    "//base",
    "//device/base/synchronization",
    "//device/gamepad/public/cpp:shared_with_blink",
    "//gpu/command_buffer/client:gles2_implementation",
    "//gpu/command_buffer/common",
    "//gpu/ipc/common:command_buffer_traits",
    "//media:shared_memory_support",
    "//mojo/core/embedder",
    "//ppapi/c",
    "//ppapi/shared_impl",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc/geometry",
  ]

  if (!is_nacl) {
    deps += [
      "//base/third_party/dynamic_annotations",
      "//gin",
      "//skia",
      "//ui/events:events_base",
      "//ui/surface",
    ]
  }

  if (!is_nacl_nonsfi) {
    deps += [ "//third_party/icu" ]
  }
}

source_set("common") {
  sources = [
    "tcp_socket_resource_constants.h",
    "udp_socket_resource_constants.h",
  ]
}

group("ipc") {
  if (is_component_build) {
    public_deps = [
      "//ppapi/proxy",
    ]
  } else {
    public_deps = [
      ":ipc_sources",
    ]
  }
}

source_set("ipc_sources") {
  sources = [
    "nacl_message_scanner.cc",
    "nacl_message_scanner.h",
    "ppapi_message_utils.h",
    "ppapi_messages.cc",
    "ppapi_messages.h",
    "ppapi_param_traits.cc",
    "ppapi_param_traits.h",
    "raw_var_data.cc",
    "raw_var_data.h",
    "resource_message_params.cc",
    "resource_message_params.h",
    "serialized_flash_menu.cc",
    "serialized_flash_menu.h",
    "serialized_handle.cc",
    "serialized_handle.h",
    "serialized_structs.cc",
    "serialized_structs.h",
    "serialized_var.cc",
    "serialized_var.h",
    "var_serialization_rules.h",
  ]
  if (is_nacl) {
    sources -= [ "serialized_flash_menu.cc" ]
  }

  configs += [ ":proxy_implementation" ]

  deps = [
    "//base",
    "//gpu/ipc/common:command_buffer_traits",
    "//ppapi/c",
    "//ppapi/shared_impl",
  ]

  public_deps = [
    "//ipc",
  ]

  if (!is_nacl) {
    deps += [ "//skia" ]
  }
}

jumbo_static_library("test_support") {
  testonly = true

  sources = [
    "ppapi_proxy_test.cc",
    "ppapi_proxy_test.h",
    "resource_message_test_sink.cc",
    "resource_message_test_sink.h",
  ]

  public_deps = [
    ":proxy",
  ]
  deps = [
    "//base/test:test_support",
    "//ipc",
    "//ipc:test_support",
    "//ppapi/proxy",
    "//ppapi/shared_impl",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
