# 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/buildflag_header.gni")
import("//build/config/chromecast_build.gni")
import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//build/config/ui.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//third_party/webrtc/webrtc.gni")

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

# This target allows other targets to depend on result_codes.h which is a
# header-only dependency, without bringing in all of content.
source_set("result_codes") {
  sources = [
    "result_codes.h",
  ]

  deps = [
    "//services/service_manager/embedder:embedder_result_codes",
  ]
}

# This target allows other targets to depend on content_descriptors.h which is
# a header-only dependency, without bringing in all of content.
source_set("content_descriptors") {
  sources = [
    "content_descriptors.h",
  ]

  # The header uses V8_USE_EXTERNAL_STARTUP_DATA.
  public_configs = [ "//v8:external_startup_data" ]

  deps = [
    "//ipc",
  ]
}

source_set("content_descriptor_keys") {
  sources = [
    "content_descriptor_keys.cc",
    "content_descriptor_keys.h",
  ]
}

# Forces static linking for targets using the static_switches constants, even
# in the component build. This config makes it impossible to use the static
# switches target and use the rest of content at the same time, because the
# component export flags won't be consistent.
config("static_switches_defines") {
  defines = [ "COMPILE_CONTENT_STATICALLY" ]
}

# This target allows you to use the content_switches constants and statically
# link to it, without depending on the rest of content. This is only for use
# without content, or you will get multiply defined symbols.
source_set("static_switches") {
  public = [
    "content_switches.h",
  ]
  sources = [
    "//content/common/content_export.h",
    "content_switches.cc",
  ]

  public_configs = [ ":static_switches_defines" ]

  # Deps required by the above headers.
  deps = [
    "//media:media_buildflags",
  ]
}

# This target allows you to use the content_features constants and statically
# link to it, without depending on the rest of content. This is only for use
# without content, or you will get multiply defined symbols.
source_set("static_features") {
  public = [
    "content_features.h",
  ]
  sources = [
    "//content/common/content_export.h",
    "content_features.cc",
  ]
  public_deps = [
    "//base",
  ]

  public_configs = [ ":static_switches_defines" ]

  if (is_chromeos) {
    public_deps += [ "//media/capture/video/chromeos/public" ]
  }
}

jumbo_source_set("common_sources") {
  # External code should depend on via ":common" above.
  visibility = [ "//content/*" ]

  sources = [
    "appcache_info.h",
    "bind_interface_helpers.h",
    "bindings_policy.h",
    "browser_controls_state.h",
    "browser_side_navigation_policy.cc",
    "browser_side_navigation_policy.h",
    "cdm_info.h",
    "child_process_host.h",
    "child_process_host_delegate.h",
    "common_param_traits.cc",
    "common_param_traits.h",
    "common_param_traits_macros.h",
    "common_sandbox_support_linux.h",
    "connection_filter.h",
    "console_message_level.h",
    "content_client.cc",
    "content_client.h",
    "content_constants.cc",
    "content_constants.h",
    "content_descriptors.h",
    "content_features.cc",
    "content_features.h",
    "content_ipc_logging.h",
    "content_paths.h",
    "content_switches.cc",
    "content_switches.h",
    "context_menu_params.cc",
    "context_menu_params.h",
    "cursor_info.h",
    "drop_data.cc",
    "drop_data.h",
    "favicon_url.cc",
    "favicon_url.h",
    "font_cache_dispatcher_win.h",
    "frame_navigate_params.cc",
    "frame_navigate_params.h",
    "injection_test_mac.h",
    "injection_test_win.h",
    "input_event_ack_source.h",
    "input_event_ack_state.h",
    "isolated_world_ids.h",
    "javascript_dialog_type.h",
    "main_function_params.h",
    "manifest_util.cc",
    "manifest_util.h",
    "media_metadata.cc",
    "media_metadata.h",
    "media_stream_request.cc",
    "media_stream_request.h",
    "menu_item.cc",
    "menu_item.h",
    "mhtml_generation_params.cc",
    "mhtml_generation_params.h",
    "mime_handler_view_mode.cc",
    "mime_handler_view_mode.h",
    "network_service_util.cc",
    "network_service_util.h",
    "origin_util.h",
    "page_importance_signals.h",
    "page_state.cc",
    "page_state.h",
    "page_type.h",
    "page_zoom.h",
    "pepper_plugin_info.cc",
    "pepper_plugin_info.h",
    "persistent_notification_status.h",
    "previews_state.h",
    "process_type.h",
    "push_subscription_options.h",
    "referrer.cc",
    "referrer.h",
    "renderer_preferences.cc",
    "renderer_preferences.h",
    "resource_request_body_android.cc",
    "resource_request_body_android.h",
    "resource_type.cc",
    "resource_type.h",
    "resource_usage_reporter_type_converters.cc",
    "resource_usage_reporter_type_converters.h",
    "result_codes.h",
    "sandbox_init.h",
    "sandboxed_process_launcher_delegate.cc",
    "sandboxed_process_launcher_delegate.h",
    "screen_info.cc",
    "screen_info.h",
    "screen_orientation_values.h",
    "service_manager_connection.h",
    "simple_connection_filter.cc",
    "simple_connection_filter.h",
    "socket_permission_request.h",
    "stop_find_action.h",
    "storage_quota_params.h",
    "three_d_api_types.h",
    "url_constants.cc",
    "url_constants.h",
    "url_loader_throttle.cc",
    "url_loader_throttle.h",
    "url_utils.cc",
    "url_utils.h",
    "use_zoom_for_dsf_policy.cc",
    "use_zoom_for_dsf_policy.h",
    "user_agent.h",
    "was_activated_option.h",
    "web_preferences.cc",
    "web_preferences.h",
    "webplugininfo.cc",
    "webplugininfo.h",
    "webplugininfo_param_traits.h",
    "webrtc_ip_handling_policy.cc",
    "webrtc_ip_handling_policy.h",
    "widget_type.h",
  ]

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

  public_configs = [ "//v8:external_startup_data" ]

  public_deps = [
    ":interfaces",
    ":service_names",
    "//content/common",
    "//ipc",
    "//media/capture:capture_base",
    "//mojo/public/cpp/bindings",
    "//net",
    "//services/network:network_service",
    "//services/network/public/mojom",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//third_party/blink/public:blink_headers",
    "//third_party/blink/public:mojo_bindings",
    "//ui/accessibility",
    "//ui/surface",
    "//url/ipc:url_ipc",
  ]
  deps = [
    ":content_descriptor_keys",

    # This looks needless as we have //content/common in public_deps, but it's
    # needed because of allow_circular_includes_from.
    "//content/common:mojo_bindings",
    "//media",
    "//media/mojo/interfaces",
    "//ppapi/buildflags",
    "//ppapi/c",
    "//services/network/public/cpp",
    "//services/service_manager/embedder:embedder_result_codes",
    "//services/service_manager/public/cpp",
    "//services/service_manager/zygote:zygote_buildflags",
    "//skia",
    "//storage/common",
    "//third_party/blink/public/common",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/color",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
  ]

  if (use_aura) {
    deps += [ "//ui/aura" ]
  }

  if (is_android) {
    deps += [ "//content/public/android:jni" ]
  }

  if (is_linux) {
    deps += [ "//services/service_manager/zygote" ]
  }

  if (is_chromeos) {
    public_deps += [ "//media/capture/video/chromeos/public" ]
  }

  # //content/common needs to include public headers.
  allow_circular_includes_from = [
    ":interfaces",
    "//content/common",
    "//content/common:mojo_bindings",
  ]

  if (!enable_plugins) {
    sources -= [
      "pepper_plugin_info.cc",
      "pepper_plugin_info.h",
    ]
  }
}

buildflag_header("buildflags") {
  header = "buildflags.h"
  flags = [ "RTC_USE_H264=$rtc_use_h264" ]
}

source_set("feature_h264_with_openh264_ffmpeg") {
  deps = [
    ":buildflags",
    "//base",
    "//media:media_buildflags",
  ]
  sources = [
    "feature_h264_with_openh264_ffmpeg.cc",
    "feature_h264_with_openh264_ffmpeg.h",
  ]
}

mojom("interfaces") {
  # We don't want Blink variants of these bindings to be generated.
  disable_variants = true

  # Must depend on //content/public/common/ instead, for component build.
  visibility = [
    ":common_sources",
    "//content/common/*",
    "//chrome/common:mojo_bindings",
    "//chrome/common:mojo_bindings_blink",
    "//extensions/common:mojo",
    "//extensions/common:mojo_blink",
  ]

  sources = [
    "appcache_info.mojom",
    "fullscreen_video_element.mojom",
    "load_timing_info.mojom",
    "push_messaging_status.mojom",
    "renderer_preference_watcher.mojom",
    "renderer_preferences.mojom",
    "resource_load_info.mojom",
    "resource_usage_reporter.mojom",
    "transferrable_url_loader.mojom",
    "webplugininfo.mojom",
    "window_container_type.mojom",
  ]

  if (is_win) {
    sources += [ "font_cache_win.mojom" ]
  }

  if (is_mac) {
    sources += [
      "ns_view_bridge_factory.mojom",
      "web_contents_ns_view_bridge.mojom",
    ]
  }

  public_deps = [
    ":resource_type_bindings",
    "//mojo/public/mojom/base:base",
    "//services/network/public/mojom",
    "//services/network/public/mojom:websocket_mojom",
    "//third_party/blink/public:mojo_bindings",
    "//ui/accessibility:ax_enums_mojo",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  component_output_prefix = "content_public_common_mojo_bindings"
  export_class_attribute = "CONTENT_EXPORT"
  export_define = "CONTENT_IMPLEMENTATION=1"
  export_header = "content/common/content_export.h"
}

mojom("service_names") {
  sources = [
    "service_names.mojom",
  ]
}

mojom("resource_type_bindings") {
  sources = [
    "resource_type.mojom",
  ]
}
