# 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/jumbo.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")

# For code inside the build component "headless".
config("inside_headless_component") {
  defines = [ "HEADLESS_IMPLEMENTATION" ]
}

group("headless_lib") {
  deps = [
    ":headless",
  ]
}

repack("pak") {
  sources = [
    "$root_gen_dir/components/components_resources.pak",
    "$root_gen_dir/components/strings/components_strings_en-US.pak",
    "$root_gen_dir/content/app/resources/content_resources_100_percent.pak",
    "$root_gen_dir/content/app/strings/content_strings_en-US.pak",
    "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
    "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
    "$root_gen_dir/content/content_resources.pak",
    "$root_gen_dir/headless/headless_lib_resources.pak",
    "$root_gen_dir/mojo/public/js/mojo_bindings_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_resources.pak",
    "$root_gen_dir/ui/strings/app_locale_settings_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 = [
    ":resources",
    "//components/resources:components_resources",
    "//components/strings",
    "//content:resources",
    "//content/app/resources",
    "//content/app/strings",
    "//content/browser/devtools:resources",
    "//content/browser/tracing:resources",
    "//mojo/public/js:resources",
    "//net:net_resources",
    "//third_party/blink/public:resources",
    "//third_party/blink/public:scaled_resources_100_percent",
    "//ui/resources",
    "//ui/strings",
  ]

  output = "$root_out_dir/headless_lib.pak"
}

action("embed_resources") {
  # TODO(altimin): Consider zipping file here, it can reduce size up to 80%.
  script = "lib/embed_data.py"

  inputs = [
    "$root_out_dir/headless_lib.pak",
  ]

  outputs = [
    "$root_gen_dir/headless/embedded_resource_pak.cc",
    "$root_gen_dir/headless/embedded_resource_pak.h",
  ]

  args = [
    "--data_file",
    rebase_path("$root_out_dir/headless_lib.pak", root_build_dir),
    "--gendir",
    rebase_path("$root_gen_dir", root_build_dir),
    "--header_file",
    "headless/embedded_resource_pak.h",
    "--source_file",
    "headless/embedded_resource_pak.cc",
    "--namespace",
    "headless",
    "--variable_name",
    "kHeadlessResourcePak",
  ]

  deps = [
    ":pak",
  ]
}

grit("resources") {
  source = "lib/resources/headless_lib_resources.grd"
  outputs = [
    "grit/headless_lib_resources.h",
    "$root_gen_dir/headless/headless_lib_resources.pak",
  ]
  source_is_generated = true
}

devtools_domains = [
  "accessibility",
  "animation",
  "application_cache",
  "browser",
  "cache_storage",
  "console",
  "css",
  "database",
  "debugger",
  "device_orientation",
  "dom",
  "dom_debugger",
  "dom_snapshot",
  "dom_storage",
  "emulation",
  "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 = []
generated_devtools_api_js = []
generated_devtools_api_js_externs = []
foreach(domain, devtools_domains) {
  generated_devtools_api_js +=
      [ "$target_gen_dir/public/devtools_js/" + domain + ".js" ]
  generated_devtools_api_js_externs +=
      [ "$target_gen_dir/public/devtools_js/externs/externs_" + domain + ".js" ]
  generated_devtools_api += [
    "$target_gen_dir/public/devtools/domains/" + domain + ".cc",
    "$target_gen_dir/public/devtools/domains/" + domain + ".h",
    "$target_gen_dir/public/devtools/domains/types_" + domain + ".h",
    "$target_gen_dir/public/devtools/domains/types_" + domain + ".cc",
    "$target_gen_dir/public/devtools/internal/type_conversions_" + domain +
        ".h",
    "$target_gen_dir/public/devtools/internal/" +
        "types_forward_declarations_" + domain + ".h",
  ]
}

action("gen_devtools_client_api") {
  script = "lib/browser/devtools_api/client_api_generator.py"
  deps = [
    "//third_party/blink/renderer/core/inspector:protocol_version",
  ]
  inputs = [
    "$root_gen_dir/third_party/blink/renderer/core/inspector/protocol.json",
  ]

  outputs = generated_devtools_api + generated_devtools_api_js +
            generated_devtools_api_js_externs

  sources = [
    "lib/browser/devtools_api/domain_cc.template",
    "lib/browser/devtools_api/domain_externs_js.template",
    "lib/browser/devtools_api/domain_h.template",
    "lib/browser/devtools_api/domain_js.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",
  ]
}

js_library("js_devtools_bindings_lib") {
  sources = [ "lib/browser/devtools_api/devtools_connection.js" ] +
            generated_devtools_api_js
  deps = []
  extra_deps = [ ":gen_devtools_client_api" ]
}

if (headless_fontconfig_utils && !is_fuchsia) {
  static_library("headless_fontconfig_utils") {
    sources = [
      "public/util/fontconfig.cc",
      "public/util/fontconfig.h",
    ]

    deps = [
      "//build/config/freetype",
      "//third_party/fontconfig",
    ]

    configs += [ ":inside_headless_component" ]
  }
}

inspector_protocol_generate("protocol_sources") {
  visibility = [ "//headless" ]
  deps = [
    "//third_party/blink/renderer/core/inspector:protocol_version",
  ]
  _blink_protocol_path = rebase_path(
          "$root_gen_dir/third_party/blink/renderer/core/inspector/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/renderer/core/inspector/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/dp_browser.cc",
    "lib/browser/protocol/dp_browser.h",
    "lib/browser/protocol/dp_headless_experimental.cc",
    "lib/browser/protocol/dp_headless_experimental.h",
    "lib/browser/protocol/dp_page.cc",
    "lib/browser/protocol/dp_page.h",
    "lib/browser/protocol/dp_target.cc",
    "lib/browser/protocol/dp_target.h",
    "lib/browser/protocol/protocol.cc",
    "lib/browser/protocol/protocol.h",
  ]
}

jumbo_component("headless") {
  sources = [
    "app/headless_shell_switches.cc",
    "app/headless_shell_switches.h",
    "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_impl_mac.mm",
    "lib/browser/headless_browser_main_parts.cc",
    "lib/browser/headless_browser_main_parts.h",
    "lib/browser/headless_browser_main_parts_mac.mm",
    "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_resource_dispatcher_host_delegate.cc",
    "lib/browser/headless_resource_dispatcher_host_delegate.h",
    "lib/browser/headless_shell_application_mac.h",
    "lib/browser/headless_shell_application_mac.mm",
    "lib/browser/headless_window_tree_host.h",
    "lib/browser/protocol/browser_handler.cc",
    "lib/browser/protocol/browser_handler.h",
    "lib/browser/protocol/domain_handler.cc",
    "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",
    "lib/headless_content_client.cc",
    "lib/headless_content_client.h",
    "public/headless_browser.cc",
    "public/headless_browser.h",
    "public/headless_browser_context.h",
    "public/headless_devtools_channel.h",
    "public/headless_devtools_client.h",
    "public/headless_devtools_target.h",
    "public/headless_export.h",
    "public/headless_web_contents.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",
  ]

  if (!is_fuchsia) {
    sources += [
      "lib/headless_crash_reporter_client.cc",
      "lib/headless_crash_reporter_client.h",
    ]
  }

  sources += generated_devtools_api
  sources += get_target_outputs(":protocol_sources")

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

  if (enable_basic_printing) {
    sources += [
      "lib/browser/headless_print_manager.cc",
      "lib/browser/headless_print_manager.h",
    ]
  }

  public_deps = [
    "//base",
    "//net",
  ]

  data_deps = []
  data = []

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

  deps = [
    ":gen_devtools_client_api",
    ":protocol_sources",
    ":version_header",
    "//base:base_static",
    "//components/cookie_config",
    "//components/security_state/core",
    "//content/public/common",
    "//content/public/common:service_names",
    "//services/service_manager/public/cpp",
    "//ui/base",
    "//ui/base/clipboard",
    "//ui/compositor",
    "//ui/display",
    "//ui/events/devices",
    "//url",
  ]

  if (is_linux && !is_chromeos) {
    deps += [ "//components/os_crypt" ]
  }

  if (enable_basic_printing) {
    deps += [ "//components/printing/browser" ]
  }

  if (is_component_build) {
    sources += [
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "lib/browser/headless_overlay_manifests.cc",
      "lib/browser/headless_overlay_manifests.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/headless_content_main_delegate_mac.mm",
      "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 (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:crash_key",
      "//components/security_state/content",
      "//components/services/pdf_compositor/public/cpp:manifest",
      "//components/services/pdf_compositor/public/interfaces",
      "//gin",
      "//third_party/blink/public:blink",
      "//third_party/blink/public:blink_headers",
      "//ui/gl",
      "//v8",
    ]

    if (!is_fuchsia) {
      deps += [ "//components/crash/content/browser" ]
    }
    if (is_win) {
      deps += [ "//components/crash/content/app:crash_export_thunks" ]
    }

    if (enable_basic_printing) {
      deps += [
        "//components/printing/browser",
        "//components/printing/renderer",
        "//components/services/pdf_compositor/public/cpp:factory",
        "//components/services/pdf_compositor/public/interfaces",
      ]
    }
  }

  # 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) || !is_win) {
    if (v8_use_external_startup_data) {
      sources += [ "$root_out_dir/natives_blob.bin" ]
      public_deps += [ "//v8" ]
      if (use_v8_context_snapshot) {
        data += [ "$root_out_dir/v8_context_snapshot.bin" ]
        data_deps += [ "//tools/v8_context_snapshot" ]
      } else {
        data += [ "$root_out_dir/snapshot_blob.bin" ]
      }
    }
  }

  if (is_mac) {
    deps += [ ":mac_helpers" ]
  } else {
    deps += [ "//ui/aura" ]
  }

  if (headless_use_embedded_resources) {
    defines = [ "HEADLESS_USE_EMBEDDED_RESOURCES" ]
    deps += [ ":embed_resources" ]
    sources += [
      "$root_gen_dir/headless/embedded_resource_pak.cc",
      "$root_gen_dir/headless/embedded_resource_pak.h",
    ]
  } else {
    deps += [ ":pak" ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (headless_fontconfig_utils && !is_fuchsia) {
    deps += [ ":headless_fontconfig_utils" ]
  }

  configs += [ ":inside_headless_component" ]
}

# 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") {
    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/headless_content_main_delegate_mac.mm",
      "lib/renderer/headless_content_renderer_client.cc",
      "lib/renderer/headless_content_renderer_client.h",
    ]

    if (headless_use_embedded_resources) {
      defines = [ "HEADLESS_USE_EMBEDDED_RESOURCES" ]
    }

    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",
      "//components/crash/core/common:crash_key",
      "//third_party/blink/public:blink_headers",
      "//ui/base",
      "//v8",
    ]
    if (enable_basic_printing) {
      deps += [ "//components/printing/renderer" ]
    }
  }
} else {
  # For component builds all dependencies are already included in the headless
  # component.
  group("headless_renderer") {
    deps = [
      ":headless",
    ]
  }
}

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

  if (!is_component_build) {
    sources += [
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "lib/browser/headless_overlay_manifests.cc",
      "lib/browser/headless_overlay_manifests.h",
      "lib/utility/headless_content_utility_client.cc",
      "lib/utility/headless_content_utility_client.h",
    ]
  }

  deps = [
    ":headless_renderer",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//components/security_state/content",
    "//components/services/pdf_compositor/public/cpp:manifest",
    "//components/services/pdf_compositor/public/interfaces",
    "//content/public/app:both",
    "//content/public/child:child",
    "//content/public/common",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (!is_fuchsia) {
    deps += [ "//components/crash/content/browser" ]
  }

  if (is_win) {
    deps += [ "//components/crash/content/app:crash_export_thunks" ]
  }

  if (enable_basic_printing) {
    sources += [ "lib/browser/headless_printing_unittest.cc" ]
    deps += [
      "//components/printing/browser",
      "//components/services/pdf_compositor/public/cpp:factory",
      "//third_party/blink/public:blink",
    ]
  }
}

if (is_mac) {
  copy("mac_helpers") {
    sources = [
      "$root_out_dir/chrome_crashpad_handler",
    ]

    deps = [
      "//components/crash/content/app:chrome_crashpad_handler",
    ]

    outputs = [
      "$root_out_dir/Helpers/{{source_file_part}}",
    ]
  }
}

# The js_binary rule doesn't currently work on windows. Apparently there are
# problems on mac too where java isn't necessarily installed.
if (is_linux) {
  js_binary("js_devtools_bindings_test") {
    sources = [
      "test/bindings_test.js",
    ]
    deps = [
      ":js_devtools_bindings_lib",
    ]
    externs_list = [ "lib/tab_socket_externs.js" ]
    outputs = [
      "$target_gen_dir/devtools_bindings_test.js",
    ]
    config_files = []
    closure_flags = [
      "jscomp_error=checkTypes",
      "dependency_mode=STRICT",

      # Currently the bindings do not support property renaming so we can't use
      # ADVANCED_OPTIMIZATIONS here.  We could add support via either moving all
      # the types to externs, or via applying the same renaming to the json
      # dictionaries sent between C++ and JS.  The closure compiler can produce
      # files which contain those mappings with the appropriate flag.
      "compilation_level=SIMPLE",
      "language_out=ES5_STRICT",
      "entry_point=chromium.BindingsTest",
    ]
  }

  grit("headless_browsertest_resources_grit") {
    source = "headless_browsertest_resources.grd"
    outputs = [
      "grit/headless_browsertest_resources.h",
      "$root_gen_dir/headless/headless_browsertest_resources.pak",
    ]
    grit_flags = [
      "-E",
      "gen_root=" + rebase_path(root_gen_dir, root_build_dir),
    ]
    deps = [
      ":js_devtools_bindings_test",
    ]
    resource_ids = "lib/headless_browsertest_resource_ids"
  }

  repack("headless_browser_tests_pak") {
    sources = [
      "$root_gen_dir/headless/headless_browsertest_resources.pak",
    ]
    output = "$root_out_dir/headless_browser_tests.pak"
    deps = [
      ":headless_browsertest_resources_grit",
    ]
  }
}

test("headless_browsertests") {
  configs += [ "//net:net_test_config" ]
  sources = [
    "lib/headless_browser_browsertest.cc",
    "lib/headless_browser_context_browsertest.cc",
    "lib/headless_devtools_client_browsertest.cc",
    "lib/headless_web_contents_browsertest.cc",
    "test/headless_browser_test.cc",
    "test/headless_browser_test.h",
    "test/headless_client_browsertest.cc",
    "test/headless_protocol_browsertest.cc",
    "test/headless_test_launcher.cc",
    "test/test_network_interceptor.cc",
    "test/test_network_interceptor.h",
  ]

  data = [
    "lib/dom_tree_extraction_expected_nodes.txt",
    "lib/dom_tree_extraction_expected_styles.txt",
    "$root_out_dir/headless_lib.pak",
    "//net/tools/testserver/",
    "//third_party/blink/web_tests/http/tests/inspector-protocol/",
    "//third_party/pyftpdlib/",
    "//third_party/pywebsocket/",
    "//third_party/tlslite/",
    "test/data/",
  ]

  if (is_mac) {
    data_deps = [
      ":mac_helpers",
    ]
  }

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  if (!is_component_build) {
    sources += [
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "lib/browser/headless_overlay_manifests.cc",
      "lib/browser/headless_overlay_manifests.h",
      "lib/utility/headless_content_utility_client.cc",
      "lib/utility/headless_content_utility_client.h",
    ]
  }

  deps = [
    ":headless_renderer",
    "//base",
    "//components/security_state/content",
    "//components/services/pdf_compositor/public/cpp:manifest",
    "//components/services/pdf_compositor/public/interfaces",
    "//content/test:test_support",
    "//services/network/public/mojom",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/base/clipboard",
  ]

  if (!is_fuchsia) {
    deps += [
      "//components/crash/content/app:test_support",
      "//components/crash/content/browser",
    ]
  }

  if (is_linux) {
    # Only include this if we built the js_binary
    data += [ "$root_out_dir/headless_browser_tests.pak" ]
    sources += [ "test/headless_js_bindings_browsertest.cc" ]
    deps += [
      ":headless_browser_tests_pak",
      "//ui/gfx:geometry_skia",
      "//ui/gfx/codec",
      "//ui/gfx/geometry",
    ]
  }

  if (enable_basic_printing) {
    deps += [
      "//components/printing/browser",
      "//components/services/pdf_compositor/public/cpp:factory",
      "//pdf",
    ]
  }
}

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_win.cc",
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "lib/browser/headless_overlay_manifests.cc",
      "lib/browser/headless_overlay_manifests.h",
      "public/headless_shell.h",
    ]
    deps = [
      ":headless",
      "//components/services/pdf_compositor/public/cpp:manifest",
      "//components/services/pdf_compositor/public/interfaces",
      "//content:sandbox_helper_win",
      "//content/public/browser",
      "//content/public/common",
      "//net",
      "//sandbox",
    ]

    if (is_multi_dll_chrome) {
      defines = [ "CHROME_MULTIPLE_DLL_BROWSER" ]
      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/headless_content_main_delegate_win.cc",
      ]
      deps += [
        "//components/crash/core/common:crash_key",
        "//third_party/blink/public:blink_headers",
      ]
    }
  }

  # Headless library with child specific dependencies (e.g., renderer). This
  # is used when no browser depencendies are needed (e.g. chrome:child_dll).
  static_library("headless_shell_child_lib") {
    sources = [
      "app/headless_shell.cc",
      "app/headless_shell.h",
      "app/headless_shell_win.cc",
      "public/headless_shell.h",
    ]
    deps = [
      ":headless_renderer",
      "//content/public/child:child",
      "//net",
      "//ui/base",
    ]

    if (is_multi_dll_chrome) {
      defines = [ "CHROME_MULTIPLE_DLL_CHILD" ]
      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/headless_content_main_delegate_win.cc",
        "lib/utility/headless_content_utility_client.cc",
        "lib/utility/headless_content_utility_client.h",
      ]
      deps += [
        "//components/crash/core/common:crash_key",
        "//third_party/blink/public:blink_headers",
      ]
    }
  }
}

# Headless library with all included dependencies. Use this library unless you
# have browser/child dependencies restrictions.
jumbo_static_library("headless_shell_lib") {
  sources = [
    "app/headless_shell.cc",
    "app/headless_shell.h",
    "public/headless_shell.h",
  ]

  if (!is_component_build) {
    sources += [
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "lib/browser/headless_overlay_manifests.cc",
      "lib/browser/headless_overlay_manifests.h",
      "lib/utility/headless_content_utility_client.cc",
      "lib/utility/headless_content_utility_client.h",
    ]
  }

  deps = [
    ":headless_renderer",
    "//components/os_crypt",
    "//components/security_state/content",
    "//components/services/pdf_compositor/public/cpp:manifest",
    "//components/services/pdf_compositor/public/interfaces",
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/child:child",
    "//content/public/common",
  ]

  public_deps = [
    "//base",
  ]

  if (!is_fuchsia) {
    deps += [ "//components/crash/content/browser" ]
  }

  if (enable_basic_printing) {
    deps += [
      "//components/printing/browser",
      "//components/printing/renderer",
      "//components/services/pdf_compositor/public/cpp:factory",
    ]
  }

  if (is_win) {
    defines = [ "HEADLESS_USE_CRASHPAD" ]

    deps += [
      "//components/crash/content/app:crash_export_thunks",
      "//components/crash/content/app:run_as_crashpad_handler",
      "//content:sandbox_helper_win",
      "//sandbox",
    ]
  }
}

if (is_fuchsia) {
  fuchsia_package("headless_shell_pkg") {
    binary = ":headless_shell"
    package_name_override = "headless_shell"
    sandbox_policy = "//build/config/fuchsia/testing_sandbox_policy"
  }

  fuchsia_package_runner("headless_shell_fuchsia") {
    package = ":headless_shell_pkg"
    package_name_override = "headless_shell"
  }
}

executable("headless_shell") {
  sources = [
    "app/headless_shell_main.cc",
  ]

  deps = [
    ":headless_shell_lib",
  ]

  if (!headless_use_embedded_resources) {
    data = [
      "$root_out_dir/headless_lib.pak",
    ]
  }

  if (is_win) {
    deps += [ "//build/win:default_exe_manifest" ]
  }

  if (is_mac) {
    deps += [ "//sandbox/mac:seatbelt" ]
  }
}

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

  deps = [
    ":headless_shell_lib",
    "//skia",  # we need this to override font render hinting in headless build
  ]
}
