# 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("//mojo/public/tools/bindings/mojom.gni")
import("//third_party/webrtc/build/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",
  ]
}

# 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",
  ]
}

# 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",
    "mojo_channel_switches.h",
  ]
  sources = [
    "//content/common/content_export.h",
    "content_switches.cc",
    "mojo_channel_switches.cc",
  ]

  public_configs = [ ":static_switches_defines" ]
}

# 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" ]
}

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

  sources = [
    "appcache_info.h",
    "associated_interface_provider.h",
    "associated_interface_registry.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.cc",
    "child_process_host_delegate.h",
    "child_process_sandbox_support_linux.h",
    "color_suggestion.cc",
    "color_suggestion.h",
    "common_param_traits.cc",
    "common_param_traits.h",
    "common_param_traits_macros.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",
    "drop_data.cc",
    "drop_data.h",
    "favicon_url.cc",
    "favicon_url.h",
    "file_chooser_file_info.cc",
    "file_chooser_file_info.h",
    "file_chooser_params.cc",
    "file_chooser_params.h",
    "frame_navigate_params.cc",
    "frame_navigate_params.h",
    "injection_test_mac.h",
    "injection_test_win.h",
    "javascript_message_type.h",
    "main_function_params.h",
    "manifest.cc",
    "manifest.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",
    "mojo_channel_switches.cc",
    "mojo_channel_switches.h",
    "notification_resources.cc",
    "notification_resources.h",
    "origin_util.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",
    "platform_notification_data.cc",
    "platform_notification_data.h",
    "presentation_constants.cc",
    "presentation_constants.h",
    "process_type.h",
    "push_messaging_status.cc",
    "push_messaging_status.h",
    "referrer.cc",
    "referrer.h",
    "renderer_preferences.cc",
    "renderer_preferences.h",
    "request_context_frame_type.h",
    "request_context_type.h",
    "resource_devtools_info.cc",
    "resource_devtools_info.h",
    "resource_request_body.cc",
    "resource_request_body.h",
    "resource_response.cc",
    "resource_response.h",
    "resource_response_info.cc",
    "resource_response_info.h",
    "resource_type.cc",
    "resource_type.h",
    "result_codes.h",
    "sandbox_init.h",
    "sandbox_linux.h",
    "sandbox_type.h",
    "sandboxed_process_launcher_delegate.cc",
    "sandboxed_process_launcher_delegate.h",
    "screen_info.cc",
    "screen_info.h",
    "screen_orientation_values.h",
    "send_zygote_child_ping_linux.h",
    "service_info.cc",
    "service_info.h",
    "service_manager_connection.h",
    "speech_recognition_error.h",
    "speech_recognition_grammar.h",
    "speech_recognition_result.cc",
    "speech_recognition_result.h",
    "stop_find_action.h",
    "storage_quota_params.h",
    "three_d_api_types.h",
    "transition_element.h",
    "url_constants.cc",
    "url_constants.h",
    "url_fetcher.h",
    "url_utils.cc",
    "url_utils.h",
    "user_agent.h",
    "web_preferences.cc",
    "web_preferences.h",
    "webplugininfo.cc",
    "webplugininfo.h",
    "window_container_type.cc",
    "window_container_type.h",
    "zygote_fork_delegate_linux.h",
    "zygote_handle.h",
  ]

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

  public_configs = [ "//v8:external_startup_data" ]

  public_deps = [
    ":service_names",
    "//content/common",
    "//content/public/common:interfaces",
    "//mojo/public/cpp/bindings",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/interfaces",
    "//third_party/WebKit/public:blink_headers",
    "//ui/accessibility",
    "//ui/surface",
    "//url/ipc:url_ipc",
  ]
  deps = [
    # 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_cpp_sources",
    "//ipc",
    "//media",
    "//mojo/common",
    "//net",
    "//ppapi/c",
    "//services/service_manager/public/cpp",
    "//skia",
    "//storage/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",
  ]

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

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

  if (enable_webrtc) {
    sources += [
      "webrtc_ip_handling_policy.cc",
      "webrtc_ip_handling_policy.h",
    ]
  }
}

buildflag_header("features") {
  header = "features.h"

  flags = [ "RTC_USE_H264=$rtc_use_h264" ]
}

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

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

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