# 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("features.gni")
import("//build/buildflag_header.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//ipc/features.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//sandbox/features.gni")
import("//tools/ipc_fuzzer/ipc_fuzzer.gni")
if (is_mac) {
  import("//build/config/mac/mac_sdk.gni")
}

# For feature flags internal to content. See content/public/common:features
# for feature flags that clients of contents need to know about.
buildflag_header("buildflags") {
  header = "buildflags.h"

  flags = [
    "USE_EXTERNAL_POPUP_MENU=$use_external_popup_menu",
    "ALLOW_CRITICAL_MEMORY_PRESSURE_HANDLING_IN_FOREGROUND=$allow_critical_memory_pressure_handling_in_foreground",
  ]
}

source_set("common") {
  # Targets external to content should always link to the public API.
  # In addition, targets outside of the content component (shell and tests)
  # must not link to this because it will duplicate the code in the component
  # build.
  visibility = [ "//content/*" ]

  sources = [
    "accessibility_messages.h",
    "all_messages.h",
    "android/gin_java_bridge_errors.cc",
    "android/gin_java_bridge_errors.h",
    "android/gin_java_bridge_value.cc",
    "android/gin_java_bridge_value.h",
    "android/hash_set.cc",
    "android/hash_set.h",
    "android/media_metadata_android.cc",
    "android/media_metadata_android.h",
    "android/sync_compositor_statics.cc",
    "android/sync_compositor_statics.h",
    "android/use_zoom_for_dsf_policy_android.cc",
    "appcache_interfaces.cc",
    "appcache_interfaces.h",
    "associated_interface_provider_impl.cc",
    "associated_interface_provider_impl.h",
    "associated_interface_registry_impl.cc",
    "associated_interface_registry_impl.h",
    "ax_content_node_data.cc",
    "ax_content_node_data.h",
    "background_fetch/background_fetch_struct_traits.cc",
    "background_fetch/background_fetch_struct_traits.h",
    "background_fetch/background_fetch_types.cc",
    "background_fetch/background_fetch_types.h",
    "bluetooth/web_bluetooth_device_id.cc",
    "bluetooth/web_bluetooth_device_id.h",
    "browser_plugin/browser_plugin_constants.cc",
    "browser_plugin/browser_plugin_constants.h",
    "browser_plugin/browser_plugin_messages.h",
    "child_process_host_impl.cc",
    "child_process_host_impl.h",
    "common_sandbox_support_linux.cc",
    "content_constants_internal.cc",
    "content_constants_internal.h",
    "content_export.h",
    "content_ipc_logging.cc",
    "content_message_generator.cc",
    "content_message_generator.h",
    "content_param_traits.cc",
    "content_param_traits.h",
    "content_param_traits_macros.h",
    "content_paths.cc",
    "content_security_policy/content_security_policy.cc",
    "content_security_policy/content_security_policy.h",
    "content_security_policy/csp_context.cc",
    "content_security_policy/csp_context.h",
    "content_security_policy/csp_directive.cc",
    "content_security_policy/csp_directive.h",
    "content_security_policy/csp_disposition_enum.h",
    "content_security_policy/csp_source.cc",
    "content_security_policy/csp_source.h",
    "content_security_policy/csp_source_list.cc",
    "content_security_policy/csp_source_list.h",
    "content_security_policy_header.cc",
    "content_security_policy_header.h",
    "content_switches_internal.cc",
    "content_switches_internal.h",
    "cursors/webcursor.cc",
    "cursors/webcursor.h",
    "cursors/webcursor_android.cc",
    "cursors/webcursor_aura.cc",
    "cursors/webcursor_aurawin.cc",
    "cursors/webcursor_aurax11.cc",
    "cursors/webcursor_mac.mm",
    "cursors/webcursor_ozone.cc",
    "date_time_suggestion.h",
    "dom_storage/dom_storage_map.cc",
    "dom_storage/dom_storage_map.h",
    "dom_storage/dom_storage_messages.h",
    "dom_storage/dom_storage_namespace_ids.cc",
    "dom_storage/dom_storage_namespace_ids.h",
    "dom_storage/dom_storage_types.h",
    "download/mhtml_save_status.cc",
    "download/mhtml_save_status.h",
    "drag_event_source_info.h",
    "drag_messages.h",
    "drag_traits.h",
    "edit_command.h",
    "fileapi/file_system_messages.h",
    "fileapi/webblob_messages.h",
    "font_cache_dispatcher_win.cc",
    "font_list.cc",
    "font_list.h",
    "font_list_android.cc",
    "font_list_fontconfig.cc",
    "font_list_mac.mm",
    "font_list_win.cc",
    "font_loader_dispatcher_mac.cc",
    "font_loader_dispatcher_mac.h",
    "frame_message_enums.h",
    "frame_message_structs.cc",
    "frame_message_structs.h",
    "frame_messages.h",
    "frame_messages_forward.h",
    "frame_owner_properties.cc",
    "frame_owner_properties.h",
    "frame_replication_state.cc",
    "frame_replication_state.h",
    "frame_visual_properties.cc",
    "frame_visual_properties.h",
    "gin_java_bridge_messages.h",
    "in_process_child_thread_params.cc",
    "in_process_child_thread_params.h",
    "indexed_db/indexed_db_constants.h",
    "indexed_db/indexed_db_key.cc",
    "indexed_db/indexed_db_key.h",
    "indexed_db/indexed_db_key_path.cc",
    "indexed_db/indexed_db_key_path.h",
    "indexed_db/indexed_db_key_range.cc",
    "indexed_db/indexed_db_key_range.h",
    "indexed_db/indexed_db_metadata.cc",
    "indexed_db/indexed_db_metadata.h",
    "indexed_db/indexed_db_struct_traits.cc",
    "indexed_db/indexed_db_struct_traits.h",
    "input/event_with_latency_info.h",
    "input/gesture_event_stream_validator.cc",
    "input/gesture_event_stream_validator.h",
    "input/ime_text_span_conversions.cc",
    "input/ime_text_span_conversions.h",
    "input/input_event.cc",
    "input/input_event.h",
    "input/input_event_ack.cc",
    "input/input_event_ack.h",
    "input/input_event_ack_state.cc",
    "input/input_event_dispatch_type.h",
    "input/input_event_stream_validator.cc",
    "input/input_event_stream_validator.h",
    "input/input_event_struct_traits.cc",
    "input/input_event_struct_traits.h",
    "input/input_param_traits.cc",
    "input/input_param_traits.h",
    "input/sync_compositor_messages.cc",
    "input/sync_compositor_messages.h",
    "input/synthetic_gesture_params.cc",
    "input/synthetic_gesture_params.h",
    "input/synthetic_pinch_gesture_params.cc",
    "input/synthetic_pinch_gesture_params.h",
    "input/synthetic_pointer_action_list_params.cc",
    "input/synthetic_pointer_action_list_params.h",
    "input/synthetic_pointer_action_params.cc",
    "input/synthetic_pointer_action_params.h",
    "input/synthetic_smooth_drag_gesture_params.cc",
    "input/synthetic_smooth_drag_gesture_params.h",
    "input/synthetic_smooth_scroll_gesture_params.cc",
    "input/synthetic_smooth_scroll_gesture_params.h",
    "input/synthetic_tap_gesture_params.cc",
    "input/synthetic_tap_gesture_params.h",
    "input/synthetic_web_input_event_builders.cc",
    "input/synthetic_web_input_event_builders.h",
    "input/touch_action_optional_struct_traits.cc",
    "input/touch_action_optional_struct_traits.h",
    "input/touch_event_stream_validator.cc",
    "input/touch_event_stream_validator.h",
    "input/web_touch_event_traits.cc",
    "input/web_touch_event_traits.h",
    "input_messages.h",
    "inter_process_time_ticks_converter.cc",
    "inter_process_time_ticks_converter.h",
    "mac/attributed_string_coder.h",
    "mac/attributed_string_coder.mm",
    "mac/font_loader.h",
    "mac/font_loader.mm",
    "media/aec_dump_messages.h",
    "media/cdm_info.cc",
    "media/media_devices.cc",
    "media/media_devices.h",
    "media/media_player_delegate_messages.h",
    "media/media_player_messages_android.h",
    "media/media_stream_controls.cc",
    "media/media_stream_controls.h",
    "media/media_stream_param_traits.cc",
    "media/media_stream_param_traits.h",
    "media/midi_messages.h",
    "media/peer_connection_tracker_messages.h",
    "media/video_capture.h",
    "navigation_gesture.h",
    "navigation_params.cc",
    "navigation_params.h",
    "navigation_subresource_loader_params.cc",
    "navigation_subresource_loader_params.h",
    "net/record_load_histograms.cc",
    "net/record_load_histograms.h",
    "net/url_request_service_worker_data.cc",
    "net/url_request_service_worker_data.h",
    "net/url_request_user_data.cc",
    "net/url_request_user_data.h",
    "notifications/notification_struct_traits.cc",
    "notifications/notification_struct_traits.h",
    "origin_util.cc",
    "p2p_messages.h",
    "p2p_socket_type.h",
    "page_messages.h",
    "page_state_serialization.cc",
    "page_state_serialization.h",
    "page_zoom.cc",
    "pepper_file_util.cc",
    "pepper_file_util.h",
    "pepper_plugin_list.cc",
    "pepper_plugin_list.h",
    "pepper_renderer_instance_data.cc",
    "pepper_renderer_instance_data.h",
    "platform_notification_param_traits.h",
    "plugin_list.cc",
    "plugin_list.h",
    "possibly_associated_interface_ptr.h",
    "possibly_associated_interface_ptr_info.h",
    "possibly_associated_wrapper_shared_url_loader_factory.h",
    "presentation/presentation_struct_traits.cc",
    "presentation/presentation_struct_traits.h",
    "process_type.cc",
    "render_widget_surface_properties.cc",
    "render_widget_surface_properties.h",
    "resource_messages.h",
    "resource_timing_info.cc",
    "resource_timing_info.h",
    "sandbox_init_linux.cc",
    "sandbox_init_mac.cc",
    "sandbox_init_win.cc",
    "savable_subframe.h",
    "service_manager/service_manager_connection_impl.cc",
    "service_manager/service_manager_connection_impl.h",
    "service_worker/service_worker_loader_helpers.cc",
    "service_worker/service_worker_loader_helpers.h",
    "service_worker/service_worker_messages.h",
    "service_worker/service_worker_types.cc",
    "service_worker/service_worker_types.h",
    "service_worker/service_worker_utils.cc",
    "service_worker/service_worker_utils.h",
    "single_request_url_loader_factory.cc",
    "single_request_url_loader_factory.h",
    "skia_utils.cc",
    "skia_utils.h",
    "swapped_out_messages.cc",
    "swapped_out_messages.h",
    "tab_switching_time_callback.cc",
    "tab_switching_time_callback.h",
    "task_scheduler.cc",
    "task_scheduler.h",
    "text_input_client_messages.h",
    "text_input_state.cc",
    "text_input_state.h",
    "throttling_url_loader.cc",
    "throttling_url_loader.h",
    "unique_name_helper.cc",
    "unique_name_helper.h",
    "url_loader_factory_bundle.cc",
    "url_loader_factory_bundle.h",
    "url_schemes.cc",
    "url_schemes.h",
    "user_agent.cc",
    "view_message_enums.h",
    "view_messages.h",
    "visual_properties.cc",
    "visual_properties.h",
  ]

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

  public_deps = [
    ":mojo_bindings",
    "//cc",
    "//gpu/command_buffer/common",
    "//ipc",
    "//services/network:network_service",
    "//services/service_manager/sandbox",
    "//third_party/blink/public:blink_headers",
    "//third_party/blink/public/common",
    "//ui/accessibility",
  ]
  deps = [
    ":buildflags",
    "//base",
    "//base/third_party/dynamic_annotations",
    "//build/util:webkit_version",
    "//components/discardable_memory/common",
    "//components/services/filesystem/public/interfaces",
    "//components/tracing",
    "//components/tracing:startup_tracing",
    "//components/viz/service",
    "//content:resources",
    "//content/app/resources",
    "//content/common/service_worker:service_worker_types_proto",
    "//content/public/common:interfaces",
    "//content/public/common:service_names",
    "//device/base/synchronization",
    "//device/bluetooth",
    "//gpu",
    "//gpu/command_buffer/client:gles2_implementation",
    "//gpu/command_buffer/client:gles2_interface",
    "//gpu/command_buffer/service",
    "//gpu/ipc/client",
    "//gpu/ipc/common",
    "//gpu/skia_bindings",
    "//ipc",
    "//media",
    "//media:shared_memory_support",
    "//media/base/ipc",
    "//media/capture",
    "//media/capture/ipc",
    "//media/gpu:buildflags",
    "//media/gpu/ipc/client",
    "//media/gpu/ipc/common",
    "//media/midi",
    "//media/midi:mojo",
    "//mojo/public/cpp/system",
    "//net",
    "//ppapi/buildflags",
    "//sandbox",
    "//sandbox:sandbox_buildflags",
    "//services/network/public/cpp",
    "//services/network/public/mojom",
    "//services/resource_coordinator/public/cpp:resource_coordinator_cpp",
    "//services/service_manager",
    "//services/service_manager/embedder",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/service_manager/runner/common",
    "//services/service_manager/zygote:zygote_buildflags",
    "//services/ui/public/interfaces",
    "//services/video_capture/public/mojom",
    "//services/viz/public/interfaces",
    "//skia",
    "//storage/common",
    "//third_party/angle:angle_gpu_info_util",
    "//third_party/boringssl",
    "//third_party/icu",
    "//third_party/webrtc/rtc_base:rtc_base",
    "//third_party/webrtc_overrides",
    "//ui/base",
    "//ui/base/ime",
    "//ui/display",
    "//ui/events/blink",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/color",
    "//ui/gfx/ipc/geometry",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/gl/init",
    "//ui/latency/ipc",
    "//ui/shell_dialogs",
    "//url",
    "//url/ipc:url_ipc",
  ]

  defines = []
  include_dirs = []
  libs = []
  ldflags = []

  allow_circular_includes_from = [
    ":mojo_bindings",
    "//content/public/common:interfaces",
  ]

  if (is_android && use_seccomp_bpf) {
    set_sources_assignment_filter([])
    sources += [
      "//services/service_manager/sandbox/linux/bpf_base_policy_linux.cc",
      "//services/service_manager/sandbox/linux/bpf_base_policy_linux.h",
    ]
    set_sources_assignment_filter(sources_assignment_filter)
  }

  if (is_mac) {
    deps += [ "//sandbox/mac:seatbelt" ]
  }

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

    libs += [ "android" ]
  }

  if (is_debug && !is_component_build && enable_plugins) {
    # Content depends on the PPAPI message logging stuff; if this isn't here,
    # some unit test binaries won't compile. This only worked in release mode
    # because logging is disabled there.
    deps += [ "//ppapi/proxy:ipc_sources" ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  } else {
    sources -= [ "cursors/webcursor_ozone.cc" ]
  }

  if (!use_aura) {
    sources -= [ "cursors/webcursor_aura.cc" ]
  }

  if (!use_aura || !use_x11) {
    sources -= [ "cursors/webcursor_aurax11.cc" ]
  }

  if (is_linux) {
    deps += [ "//third_party/fontconfig" ]
  }

  if (is_mac || is_win || is_android || is_fuchsia) {
    sources -= [ "font_list_fontconfig.cc" ]
  }

  if (enable_plugins) {
    deps += [
      "//ppapi/proxy:ipc",
      "//ppapi/shared_impl",
    ]
  } else {
    sources -= [
      "pepper_file_util.cc",
      "pepper_file_util.h",
      "pepper_plugin_list.cc",
      "pepper_plugin_list.h",
      "pepper_renderer_instance_data.cc",
      "pepper_renderer_instance_data.h",
      "plugin_list.cc",
      "plugin_list.h",
    ]
  }

  if (!is_win || !use_aura) {
    sources -= [ "cursors/webcursor_aurawin.cc" ]
  }

  if (is_mac) {
    deps += [ "//media/gpu" ]
  }

  if (enable_ipc_fuzzer) {
    configs += [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ]
    sources += [
      "external_ipc_dumper.cc",
      "external_ipc_dumper.h",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "font_list_fuchsia.cc",
      "sandbox_policy_fuchsia.cc",
      "sandbox_policy_fuchsia.h",
    ]

    deps += [
      "//third_party/fuchsia-sdk:fdio",
      "//third_party/fuchsia-sdk:fonts",
    ]
  }
}

# See comment at the top of //content/BUILD.gn for how this works.
group("for_content_tests") {
  visibility = [ "//content/test/*" ]
  if (!is_component_build) {
    public_deps = [
      ":common",
    ]
  }
}

mojom("mojo_bindings") {
  # This interface is internal to content.
  visibility = [ "//content/*" ]

  # indexed_db.mojom uses a native typemap that is not available in Java.
  cpp_only = true

  # imports vs deps check is disabled for this target to work around
  # windows multiple definitions linker error caused by having
  # both a direct and an indirect dependency on the same target
  skip_deps_check = true

  disable_variants = true

  sources = [
    "appcache.mojom",
    "associated_interfaces.mojom",
    "child.mojom",
    "child_control.mojom",
    "child_memory_coordinator.mojom",
    "field_trial_recorder.mojom",
    "frame.mojom",
    "frame_sink_provider.mojom",
    "histogram_fetcher.mojom",
    "host_zoom.mojom",
    "image_downloader/image_downloader.mojom",
    "indexed_db/indexed_db.mojom",
    "input/input_handler.mojom",
    "input/input_injector.mojom",
    "input/synchronous_compositor.mojom",
    "manifest_observer.mojom",
    "media/media_stream.mojom",
    "media/peer_connection_tracker.mojom",
    "media/renderer_audio_input_stream_factory.mojom",
    "media/renderer_audio_output_stream_factory.mojom",
    "memory_coordinator.mojom",
    "native_types.mojom",
    "navigation_client.mojom",
    "navigation_params.mojom",
    "page_state.mojom",
    "push_messaging.mojom",
    "render_frame_message_filter.mojom",
    "render_frame_metadata.mojom",
    "render_message_filter.mojom",
    "render_widget_window_tree_client_factory.mojom",
    "renderer.mojom",
    "renderer_host.mojom",
    "service_worker/controller_service_worker.mojom",
    "service_worker/embedded_worker.mojom",
    "service_worker/service_worker.mojom",
    "service_worker/service_worker_container.mojom",
    "service_worker/service_worker_event_dispatcher.mojom",
    "service_worker/service_worker_fetch_response_callback.mojom",
    "service_worker/service_worker_provider.mojom",
    "shared_worker/shared_worker.mojom",
    "shared_worker/shared_worker_client.mojom",
    "shared_worker/shared_worker_connector.mojom",
    "shared_worker/shared_worker_factory.mojom",
    "shared_worker/shared_worker_host.mojom",
    "shared_worker/shared_worker_info.mojom",
    "url_loader_factory_bundle.mojom",
    "widget.mojom",
  ]

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

  if (is_mac) {
    sources += [
      "font_loader_mac.mojom",
      "render_widget_host_ns_view.mojom",
    ]
  }

  enabled_features = []
  if (enable_ipc_logging) {
    enabled_features += [ "ipc_logging" ]
  }
  if (is_linux || is_chromeos) {
    enabled_features += [ "supports_thread_priorities" ]
  }

  import_dirs = [ "//mojo/services" ]

  public_deps = [
    "//components/services/leveldb/public/interfaces",
    "//content/public/common:interfaces",
    "//content/public/common:resource_type_bindings",
    "//ipc:mojom_constants",
    "//media/mojo/interfaces",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom",
    "//services/service_manager/public/mojom",
    "//services/ui/public/interfaces",
    "//services/ui/public/interfaces/ime",
    "//services/video_capture/public/mojom",
    "//services/viz/public/interfaces",
    "//skia/public/interfaces",
    "//third_party/blink/public:mojo_bindings",
    "//third_party/blink/public:web_feature_mojo_bindings",
    "//third_party/blink/public/mojom:mojom_core",
    "//ui/base/mojo",
    "//ui/events/mojo:interfaces",
    "//ui/gfx/geometry/mojo",
    "//ui/gfx/mojo",
    "//ui/gfx/range/mojo",
    "//ui/latency/mojo:interfaces",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]

  overridden_deps = [ "//third_party/blink/public/mojom:mojom_core" ]
  component_deps = [ "//third_party/blink/public/common" ]

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