# 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/ui.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/features/features.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",
  ]
}

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

  public_configs = [ ":static_switches_defines" ]

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

# 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",
    "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.cc",
    "child_process_host_delegate.h",
    "color_suggestion.cc",
    "color_suggestion.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",
    "cookie_manager_struct_traits.cc",
    "cookie_manager_struct_traits.h",
    "cursor_info.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",
    "isolated_world_ids.h",
    "javascript_dialog_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",
    "mutable_network_traffic_annotation_tag_struct_traits.h",
    "notification_resources.cc",
    "notification_resources.h",
    "origin_trial_policy.cc",
    "origin_trial_policy.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",
    "platform_notification_data.cc",
    "platform_notification_data.h",
    "presentation_connection_message.cc",
    "presentation_connection_message.h",
    "presentation_info.cc",
    "presentation_info.h",
    "previews_state.h",
    "process_type.h",
    "push_event_payload.h",
    "push_subscription_options.h",
    "quarantine.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.cc",
    "resource_request.h",
    "resource_request_body.cc",
    "resource_request_body.h",
    "resource_request_completion_status.cc",
    "resource_request_completion_status.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",
    "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_manager_connection.h",
    "service_worker_modes.h",
    "simple_connection_filter.cc",
    "simple_connection_filter.h",
    "simple_url_loader.cc",
    "simple_url_loader.h",
    "socket_permission_request.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",
    "url_constants.cc",
    "url_constants.h",
    "url_fetcher.h",
    "url_loader_throttle.cc",
    "url_loader_throttle.h",
    "url_utils.cc",
    "url_utils.h",
    "user_agent.h",
    "web_preferences.cc",
    "web_preferences.h",
    "webplugininfo.cc",
    "webplugininfo.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 = [
    ":interfaces",
    ":service_names",
    "//content/common",
    "//ipc",
    "//mojo/edk/system",
    "//mojo/public/cpp/bindings",
    "//net",
    "//services/service_manager/embedder",
    "//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 = [
    ":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",
    "//mojo/common",
    "//ppapi/c",
    "//ppapi/features",
    "//services/network/public/interfaces:interfaces",
    "//services/service_manager/public/cpp",
    "//skia",
    "//storage/common",
    "//third_party/WebKit/common:blink_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" ]
  }

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

  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") {
  # Must depend on //content/public/common/ instead, for component build.
  visibility = [
    ":common_sources",
    "//content/common/*",
  ]

  sources = [
    "cookie_manager.mojom",
    "download_stream.mojom",
    "mutable_network_traffic_annotation_tag.mojom",
    "network_service.mojom",
    "network_service_test.mojom",
    "push_messaging_status.mojom",
    "url_loader.mojom",
    "url_loader_factory.mojom",
    "window_container_type.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
    "//url/mojo:url_mojom_gurl",
    "//url/mojo: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",
  ]
}
