# Copyright 2014 The Chromium Authors
# 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/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//content/public/common/zygote/features.gni")
import("//media/media_options.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//third_party/webrtc/webrtc.gni")
import("//tools/ipc_fuzzer/ipc_fuzzer.gni")
if (is_android) {
import("//build/config/android/rules.gni")
}
# See //content/BUILD.gn for how this works. Note that targets in `//content`
# will want to include `:common_sources` directly.
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" ]
deps = [ "//build:chromeos_buildflags" ]
}
source_set("content_descriptor_keys") {
sources = [
"content_descriptor_keys.cc",
"content_descriptor_keys.h",
]
}
# This target allows other targets to depend on sandbox_support_linux.h which is
# a header-only dependency, without bringing in all of content.
if (is_linux || is_chromeos) {
source_set("sandbox_support_linux") {
public = [
"//content/common/content_export.h",
"zygote/sandbox_support_linux.h",
"zygote/send_zygote_child_ping_linux.h",
"zygote/zygote_fork_delegate_linux.h",
]
deps = [
"//base:base",
"//content/public/common/zygote:buildflags",
]
}
}
# 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 = [
"//build:chromeos_buildflags",
"//media:media_buildflags",
"//tools/v8_context_snapshot:buildflags",
]
}
# This target allowing depending on content_switches without depending on the
# rest of common_sources and its dependencies. Note that unlike the targets
# above, this is for use inside of content/ only and does not link statically.
source_set("switches") {
visibility = [ "//content/*" ]
public = [ "content_switches.h" ]
sources = [
"//content/common/content_export.h",
"content_switches.cc",
]
# Deps required by the above header.
deps = [
"//build:chromeos_buildflags",
"//media:media_buildflags",
"//tools/v8_context_snapshot:buildflags",
]
configs += [ "//content:content_implementation" ]
if (enable_ipc_fuzzer) {
configs += [ "//tools/ipc_fuzzer:ipc_fuzzer_config" ]
}
}
# This target allows you to use the content MainFunctionParams struct 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_main_function_params") {
public = [ "main_function_params.h" ]
sources = [
"//content/common/content_export.h",
"main_function_params.cc",
"startup_data.h",
]
public_deps = [ "//base" ]
public_configs = [ ":static_switches_defines" ]
}
# Target for depending on main_function_params.h. This can be included without
# depending on all the rest of content, but unlike static_main_function_params,
# this can be combined with the rest of content.
component("main_function_params") {
public = [ "main_function_params.h" ]
sources = [
"//content/common/content_export.h",
"main_function_params.cc",
"startup_data.h",
]
deps = [ "//base" ]
configs += [ "//content:content_implementation" ]
}
source_set("common_sources") {
# External code should depend on via ":common" above.
visibility = [ "//content/*" ]
sources = [
"bindings_policy.h",
"cdm_info.cc",
"cdm_info.h",
"color_parser.h",
"common_param_traits.cc",
"common_param_traits.h",
"common_param_traits_macros.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_switch_dependent_feature_overrides.cc",
"content_switch_dependent_feature_overrides.h",
"dips_utils.h",
"drop_data.cc",
"drop_data.h",
"isolated_world_ids.h",
"javascript_dialog_type.h",
"mhtml_generation_params.cc",
"mhtml_generation_params.h",
"origin_util.h",
"page_type.h",
"page_visibility_state.h",
"page_zoom.h",
"persistent_notification_status.h",
"process_type.h",
"profiling.cc",
"profiling.h",
"pseudonymization_util.cc",
"pseudonymization_util.h",
"referrer.cc",
"referrer.h",
"referrer_type_converters.cc",
"referrer_type_converters.h",
"resource_request_blocked_reason.h",
"resource_usage_reporter_type_converters.cc",
"resource_usage_reporter_type_converters.h",
"result_codes.h",
"sandboxed_process_launcher_delegate.cc",
"sandboxed_process_launcher_delegate.h",
"socket_permission_request.h",
"startup_data.h",
"stop_find_action.h",
"storage_quota_params.h",
"three_d_api_types.h",
"url_constants.h",
"url_utils.cc",
"url_utils.h",
"user_agent.h",
"web_identity.h",
"webplugininfo.cc",
"webplugininfo.h",
"webplugininfo_param_traits.h",
"widget_type.h",
]
if (is_win) {
sources += [
"font_cache_dispatcher_win.h",
"sandbox_init_win.h",
]
}
if (is_android) {
sources += [
"resource_request_body_android.cc",
"resource_request_body_android.h",
]
}
configs += [
"//build/config:precompiled_headers",
"//content:content_implementation",
]
public_configs = [ "//v8:external_startup_data" ]
public_deps = [
":interfaces",
":main_function_params",
":renderer_type",
":switches",
"//content/common",
"//content/public/common/zygote:buildflags",
"//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/mojom:mojom_platform_headers",
"//tools/v8_context_snapshot:buildflags",
"//ui/accessibility",
"//ui/base/cursor/mojom:cursor_type",
"//ui/gfx/geometry",
"//ui/surface",
"//url/ipc:url_ipc",
]
deps = [
":content_descriptor_keys",
"//build:branding_buildflags",
"//build:chromeos_buildflags",
"//build/config/chromebox_for_meetings:buildflags",
# 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",
"//device/vr/buildflags",
"//media",
"//media/mojo/mojom",
"//ppapi/buildflags",
"//services/network/public/cpp",
"//services/service_manager/public/cpp",
"//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:public_common_jni" ]
}
if (is_win) {
deps += [ "//sandbox/win:common" ]
}
if (is_chromeos_ash) {
public_deps += [ "//media/capture/video/chromeos/public" ]
}
if (is_linux || is_chromeos) {
sources += [
"zygote/sandbox_support_linux.h",
"zygote/send_zygote_child_ping_linux.h",
"zygote/zygote_fork_delegate_linux.h",
]
}
if (use_zygote) {
sources += [ "zygote/zygote_handle.h" ]
}
if (rtc_use_pipewire) {
configs +=
[ "//third_party/webrtc/modules/desktop_capture:pipewire_config" ]
}
# //content/common needs to include public headers.
allow_circular_includes_from = [
":interfaces",
"//content/common",
"//content/common:mojo_bindings",
]
if (enable_plugins) {
sources += [
"content_plugin_info.cc",
"content_plugin_info.h",
]
if (enable_ppapi) {
deps += [ "//ppapi/c" ]
}
}
if (use_clang_profiling_inside_sandbox) {
sources += [ "profiling_utils.h" ]
}
}
_common_param_traits_headers = [ "common_param_traits_macros.h" ]
_common_param_traits_deps = [
"//ipc",
"//services/network/public/cpp:cpp_base",
"//services/network/public/mojom",
"//third_party/blink/public:blink_headers",
"//ui/accessibility:ax_enums_mojo",
"//ui/base",
"//ui/gfx/ipc",
]
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",
"//chrome/browser/ash/magic_boost",
"//chrome/browser/ash/policy/dlp/dialogs",
"//chrome/common:mojo_bindings",
"//chrome/common:mojo_bindings_blink",
"//content/common/*",
"//extensions/common:mojom",
"//extensions/common:mojom_blink",
]
sources = [
"alternative_error_page_override_info.mojom",
"drop_data.mojom",
"extra_mojo_js_features.mojom",
"resource_usage_reporter.mojom",
"webplugininfo.mojom",
"window_container_type.mojom",
]
if (is_win) {
sources += [ "font_cache_win.mojom" ]
}
deps = [
"//mojo/public/mojom/base:base",
"//services/network/public/mojom",
"//skia/public/mojom",
"//url/mojom:url_mojom_gurl",
# This dependency is really a dependency for the typemaps, but we need
# it here so that we can override it correctly for the component build.
"//third_party/blink/public/mojom:mojom_platform",
]
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"
overridden_deps = [ "//third_party/blink/public/mojom:mojom_platform" ]
component_deps = [ "//third_party/blink/public/common" ]
cpp_typemaps = [
{
types = [
{
mojom = "content.mojom.DropData"
cpp = "::content::DropData"
},
]
traits_headers = [ "drop_data.h" ]
traits_private_headers = _common_param_traits_headers
traits_deps = _common_param_traits_deps
},
{
types = [
{
mojom = "content.mojom.WebPluginInfo"
cpp = "::content::WebPluginInfo"
},
]
traits_headers = [ "webplugininfo.h" ]
traits_private_headers = [ "webplugininfo_param_traits.h" ]
traits_public_deps = [
"//base",
"//skia",
]
traits_deps = [ "//ipc" ]
},
]
}
mojom("renderer_type") {
sources = [ "media_playback_renderer_type.mojom" ]
}
if (is_android) {
java_cpp_features("java_features_srcjar") {
# External code should depend on ":common_java" instead.
visibility = [ ":*" ]
sources = [ "//content/public/common/content_features.cc" ]
template = "//content/public/common/android/java_templates/ContentFeatures.java.tmpl"
}
android_library("common_java") {
# Right now, this only includes the Java features. But if we need more Java
# files, they should be added here as necessary.
srcjar_deps = [ ":java_features_srcjar" ]
}
}