# 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("//media/media_options.gni")
import("//ppapi/features/features.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 = "source_set"
} else {
  link_target_type = "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",
    "navigation_state.cc",
    "navigation_state.h",
    "pepper_plugin_instance.h",
    "platform_event_observer.h",
    "plugin_instance_throttler.h",
    "render_accessibility.h",
    "render_frame.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_gamepad_provider.h",
    "renderer_ppapi_host.h",
    "resource_fetcher.h",
    "seccomp_sandbox_status_android.h",
    "video_encode_accelerator.cc",
    "video_encode_accelerator.h",
    "window_features_converter.cc",
    "window_features_converter.h",
  ]

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

  public_deps = [
    "//media",
  ]

  deps = [
    "//content/public/child:child_sources",
    "//content/public/common:common_sources",
    "//content/renderer",
    "//gin",
    "//media/capture",
    "//media/gpu/ipc/client",
    "//net",
    "//ppapi/c",
    "//ppapi/features",
    "//skia",
    "//third_party/WebKit/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_webrtc) {
    sources += [
      "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",
      "webrtc_log_message_delegate.h",
    ]
    deps += [
      "//content/public/common:feature_h264_with_openh264_ffmpeg",
      "//content/public/common:features",
    ]
  }

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