blob: 7e22abb81a2f09a980e31d7f464cf8484927a96e [file] [log] [blame]
# Copyright 2018 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//chrome/common/extensions/api/api_sources.gni")
import("//chrome/common/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//pdf/features.gni")
import("//tools/json_schema_compiler/json_schema_api.gni")
assert(enable_extensions_core,
"Cannot depend on extensions because enable_extensions_core=false.")
# This should be:
# The set of all targets needed to build out the extension API implementations
# and any necessary steps to register or instantiate them.
# Embedders should usually depend on this.
# Right now, there's currently a number of other targets that are (not ideally)
# sharded out. See https://crbug.com/883570.
group("api") {
public_deps = [ "//chrome/browser/extensions/api:api_implementations" ]
}
# The collection of API implementations.
group("api_implementations") {
# APIs supported on Win/Mac/Linux and desktop Android go here.
# TODO(https://crbug.com/356905053): Add more APIs here.
public_deps = [
"//chrome/browser/extensions/api/activity_log_private",
"//chrome/browser/extensions/api/browsing_data",
"//chrome/browser/extensions/api/context_menus",
"//chrome/browser/extensions/api/cookies",
"//chrome/browser/extensions/api/debugger",
"//chrome/browser/extensions/api/enterprise_hardware_platform",
"//chrome/browser/extensions/api/extension_action",
"//chrome/browser/extensions/api/font_settings",
"//chrome/browser/extensions/api/module",
"//chrome/browser/extensions/api/notifications",
"//chrome/browser/extensions/api/omnibox",
"//chrome/browser/extensions/api/page_capture",
"//chrome/browser/extensions/api/permissions",
"//chrome/browser/extensions/api/preference",
"//chrome/browser/extensions/api/processes",
"//chrome/browser/extensions/api/proxy",
"//chrome/browser/extensions/api/reading_list",
"//chrome/browser/extensions/api/runtime",
"//chrome/browser/extensions/api/scripting",
"//chrome/browser/extensions/api/web_authentication_proxy",
"//chrome/browser/extensions/api/webrtc_audio_private",
"//chrome/browser/extensions/api/webrtc_logging_private",
]
if (enable_service_discovery) {
public_deps += [ "//chrome/browser/extensions/api/mdns" ]
}
if (enable_extensions) {
# APIs supported on Win/Mac/Linux but NOT desktop Android go here.
# TODO(crbug.com/40245282): Add more API implementations here.
public_deps += [
"//chrome/browser/extensions/api/autofill_private",
"//chrome/browser/extensions/api/braille_display_private",
"//chrome/browser/extensions/api/command_line_private",
"//chrome/browser/extensions/api/content_settings",
"//chrome/browser/extensions/api/desktop_capture",
"//chrome/browser/extensions/api/downloads_internal",
"//chrome/browser/extensions/api/experimental_actor",
"//chrome/browser/extensions/api/experimental_ai_data",
"//chrome/browser/extensions/api/idltest",
"//chrome/browser/extensions/api/networking_private",
"//chrome/browser/extensions/api/resources_private",
"//chrome/browser/extensions/api/safe_browsing_private",
"//chrome/browser/extensions/api/search",
"//chrome/browser/extensions/api/settings_overrides",
"//chrome/browser/extensions/api/side_panel",
"//chrome/browser/extensions/api/tab_capture",
"//chrome/browser/extensions/api/tab_groups",
"//chrome/browser/extensions/api/web_navigation",
"//chrome/browser/extensions/api/web_view",
"//chrome/browser/extensions/api/webrtc_desktop_capture_private",
]
if (enable_pdf) {
public_deps += [ "//chrome/browser/extensions/api/pdf_viewer_private" ]
}
if (is_chromeos) {
public_deps += [
"//chrome/browser/chromeos/extensions/smart_card_provider_private",
"//chrome/browser/extensions/api/crash_report_private",
"//chrome/browser/extensions/api/document_scan",
"//chrome/browser/extensions/api/enterprise_device_attributes",
"//chrome/browser/extensions/api/enterprise_kiosk_input",
"//chrome/browser/extensions/api/enterprise_login",
"//chrome/browser/extensions/api/enterprise_networking_attributes",
"//chrome/browser/extensions/api/enterprise_platform_keys",
"//chrome/browser/extensions/api/enterprise_platform_keys_private",
"//chrome/browser/extensions/api/input_ime",
"//chrome/browser/extensions/api/platform_keys",
"//chrome/browser/extensions/api/quick_unlock_private",
"//chrome/browser/extensions/api/terminal",
]
}
} # if (enable_extensions)
}
# The step necessary to generate the code to register the corresponding
# ExtensionFunctions in order to map the function string name with their
# implementation.
function_registration("api_registration") {
sources = chrome_extensions_api_schema_sources +
chrome_extensions_api_uncompiled_sources
impl_dir = "//chrome/browser/extensions/api"
configs = [ "//build/config:precompiled_headers" ]
bundle_name = "Chrome"
root_namespace = chrome_extensions_api_root_namespace
schema_include_rules = chrome_extensions_api_schema_include_rules
deps = [
# This is not directly included by the target, but specified here
# to avoid cyclic dependency chain related to private_membership
# protos.
"//components/policy/proto",
# Different APIs include headers from these targets.
"//chrome/browser/ai",
"//chrome/common",
"//chrome/common:mojo_bindings",
"//components/autofill/core/common/mojom:mojo_types",
"//components/omnibox/browser",
"//components/translate/core/browser",
"//components/zoom",
"//content/public/browser",
"//extensions/browser",
"//extensions/browser/api:api_implementations",
"//extensions/common/api",
# Different APIs include some headers from chrome/common that in turn
# include generated headers from these targets.
# TODO(brettw) this should be made unnecessary if possible.
"//chrome/common/extensions/api",
"//components/sync",
"//skia",
"//third_party/metrics_proto",
"//ui/accessibility:ax_enums_mojo",
]
if (is_chromeos) {
deps += [
"//chrome/browser/ash/extensions/autotest_private",
"//chrome/browser/ash/extensions/file_manager",
# TODO: We should pull these out into a separate build and function
# generation step so that //chrome/browser/extensions has fewer
# dependencies on //chrome/browser/chromeos.
"//chrome/browser/chromeos/extensions/accessibility_service_private",
"//chrome/browser/chromeos/extensions/info_private",
"//chrome/browser/chromeos/extensions/login_screen/login_screen_storage",
"//chrome/browser/chromeos/extensions/system_log",
"//chrome/browser/chromeos/extensions/wallpaper",
]
}
}
# KeyedService factories initialization.
source_set("keyed_service_factories") {
sources = [
"api_browser_context_keyed_service_factories.cc",
"api_browser_context_keyed_service_factories.h",
]
deps = [
":api_implementations",
"//chrome/browser/extensions",
"//chrome/common:buildflags",
"//components/safe_browsing:buildflags",
"//extensions/buildflags",
"//pdf:buildflags",
"//printing/buildflags",
]
if (is_chromeos) {
deps += [
"//chrome/browser/chromeos/extensions/login_screen/login_state",
"//chrome/browser/chromeos/extensions/wm",
]
}
}
if (is_win) {
# The files below are required to exercise the code that properly launches
# Native Hosts with paths containing characters that are problematic for
# cmd.exe. crbug.com/335558
executable("native_messaging_test_echo_host") {
testonly = true
sources = [ "messaging/native_messaging_test_echo_host.cc" ]
deps = [ "//base" ]
}
copy("native_messaging_test_echo_&_host") {
testonly = true
src_tool = ":native_messaging_test_echo_host"
sources = [ get_label_info(src_tool, "root_out_dir") +
"/native_messaging_test_echo_host.exe" ]
outputs = [ "$root_build_dir/native_messaging_test_echo_&_host.exe" ]
deps = [ src_tool ]
}
copy("native_messaging_test_echo_space_host") {
testonly = true
src_tool = ":native_messaging_test_echo_host"
sources = [ get_label_info(src_tool, "root_out_dir") +
"/native_messaging_test_echo_host.exe" ]
outputs = [ "$root_build_dir/native_messaging_test_echo_ _host.exe" ]
deps = [ src_tool ]
}
}