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