| # Copyright 2015 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/config/c++/c++.gni") |
| import("//build/config/chrome_build.gni") |
| import("//build/config/python.gni") |
| import("//build/util/lastchange.gni") |
| import("//build/util/process_version.gni") |
| import("//headless/headless.gni") |
| import("//mojo/public/tools/bindings/mojom.gni") |
| import("//printing/buildflags/buildflags.gni") |
| import("//testing/test.gni") |
| import("//third_party/closure_compiler/compile_js.gni") |
| import("//third_party/inspector_protocol/inspector_protocol.gni") |
| import("//tools/grit/grit_rule.gni") |
| import("//tools/grit/repack.gni") |
| import("//tools/v8_context_snapshot/v8_context_snapshot.gni") |
| |
| if (headless_use_policy) { |
| assert(headless_use_prefs, |
| "'headless_use_policy' requires 'headless_use_prefs'.") |
| } |
| |
| # Headless defines config applied to every target below. |
| config("headless_defines_config") { |
| defines = [] |
| |
| if (headless_use_prefs) { |
| defines += [ "HEADLESS_USE_PREFS" ] |
| } |
| |
| if (headless_use_policy) { |
| defines += [ "HEADLESS_USE_POLICY" ] |
| } |
| } |
| |
| # For code inside the build component "headless". |
| config("inside_headless_component") { |
| defines = [ "HEADLESS_IMPLEMENTATION" ] |
| } |
| |
| group("headless_lib") { |
| deps = [ ":headless_non_renderer" ] |
| } |
| |
| repack("resource_pack_data") { |
| sources = [ |
| "$root_gen_dir/components/components_resources.pak", |
| "$root_gen_dir/content/app/resources/content_resources_100_percent.pak", |
| "$root_gen_dir/content/content_resources.pak", |
| "$root_gen_dir/content/dev_ui_content_resources.pak", |
| "$root_gen_dir/headless/headless_lib_resources.pak", |
| "$root_gen_dir/net/net_resources.pak", |
| "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak", |
| "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak", |
| "$root_gen_dir/ui/resources/ui_resources_100_percent.pak", |
| "$root_gen_dir/ui/resources/webui_generated_resources.pak", |
| "$root_gen_dir/ui/resources/webui_resources.pak", |
| ] |
| |
| deps = [ |
| ":resources", |
| "//components/resources:components_resources", |
| "//content:content_resources", |
| "//content:dev_ui_content_resources", |
| "//content/app/resources", |
| "//net:net_resources", |
| "//third_party/blink/public:resources", |
| "//third_party/blink/public:scaled_resources_100_percent", |
| "//ui/resources", |
| ] |
| |
| output = "$root_out_dir/headless_lib_data.pak" |
| } |
| |
| repack("resource_pack_strings") { |
| sources = [ |
| "$root_gen_dir/components/strings/components_strings_en-US.pak", |
| "$root_gen_dir/third_party/blink/public/strings/blink_strings_en-US.pak", |
| "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak", |
| "$root_gen_dir/ui/strings/ax_strings_en-US.pak", |
| "$root_gen_dir/ui/strings/ui_strings_en-US.pak", |
| ] |
| |
| if (is_chrome_branded) { |
| sources += [ "${root_gen_dir}/components/strings/components_google_chrome_strings_en-US.pak" ] |
| } else { |
| sources += [ "${root_gen_dir}/components/strings/components_chromium_strings_en-US.pak" ] |
| } |
| |
| deps = [ |
| "//components/strings", |
| "//third_party/blink/public/strings", |
| "//ui/strings", |
| ] |
| |
| if (!is_fuchsia) { |
| sources += |
| [ "$root_gen_dir/content/browser/devtools/devtools_resources.pak" ] |
| deps += [ "//content/browser/devtools:devtools_resources" ] |
| } |
| |
| output = "$root_out_dir/headless_lib_strings.pak" |
| } |
| |
| action("embedded_resource_pack_data") { |
| # TODO(altimin): Consider zipping file here, it can reduce size up to 80%. |
| script = "lib/embed_data.py" |
| |
| inputs = [ "$root_out_dir/headless_lib_data.pak" ] |
| |
| outputs = [ |
| "$root_gen_dir/headless/embedded_resource_pack_data.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_data.h", |
| ] |
| |
| args = [ |
| "--data_file", |
| rebase_path("$root_out_dir/headless_lib_data.pak", root_build_dir), |
| "--gendir", |
| rebase_path("$root_gen_dir", root_build_dir), |
| "--header_file", |
| "headless/embedded_resource_pack_data.h", |
| "--source_file", |
| "headless/embedded_resource_pack_data.cc", |
| "--namespace", |
| "headless", |
| "--variable_name", |
| "kHeadlessResourcePackData", |
| ] |
| |
| deps = [ ":resource_pack_data" ] |
| } |
| |
| action("embedded_resource_pack_strings") { |
| # TODO(altimin): Consider zipping file here, it can reduce size up to 80%. |
| script = "lib/embed_data.py" |
| |
| inputs = [ "$root_out_dir/headless_lib_strings.pak" ] |
| |
| outputs = [ |
| "$root_gen_dir/headless/embedded_resource_pack_strings.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_strings.h", |
| ] |
| |
| args = [ |
| "--data_file", |
| rebase_path("$root_out_dir/headless_lib_strings.pak", root_build_dir), |
| "--gendir", |
| rebase_path("$root_gen_dir", root_build_dir), |
| "--header_file", |
| "headless/embedded_resource_pack_strings.h", |
| "--source_file", |
| "headless/embedded_resource_pack_strings.cc", |
| "--namespace", |
| "headless", |
| "--variable_name", |
| "kHeadlessResourcePackStrings", |
| ] |
| |
| deps = [ ":resource_pack_strings" ] |
| } |
| |
| grit("resources") { |
| source = "lib/resources/headless_lib_resources.grd" |
| outputs = [ |
| "grit/headless_lib_resources.h", |
| "$root_gen_dir/headless/headless_lib_resources.pak", |
| ] |
| } |
| |
| devtools_domains = [ |
| "accessibility", |
| "animation", |
| "browser", |
| "cache_storage", |
| "console", |
| "css", |
| "database", |
| "debugger", |
| "device_orientation", |
| "dom", |
| "dom_debugger", |
| "dom_snapshot", |
| "dom_storage", |
| "emulation", |
| "fetch", |
| "headless_experimental", |
| "heap_profiler", |
| "indexeddb", |
| "input", |
| "inspector", |
| "io", |
| "layer_tree", |
| "log", |
| "memory", |
| "network", |
| "page", |
| "performance", |
| "profiler", |
| "runtime", |
| "security", |
| "service_worker", |
| "target", |
| "tracing", |
| ] |
| |
| generated_devtools_api_sources = [] |
| generated_devtools_api_headers = [] |
| foreach(domain, devtools_domains) { |
| generated_devtools_api_headers += [ |
| "$target_gen_dir/public/devtools/domains/" + domain + ".h", |
| "$target_gen_dir/public/devtools/domains/types_" + domain + ".h", |
| "$target_gen_dir/public/devtools/internal/type_conversions_" + domain + |
| ".h", |
| "$target_gen_dir/public/devtools/internal/" + |
| "types_forward_declarations_" + domain + ".h", |
| ] |
| generated_devtools_api_sources += [ |
| "$target_gen_dir/public/devtools/domains/" + domain + ".cc", |
| "$target_gen_dir/public/devtools/domains/types_" + domain + ".cc", |
| ] |
| } |
| |
| action("gen_devtools_client_api") { |
| script = "lib/browser/devtools_api/client_api_generator.py" |
| deps = [ |
| ":protocol_sources", |
| "//third_party/blink/public/devtools_protocol:protocol_version", |
| ] |
| inputs = [ |
| "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json", |
| ] |
| |
| outputs = generated_devtools_api_headers + generated_devtools_api_sources |
| sources = [ |
| "lib/browser/devtools_api/domain_cc.template", |
| "lib/browser/devtools_api/domain_h.template", |
| "lib/browser/devtools_api/domain_type_conversions_h.template", |
| "lib/browser/devtools_api/domain_types_cc.template", |
| "lib/browser/devtools_api/domain_types_forward_declarations_h.template", |
| "lib/browser/devtools_api/domain_types_h.template", |
| ] |
| |
| args = [ |
| "--protocol", |
| rebase_path(inputs[0], root_build_dir), |
| "--output_dir", |
| rebase_path(target_gen_dir, root_build_dir) + "/public", |
| ] |
| } |
| |
| if (headless_fontconfig_utils && !is_fuchsia) { |
| static_library("headless_fontconfig_utils") { |
| sources = [ |
| "public/headless_export.h", |
| "public/util/fontconfig.cc", |
| "public/util/fontconfig.h", |
| ] |
| |
| deps = [ |
| "//base", |
| "//build/config/freetype", |
| "//third_party/fontconfig", |
| ] |
| |
| configs += [ ":inside_headless_component" ] |
| } |
| } |
| |
| inspector_protocol_generate("protocol_sources") { |
| visibility = [ |
| ":backend_cdp_bindings", |
| ":gen_devtools_client_api", |
| ] |
| deps = [ "//third_party/blink/public/devtools_protocol:protocol_version" ] |
| _blink_protocol_path = rebase_path( |
| "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json", |
| root_build_dir) |
| |
| inspector_protocol_dir = "//third_party/inspector_protocol" |
| out_dir = target_gen_dir |
| config_file = "protocol_config.json" |
| config_values = [ "protocol.path=$_blink_protocol_path" ] |
| |
| inputs = [ |
| "$root_gen_dir/third_party/blink/public/devtools_protocol/protocol.json", |
| config_file, |
| ] |
| |
| # These are relative to $target_gen_dir. |
| outputs = [ |
| "lib/browser/protocol/base_string_adapter.cc", |
| "lib/browser/protocol/base_string_adapter.h", |
| "lib/browser/protocol/browser.cc", |
| "lib/browser/protocol/browser.h", |
| "lib/browser/protocol/headless_experimental.cc", |
| "lib/browser/protocol/headless_experimental.h", |
| "lib/browser/protocol/page.cc", |
| "lib/browser/protocol/page.h", |
| "lib/browser/protocol/target.cc", |
| "lib/browser/protocol/target.h", |
| "lib/browser/protocol/protocol.cc", |
| "lib/browser/protocol/protocol.h", |
| ] |
| } |
| |
| static_library("backend_cdp_bindings") { |
| deps = [ |
| ":protocol_sources", |
| "//base", |
| "//third_party/inspector_protocol:crdtp", |
| ] |
| sources = get_target_outputs(":protocol_sources") |
| visibility = [ ":headless_non_renderer" ] |
| configs += [ |
| ":headless_defines_config", |
| ":inside_headless_component", |
| ] |
| } |
| |
| # Code needed in both processes. Only exposed through the |headless_renderer| |
| # target and the |headless_non_renderer| component. |
| source_set("headless_shared_sources") { |
| visibility = [ |
| ":headless_non_renderer", |
| ":headless_renderer", |
| ] |
| defines = [] |
| |
| sources = [ |
| "app/headless_shell_switches.cc", |
| "app/headless_shell_switches.h", |
| "lib/headless_content_client.cc", |
| "lib/headless_content_client.h", |
| "public/headless_browser.cc", |
| "public/headless_browser.h", |
| "public/headless_export.h", |
| "public/internal/headless_devtools_client_impl.h", |
| "public/internal/message_dispatcher.h", |
| "public/internal/value_conversions.h", |
| "public/util/error_reporter.cc", |
| "public/util/error_reporter.h", |
| "public/util/user_agent.cc", |
| "public/util/user_agent.h", |
| ] |
| |
| sources += generated_devtools_api_headers + generated_devtools_api_sources |
| |
| if (!is_fuchsia) { |
| sources += [ |
| "lib/headless_crash_reporter_client.cc", |
| "lib/headless_crash_reporter_client.h", |
| ] |
| } |
| |
| deps = [ |
| ":gen_devtools_client_api", |
| ":version_header", |
| "//base:base_static", |
| "//components/embedder_support/origin_trials", |
| "//content/public/common", |
| "//ui/base", |
| "//url", |
| ] |
| |
| if (!is_fuchsia) { |
| deps += [ |
| "//components/crash/content/browser", |
| "//components/crash/core/app", |
| ] |
| } |
| if (is_win) { |
| deps += [ "//sandbox" ] |
| } |
| |
| configs += [ ":inside_headless_component" ] |
| configs += [ ":headless_defines_config" ] |
| } |
| |
| # Code that is not needed in a renderer process. |
| component("headless_non_renderer") { |
| sources = [ |
| "lib/browser/headless_browser_context_impl.cc", |
| "lib/browser/headless_browser_context_impl.h", |
| "lib/browser/headless_browser_context_options.cc", |
| "lib/browser/headless_browser_context_options.h", |
| "lib/browser/headless_browser_impl.cc", |
| "lib/browser/headless_browser_impl.h", |
| "lib/browser/headless_browser_main_parts.cc", |
| "lib/browser/headless_browser_main_parts.h", |
| "lib/browser/headless_devtools.cc", |
| "lib/browser/headless_devtools.h", |
| "lib/browser/headless_devtools_agent_host_client.cc", |
| "lib/browser/headless_devtools_agent_host_client.h", |
| "lib/browser/headless_devtools_client_impl.cc", |
| "lib/browser/headless_devtools_manager_delegate.cc", |
| "lib/browser/headless_devtools_manager_delegate.h", |
| "lib/browser/headless_permission_manager.cc", |
| "lib/browser/headless_permission_manager.h", |
| "lib/browser/headless_platform_event_source.cc", |
| "lib/browser/headless_platform_event_source.h", |
| "lib/browser/headless_quota_permission_context.cc", |
| "lib/browser/headless_quota_permission_context.h", |
| "lib/browser/headless_request_context_manager.cc", |
| "lib/browser/headless_request_context_manager.h", |
| "lib/browser/headless_window_tree_host.h", |
| "lib/browser/protocol/browser_handler.cc", |
| "lib/browser/protocol/browser_handler.h", |
| "lib/browser/protocol/domain_handler.h", |
| "lib/browser/protocol/headless_devtools_session.cc", |
| "lib/browser/protocol/headless_devtools_session.h", |
| "lib/browser/protocol/headless_handler.cc", |
| "lib/browser/protocol/headless_handler.h", |
| "lib/browser/protocol/page_handler.cc", |
| "lib/browser/protocol/page_handler.h", |
| "lib/browser/protocol/target_handler.cc", |
| "lib/browser/protocol/target_handler.h", |
| "public/headless_browser_context.h", |
| "public/headless_devtools_channel.h", |
| "public/headless_devtools_client.h", |
| "public/headless_devtools_target.h", |
| "public/headless_web_contents.h", |
| ] |
| |
| if (is_mac) { |
| sources += [ |
| "lib/browser/headless_browser_impl_mac.mm", |
| "lib/browser/headless_browser_main_parts_mac.mm", |
| "lib/browser/headless_shell_application_mac.h", |
| "lib/browser/headless_shell_application_mac.mm", |
| ] |
| } |
| |
| if (is_linux || is_chromeos) { |
| sources += [ "lib/browser/headless_browser_main_parts_linux.cc" ] |
| } |
| |
| if (headless_use_policy) { |
| sources += [ |
| "lib/browser/headless_pref_names.cc", |
| "lib/browser/headless_pref_names.h", |
| "lib/browser/policy/headless_browser_policy_connector.cc", |
| "lib/browser/policy/headless_browser_policy_connector.h", |
| "lib/browser/policy/headless_mode_policy.cc", |
| "lib/browser/policy/headless_mode_policy.h", |
| "lib/browser/policy/headless_policies.cc", |
| "lib/browser/policy/headless_policies.h", |
| ] |
| } |
| |
| if (use_aura) { |
| sources += [ |
| "lib/browser/headless_browser_impl_aura.cc", |
| "lib/browser/headless_clipboard.cc", |
| "lib/browser/headless_clipboard.h", |
| "lib/browser/headless_focus_client.cc", |
| "lib/browser/headless_focus_client.h", |
| "lib/browser/headless_screen.cc", |
| "lib/browser/headless_screen.h", |
| "lib/browser/headless_window_parenting_client.cc", |
| "lib/browser/headless_window_parenting_client.h", |
| "lib/browser/headless_window_tree_host.cc", |
| ] |
| } |
| |
| public_deps = [ |
| "//base", |
| "//net", |
| ] |
| |
| data_deps = [] |
| data = [] |
| defines = [] |
| |
| if (enable_basic_printing) { |
| public_deps += [ "//skia" ] |
| } |
| |
| deps = [ |
| ":backend_cdp_bindings", |
| ":headless_shared_sources", |
| ":version_header", |
| "//base:base_static", |
| "//build:branding_buildflags", |
| "//build:chromeos_buildflags", |
| "//components/cookie_config", |
| "//components/embedder_support", |
| "//components/keyed_service/content", |
| "//components/policy:generated", |
| "//components/policy/core/browser", |
| "//components/policy/core/common:common_constants", |
| "//components/pref_registry", |
| "//components/prefs", |
| "//components/profile_metrics", |
| "//components/security_state/core", |
| "//content/public/app", |
| "//content/public/browser", |
| "//content/public/common", |
| "//printing/buildflags", |
| "//services/cert_verifier/public/mojom", |
| "//services/device/public/cpp/geolocation", |
| "//services/service_manager/public/cpp", |
| "//third_party/inspector_protocol:crdtp", |
| "//ui/base", |
| "//ui/base/clipboard", |
| "//ui/compositor", |
| "//ui/display", |
| "//ui/events/devices", |
| "//ui/gfx", |
| "//url", |
| ] |
| |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/browser", |
| "//components/printing/browser/print_to_pdf", |
| "//components/printing/common:mojo_interfaces", |
| "//printing", |
| "//printing/mojom", |
| ] |
| } |
| |
| if (is_component_build) { |
| sources += [ |
| "lib/browser/headless_content_browser_client.cc", |
| "lib/browser/headless_content_browser_client.h", |
| "lib/browser/headless_web_contents_impl.cc", |
| "lib/browser/headless_web_contents_impl.h", |
| "lib/headless_content_main_delegate.cc", |
| "lib/headless_content_main_delegate.h", |
| "lib/renderer/headless_content_renderer_client.cc", |
| "lib/renderer/headless_content_renderer_client.h", |
| "lib/utility/headless_content_utility_client.cc", |
| "lib/utility/headless_content_utility_client.h", |
| ] |
| |
| if (is_mac) { |
| sources += [ "lib/headless_content_main_delegate_mac.mm" ] |
| } |
| |
| if (enable_basic_printing) { |
| sources += [ |
| "lib/renderer/headless_print_render_frame_helper_delegate.cc", |
| "lib/renderer/headless_print_render_frame_helper_delegate.h", |
| ] |
| } |
| |
| deps += [ |
| "//components/crash/core/common", |
| "//components/security_state/content", |
| "//gin", |
| "//third_party/blink/public:blink", |
| "//ui/gl", |
| "//v8", |
| ] |
| |
| if (!is_fuchsia) { |
| deps += [ |
| "//components/crash/content/browser", |
| "//components/crash/core/app", |
| ] |
| } |
| |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/browser", |
| "//components/printing/renderer", |
| "//components/services/print_compositor", |
| "//components/services/print_compositor/public/mojom", |
| ] |
| } |
| |
| if (headless_use_prefs) { |
| deps += [ "//components/os_crypt" ] |
| } |
| |
| if (headless_use_policy) { |
| deps += [ |
| "//components/policy/content", |
| "//components/user_prefs", |
| ] |
| } |
| } |
| |
| if (is_linux || is_chromeos) { |
| data_deps += [ "//components/crash/core/app:chrome_crashpad_handler" ] |
| } |
| |
| # Normally set to false (see build/args/headless.gn), but we can optionally |
| # use external v8 startup data too. |
| if ((!is_win || is_component_build) && v8_use_external_startup_data) { |
| public_deps += [ "//v8" ] |
| if (use_v8_context_snapshot) { |
| data += [ "$root_out_dir/$v8_context_snapshot_filename" ] |
| data_deps += [ "//tools/v8_context_snapshot" ] |
| } else { |
| data += [ "$root_out_dir/snapshot_blob.bin" ] |
| } |
| } |
| |
| if (is_mac) { |
| deps += [ ":mac_helpers" ] |
| frameworks = [ |
| "AppKit.framework", |
| "CoreFoundation.framework", |
| ] |
| } else { |
| deps += [ "//ui/aura" ] |
| } |
| |
| if (headless_use_embedded_resources) { |
| defines += [ "HEADLESS_USE_EMBEDDED_RESOURCES" ] |
| deps += [ |
| ":embedded_resource_pack_data", |
| ":embedded_resource_pack_strings", |
| ] |
| sources += [ |
| "$root_gen_dir/headless/embedded_resource_pack_data.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_data.h", |
| "$root_gen_dir/headless/embedded_resource_pack_strings.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_strings.h", |
| ] |
| } else { |
| deps += [ |
| ":resource_pack_data", |
| ":resource_pack_strings", |
| ] |
| } |
| |
| if (use_ozone) { |
| deps += [ "//ui/ozone" ] |
| } |
| |
| if (use_dbus) { |
| defines += [ "USE_DBUS" ] |
| deps += [ "//device/bluetooth" ] |
| } |
| |
| if (headless_fontconfig_utils && !is_fuchsia) { |
| deps += [ ":headless_fontconfig_utils" ] |
| } |
| |
| configs += [ ":inside_headless_component" ] |
| configs += [ ":headless_defines_config" ] |
| } |
| |
| # Headless renderer is a convenience library for non component builds that |
| # includes headless classes that depend on the renderer. |
| if (!is_component_build) { |
| static_library("headless_renderer") { |
| defines = [] |
| sources = [ |
| "lib/browser/headless_web_contents_impl.cc", |
| "lib/browser/headless_web_contents_impl.h", |
| "lib/headless_content_main_delegate.cc", |
| "lib/headless_content_main_delegate.h", |
| "lib/renderer/headless_content_renderer_client.cc", |
| "lib/renderer/headless_content_renderer_client.h", |
| "lib/utility/headless_content_utility_client.cc", |
| "lib/utility/headless_content_utility_client.h", |
| ] |
| |
| if (is_mac) { |
| sources += [ "lib/headless_content_main_delegate_mac.mm" ] |
| } |
| |
| if (enable_basic_printing) { |
| sources += [ |
| "lib/renderer/headless_print_render_frame_helper_delegate.cc", |
| "lib/renderer/headless_print_render_frame_helper_delegate.h", |
| ] |
| } |
| |
| deps = [ |
| ":headless_shared_sources", |
| "//build:chromeos_buildflags", |
| "//components/crash/core/common", |
| "//components/security_state/content", |
| "//components/security_state/core", |
| "//content/public/app", |
| "//content/public/browser", |
| "//content/public/common", |
| "//content/public/renderer", |
| "//content/public/utility", |
| "//printing/buildflags", |
| "//third_party/blink/public:blink_headers", |
| "//ui/base", |
| "//ui/compositor", |
| "//v8", |
| ] |
| if (use_ozone) { |
| deps += [ "//ui/ozone" ] |
| } |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/renderer", |
| "//components/services/print_compositor", |
| "//components/services/print_compositor/public/mojom", |
| ] |
| } |
| configs += [ ":headless_defines_config" ] |
| if (is_mac || is_win || is_linux || is_chromeos) { |
| deps += [ "//components/crash/core/app" ] |
| } |
| |
| # TODO(caseq): this is only here because we build headless_content_main_delegate.cc in renderer. |
| # Move it to the browser-specific part. |
| if (headless_use_embedded_resources) { |
| defines += [ "HEADLESS_USE_EMBEDDED_RESOURCES" ] |
| deps += [ |
| ":embedded_resource_pack_data", |
| ":embedded_resource_pack_strings", |
| ] |
| sources += [ |
| "$root_gen_dir/headless/embedded_resource_pack_data.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_data.h", |
| "$root_gen_dir/headless/embedded_resource_pack_strings.cc", |
| "$root_gen_dir/headless/embedded_resource_pack_strings.h", |
| ] |
| } |
| } |
| } else { |
| # For component builds all dependencies are already included in the headless |
| # component. |
| group("headless_renderer") { |
| deps = [ ":headless_non_renderer" ] |
| } |
| } |
| |
| group("headless_tests") { |
| testonly = true |
| |
| deps = [ |
| ":headless_browsertests", |
| ":headless_example", |
| ":headless_unittests", |
| ] |
| } |
| |
| test("headless_unittests") { |
| sources = [ |
| "public/domains/types_unittest.cc", |
| "public/util/error_reporter_unittest.cc", |
| |
| # Headers for code under test that aren't normally exposed. |
| "public/headless_export.h", |
| "public/util/error_reporter.h", |
| ] |
| |
| # Headers for generated API code under test. |
| sources += generated_devtools_api_headers |
| |
| defines = [] |
| |
| deps = [ |
| ":gen_devtools_client_api", |
| ":headless_non_renderer", |
| ":headless_shell_lib", |
| "//base/test:run_all_unittests", |
| "//base/test:test_support", |
| "//components/security_state/content", |
| "//content/public/app", |
| "//content/public/child:child", |
| "//content/public/common", |
| "//testing/gmock", |
| "//testing/gtest", |
| ] |
| |
| if (is_win) { |
| deps += [ "//components/crash/core/app:crash_export_thunks" ] |
| } |
| |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/browser", |
| "//components/printing/browser/print_to_pdf", |
| "//printing", |
| "//printing/buildflags", |
| "//third_party/blink/public:blink", |
| ] |
| } |
| |
| configs += [ ":headless_defines_config" ] |
| |
| if (is_fuchsia) { |
| # TODO(crbug.com/1256502): Switch back to CFv2 once the bug is fixed. |
| use_cfv2 = false |
| } |
| } |
| |
| if (is_mac) { |
| copy("mac_helpers") { |
| sources = [ "$root_out_dir/chrome_crashpad_handler" ] |
| |
| deps = [ "//components/crash/core/app:chrome_crashpad_handler" ] |
| |
| outputs = [ "$root_out_dir/Helpers/{{source_file_part}}" ] |
| } |
| } |
| |
| test("headless_browsertests") { |
| configs += [ |
| "//net:net_test_config", |
| "//tools/v8_context_snapshot:use_v8_context_snapshot", |
| "//v8:external_startup_data", |
| ] |
| sources = [ |
| "test/headless_browser_browsertest.cc", |
| "test/headless_browser_context_browsertest.cc", |
| "test/headless_browser_test.cc", |
| "test/headless_browser_test.h", |
| "test/headless_client_browsertest.cc", |
| "test/headless_devtools_client_browsertest.cc", |
| "test/headless_origin_trials_browsertest.cc", |
| "test/headless_test_launcher.cc", |
| "test/headless_web_contents_browsertest.cc", |
| "test/test_network_interceptor.cc", |
| "test/test_network_interceptor.h", |
| ] |
| |
| if (headless_use_policy) { |
| sources += [ |
| "test/headless_policy_browsertest.cc", |
| "test/headless_policy_browsertest.h", |
| ] |
| } |
| |
| # TODO(https://crbug.com/1107396): These tests flakily timeout on fuchsia. |
| if (!is_fuchsia) { |
| sources += [ |
| "test/headless_compositor_browsertest.cc", |
| "test/headless_protocol_browsertest.cc", |
| "test/headless_protocol_browsertest.h", |
| ] |
| } |
| |
| data = [ |
| "test/data/", |
| "test/dom_tree_extraction_expected_nodes.txt", |
| "test/dom_tree_extraction_expected_styles.txt", |
| "$root_out_dir/headless_lib_data.pak", |
| "$root_out_dir/headless_lib_strings.pak", |
| "//net/tools/testserver/", |
| "//third_party/blink/web_tests/http/tests/inspector-protocol/", |
| "//third_party/pywebsocket3/", |
| ] |
| |
| data_deps = [ "//testing/buildbot/filters:headless_browsertests_filters" ] |
| |
| if (is_fuchsia) { |
| additional_manifest_fragments = [ |
| "//build/config/fuchsia/test/font_capabilities.test-cmx", |
| |
| # TODO(crbug.com/1185811): Figure out why jit_capabilities is needed. |
| "//build/config/fuchsia/test/jit_capabilities.test-cmx", |
| |
| "//build/config/fuchsia/test/network_capabilities.test-cmx", |
| "//build/config/fuchsia/test/vulkan_capabilities.test-cmx", |
| ] |
| } |
| |
| if (is_mac) { |
| data_deps += [ ":mac_helpers" ] |
| } |
| |
| defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ] |
| |
| deps = [ |
| ":headless_shell_lib", |
| "//base", |
| "//cc:test_support", |
| "//components/policy/core/browser", |
| "//components/security_state/content", |
| "//content/test:browsertest_support", |
| "//content/test:test_support", |
| "//gin", |
| "//net:test_support", |
| "//printing/buildflags", |
| "//services/network/public/mojom", |
| "//testing/gmock", |
| "//testing/gtest", |
| "//ui/base/clipboard", |
| ] |
| |
| if (is_mac) { |
| deps += [ "//services/device/public/cpp:test_support" ] |
| } |
| |
| if (!is_fuchsia) { |
| deps += [ "//third_party/crashpad/crashpad/client" ] |
| } |
| |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/browser", |
| "//pdf", |
| "//printing", |
| ] |
| } |
| |
| if (headless_use_policy) { |
| deps += [ "//components/policy/core/common:test_support" ] |
| } |
| |
| configs += [ ":headless_defines_config" ] |
| } |
| |
| if (is_win) { |
| # Headless library with only browser dependencies. This is used when no child |
| # dependencies are needed in the target (e.g. chrome:main_dll). |
| static_library("headless_shell_browser_lib") { |
| sources = [ |
| "app/headless_shell.cc", |
| "app/headless_shell.h", |
| "app/headless_shell_switches.h", |
| "lib/browser/headless_content_browser_client.cc", |
| "lib/browser/headless_content_browser_client.h", |
| "public/headless_shell.h", |
| ] |
| deps = [ |
| ":headless_non_renderer", |
| "//build:branding_buildflags", |
| "//components/crash/core/app:run_as_crashpad_handler", |
| "//components/embedder_support", |
| "//content:sandbox_helper_win", |
| "//content/public/app", |
| "//content/public/browser", |
| "//content/public/common", |
| "//net", |
| "//printing/buildflags", |
| "//sandbox", |
| ] |
| if (headless_use_policy) { |
| deps += [ "//components/policy/content" ] |
| } |
| configs += [ ":headless_defines_config" ] |
| } |
| } |
| |
| # Headless library with all included dependencies. Use this library unless you |
| # have browser/child dependencies restrictions. |
| static_library("headless_shell_lib") { |
| sources = [ |
| "app/headless_shell.cc", |
| "app/headless_shell.h", |
| "app/headless_shell_switches.h", |
| "public/headless_shell.h", |
| ] |
| defines = [] |
| |
| if (!is_component_build) { |
| sources += [ |
| "lib/browser/headless_content_browser_client.cc", |
| "lib/browser/headless_content_browser_client.h", |
| "lib/utility/headless_content_utility_client.cc", |
| "lib/utility/headless_content_utility_client.h", |
| ] |
| } |
| |
| deps = [ |
| ":headless_renderer", |
| "//build:branding_buildflags", |
| "//components/embedder_support", |
| "//components/security_state/content", |
| "//content", |
| "//content/public/app", |
| "//content/public/browser", |
| "//content/public/child:child", |
| "//content/public/common", |
| "//content/public/utility", |
| "//printing/buildflags", |
| ] |
| |
| public_deps = [ |
| "//base", |
| "//third_party/inspector_protocol:crdtp", |
| ] |
| |
| if (!is_component_build) { |
| public_deps += [ ":headless_non_renderer" ] |
| } |
| |
| if (!is_fuchsia) { |
| deps += [ "//components/crash/content/browser" ] |
| } |
| |
| if (enable_basic_printing) { |
| deps += [ |
| "//components/printing/browser", |
| "//components/printing/renderer", |
| "//components/services/print_compositor", |
| "//components/services/print_compositor/public/mojom", |
| ] |
| } |
| |
| if (headless_use_policy && !is_component_build) { |
| deps += [ "//components/policy/content" ] |
| } |
| |
| if (is_win) { |
| defines = [ "HEADLESS_USE_CRASHPAD" ] |
| |
| deps += [ |
| "//components/crash/core/app:run_as_crashpad_handler", |
| "//content:sandbox_helper_win", |
| "//sandbox", |
| ] |
| } |
| |
| if (is_mac) { |
| deps += [ "//components/os_crypt" ] |
| } |
| |
| if (is_win || (is_posix && !is_mac)) { |
| deps += [ "//components/crash/core/app" ] |
| } |
| |
| configs += [ ":headless_defines_config" ] |
| } |
| |
| if (is_fuchsia) { |
| cr_fuchsia_package("headless_shell_pkg") { |
| binary = ":headless_shell" |
| package_name = "headless_shell" |
| manifest = "//build/config/fuchsia/test/minimum_capabilities.test-cmx" |
| } |
| |
| fuchsia_package_installer("headless_shell_fuchsia") { |
| package = ":headless_shell_pkg" |
| package_name = "headless_shell" |
| } |
| } |
| |
| executable("headless_shell") { |
| sources = [ "app/headless_shell_main.cc" ] |
| defines = [] |
| |
| deps = [ ":headless_shell_lib" ] |
| |
| if (!headless_use_embedded_resources) { |
| data = [ |
| "$root_out_dir/headless_lib_data.pak", |
| "$root_out_dir/headless_lib_strings.pak", |
| ] |
| } |
| |
| if (is_win) { |
| deps += [ |
| "//build/win:default_exe_manifest", |
| "//content/public/app", |
| ] |
| } |
| |
| if (is_mac) { |
| deps += [ "//sandbox/mac:seatbelt" ] |
| } |
| |
| configs += [ ":headless_defines_config" ] |
| } |
| |
| process_version("version_header") { |
| template_file = "public/version.h.in" |
| sources = [ |
| "//chrome/VERSION", |
| lastchange_file, |
| ] |
| output = "$target_gen_dir/public/version.h" |
| } |
| |
| executable("headless_example") { |
| sources = [ "app/headless_example.cc" ] |
| defines = [] |
| |
| deps = [ |
| ":headless_shell_lib", |
| "//content", |
| "//sandbox", |
| "//skia", # we need this to override font render hinting in headless build |
| "//ui/gfx/geometry", |
| ] |
| |
| if (is_win) { |
| deps += [ "//content/public/app" ] |
| } |
| |
| configs += [ ":headless_defines_config" ] |
| } |