# 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("//pdf/features.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/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",
  ]

  deps = [
    "//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" ]
}

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" ]
  use_embedder_types = true

  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/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.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 = [
    ":headless_shared_sources",
    "//base",
    "//net",
  ]

  data_deps = []
  data = []
  defines = []

  if (enable_basic_printing) {
    public_deps += [ "//skia" ]
  }

  deps = [
    ":backend_cdp_bindings",
    ":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",
      ]
    }

    public_deps = [ ":headless_shared_sources" ]

    deps = [
      "//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") {
    public_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_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(crbug.com/1318548): Enable on Fuchsia when no longer flakily timeout.
  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 = []

  if (is_fuchsia) {
    use_cfv2 = false
    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",
    "//pdf:buildflags",
    "//printing/buildflags",
    "//services/device/public/cpp:test_support",
    "//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",
      "//printing",
    ]

    if (enable_pdf) {
      deps += [ "//pdf" ]
    }
  }

  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 = [
    "//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 = [
    ":headless_renderer",
    "//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" ]
}

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" ]
}
