# 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/features.gni")
import("//build/config/jumbo.gni")
import("//media/media_options.gni")
import("//ppapi/buildflags/buildflags.gni")

# See //content/BUILD.gn for how this works.
group("renderer") {
  if (is_component_build) {
    public_deps = [
      "//content",
    ]
  } else {
    public_deps = [
      ":renderer_sources",
    ]
  }
}

if (is_component_build) {
  link_target_type = "jumbo_source_set"
} else {
  link_target_type = "jumbo_static_library"
}
target(link_target_type, "renderer_sources") {
  # External code should depend on via ":renderer" above.
  visibility = [ "//content/*" ]

  sources = [
    "associated_resource_fetcher.h",
    "browser_plugin_delegate.cc",
    "browser_plugin_delegate.h",
    "chrome_object_extensions_utils.cc",
    "chrome_object_extensions_utils.h",
    "content_renderer_client.cc",
    "content_renderer_client.h",
    "context_menu_client.h",
    "document_state.cc",
    "document_state.h",
    "fixed_received_data.cc",
    "fixed_received_data.h",
    "media_stream_audio_renderer.h",
    "media_stream_audio_sink.cc",
    "media_stream_audio_sink.h",
    "media_stream_renderer_factory.h",
    "media_stream_sink.h",
    "media_stream_utils.cc",
    "media_stream_utils.h",
    "media_stream_video_renderer.h",
    "media_stream_video_sink.cc",
    "media_stream_video_sink.h",
    "pepper_plugin_instance.h",
    "plugin_instance_throttler.h",
    "render_accessibility.h",
    "render_frame.h",
    "render_frame_media_playback_options.h",
    "render_frame_observer.cc",
    "render_frame_observer.h",
    "render_frame_observer_tracker.h",
    "render_frame_visitor.h",
    "render_thread.cc",
    "render_thread.h",
    "render_thread_observer.cc",
    "render_thread_observer.h",
    "render_view.h",
    "render_view_observer.cc",
    "render_view_observer.h",
    "render_view_observer_tracker.h",
    "render_view_visitor.h",
    "renderer_ppapi_host.h",
    "request_peer.h",
    "resource_dispatcher_delegate.h",
    "resource_fetcher.h",
    "seccomp_sandbox_status_android.h",
    "url_loader_throttle_provider.h",
    "v8_value_converter.h",
    "video_encode_accelerator.cc",
    "video_encode_accelerator.h",
    "webrtc_log_message_delegate.h",
    "websocket_handshake_throttle_provider.h",
    "window_features_converter.cc",
    "window_features_converter.h",
    "worker_thread.h",
  ]

  configs += [ "//content:content_implementation" ]

  public_deps = [
    "//media",
  ]

  deps = [
    "//content/public/child:child_sources",
    "//content/public/common:buildflags",
    "//content/public/common:common_sources",
    "//content/public/common:feature_h264_with_openh264_ffmpeg",
    "//content/renderer",
    "//gin",
    "//media/capture",
    "//media/gpu/ipc/client",
    "//net",
    "//ppapi/buildflags",
    "//ppapi/c",
    "//skia",
    "//third_party/blink/public:blink_headers",
    "//third_party/webrtc_overrides",
    "//third_party/widevine/cdm:headers",
    "//ui/base",
    "//ui/base/ime",
    "//ui/gfx",
    "//v8",
  ]

  allow_circular_includes_from = [
    # This target is a pair with content/renderer. They always go together and
    # include headers from each other.
    "//content/renderer",
  ]

  if (is_android) {
    # For seccomp_sandbox_status_android.h.
    deps += [ "//sandbox" ]
  }

  if (enable_plugins) {
    sources += [ "plugin_instance_throttler.h" ]
  }

  if (enable_library_cdms) {
    sources += [
      "key_system_support.cc",
      "key_system_support.h",
    ]
  }
}
