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