# 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/chrome_build.gni")
import("//build/util/process_version.gni")
import("//headless/headless.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//printing/features/features.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")

config("headless_implementation") {
  defines = [ "HEADLESS_IMPLEMENTATION" ]

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

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

repack("pak") {
  sources = [
    "$root_gen_dir/blink/public/resources/blink_image_resources_100_percent.pak",
    "$root_gen_dir/blink/public/resources/blink_resources.pak",
    "$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/net/net_resources.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",
    "//net:net_resources",
    "//third_party/WebKit/public:image_resources",
    "//third_party/WebKit/public:resources",
    "//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"),
    "--gendir",
    rebase_path("$root_gen_dir"),
    "--header_file",
    "headless/embedded_resource_pak.h",
    "--source_file",
    "headless/embedded_resource_pak.cc",
    "--namespace",
    "headless",
    "--variable_name",
    "kHeadlessResourcePak",
  ]

  deps = [
    ":pak",
  ]
}

mojom("tab_socket") {
  sources = [
    "lib/tab_socket.mojom",
  ]

  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
  use_once_callback = false
}

grit("resources") {
  source = "lib/resources/headless_lib_resources.grd"
  outputs = [
    "grit/headless_lib_resources.h",
    "$root_gen_dir/headless/headless_lib_resources.pak",
  ]
  grit_flags = [
    "-E",
    "mojom_root=" + rebase_path(root_gen_dir),
  ]
  deps = [
    ":tab_socket__generator",
  ]
}

devtools_domains = [
  "accessibility",
  "animation",
  "application_cache",
  "browser",
  "cache_storage",
  "console",
  "css",
  "database",
  "debugger",
  "device_orientation",
  "dom",
  "dom_debugger",
  "dom_storage",
  "emulation",
  "heap_profiler",
  "indexeddb",
  "input",
  "inspector",
  "io",
  "layer_tree",
  "log",
  "memory",
  "network",
  "page",
  "profiler",
  "runtime",
  "security",
  "service_worker",
  "target",
  "tracing",
]

generated_devtools_api = []
foreach(domain, devtools_domains) {
  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/WebKit/Source/core/inspector:protocol_version",
  ]
  inputs = [
    "$root_gen_dir/blink/core/inspector/protocol.json",
  ]

  outputs = generated_devtools_api

  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) + "/public",
  ]
}

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

    deps = [
      "//build/linux:fontconfig",
      "//third_party/freetype",
    ]
  }
}

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_client_impl.cc",
    "lib/browser/headless_devtools_client_impl.h",
    "lib/browser/headless_devtools_manager_delegate.cc",
    "lib/browser/headless_devtools_manager_delegate.h",
    "lib/browser/headless_net_log.cc",
    "lib/browser/headless_net_log.h",
    "lib/browser/headless_network_delegate.cc",
    "lib/browser/headless_network_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_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_tab_socket_impl.cc",
    "lib/browser/headless_tab_socket_impl.h",
    "lib/browser/headless_url_request_context_getter.cc",
    "lib/browser/headless_url_request_context_getter.h",
    "lib/browser/headless_window_tree_host.h",
    "lib/headless_content_client.cc",
    "lib/headless_content_client.h",
    "lib/headless_crash_reporter_client.cc",
    "lib/headless_crash_reporter_client.h",
    "public/headless_browser.cc",
    "public/headless_browser.h",
    "public/headless_browser_context.h",
    "public/headless_devtools_client.h",
    "public/headless_devtools_target.h",
    "public/headless_export.h",
    "public/headless_web_contents.h",
    "public/internal/message_dispatcher.h",
    "public/internal/value_conversions.h",
    "public/util/black_hole_protocol_handler.cc",
    "public/util/black_hole_protocol_handler.h",
    "public/util/deterministic_dispatcher.cc",
    "public/util/deterministic_dispatcher.h",
    "public/util/deterministic_http_protocol_handler.cc",
    "public/util/deterministic_http_protocol_handler.h",
    "public/util/dom_tree_extractor.cc",
    "public/util/dom_tree_extractor.h",
    "public/util/error_reporter.cc",
    "public/util/error_reporter.h",
    "public/util/expedited_dispatcher.cc",
    "public/util/expedited_dispatcher.h",
    "public/util/flat_dom_tree_extractor.cc",
    "public/util/flat_dom_tree_extractor.h",
    "public/util/generic_url_request_job.cc",
    "public/util/generic_url_request_job.h",
    "public/util/http_url_fetcher.cc",
    "public/util/http_url_fetcher.h",
    "public/util/in_memory_protocol_handler.cc",
    "public/util/in_memory_protocol_handler.h",
    "public/util/in_memory_request_job.cc",
    "public/util/in_memory_request_job.h",
    "public/util/managed_dispatch_url_request_job.cc",
    "public/util/managed_dispatch_url_request_job.h",
    "public/util/navigation_request.h",
    "public/util/testing/generic_url_request_mocks.cc",
    "public/util/testing/generic_url_request_mocks.h",
    "public/util/url_fetcher.cc",
    "public/util/url_fetcher.h",
    "public/util/url_request_dispatcher.h",
    "public/util/user_agent.cc",
    "public/util/user_agent.h",
  ]

  sources += generated_devtools_api

  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",
      "lib/renderer/headless_print_web_view_helper_delegate.cc",
      "lib/renderer/headless_print_web_view_helper_delegate.h",
    ]
  }

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

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

  deps = [
    ":gen_devtools_client_api",
    ":tab_socket",
    ":version_header",
    "//components/security_state/core",
    "//content/public/common",
    "//content/public/common:service_names",
    "//services/service_manager/public/cpp",
    "//third_party/mesa:osmesa",
    "//ui/base",
    "//ui/compositor",
    "//ui/display",
    "//ui/events/devices",
    "//url",
  ]

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

    deps += [
      "//components/crash/content/browser",
      "//components/security_state/content",
      "//third_party/WebKit/public:blink_headers",
    ]

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

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

  if (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) {
    deps += [ ":headless_fontconfig_utils" ]
  }

  configs += [ ":headless_implementation" ]
}

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

    deps = [
      ":headless",
      "//third_party/WebKit/public:blink_headers",
      "//ui/base",
    ]
    if (enable_basic_printing) {
      deps += [ "//components/printing/renderer" ]
    }

    configs += [ ":headless_implementation" ]
  }
} 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/deterministic_dispatcher_test.cc",
    "public/util/error_reporter_unittest.cc",
    "public/util/expedited_dispatcher_test.cc",
    "public/util/generic_url_request_job_test.cc",
    "public/util/testing/fake_managed_dispatch_url_request_job.cc",
    "public/util/testing/fake_managed_dispatch_url_request_job.h",
  ]

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

  deps = [
    ":headless_renderer",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//components/crash/content/browser",
    "//components/security_state/content",
    "//content/public/app:both",
    "//content/public/child:child",
    "//content/public/common",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_basic_printing) {
    sources += [ "lib/browser/headless_printing_unittest.cc" ]
    deps += [ "//components/printing/browser" ]
  }
}

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

    if (is_component_build) {
      sources += [ "$root_out_dir/libbase.dylib" ]
    }

    deps = [
      "//base",
      "//third_party/crashpad/crashpad/handler:crashpad_handler",
    ]

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

test("headless_browsertests") {
  sources = [
    "lib/frame_id_browsertest.cc",
    "lib/headless_browser_browsertest.cc",
    "lib/headless_browser_context_browsertest.cc",
    "lib/headless_devtools_client_browsertest.cc",
    "lib/headless_web_contents_browsertest.cc",
    "public/util/dom_tree_extractor_browsertest.cc",
    "public/util/flat_dom_tree_extractor_browsertest.cc",
    "test/headless_browser_test.cc",
    "test/headless_browser_test.h",
    "test/headless_test_launcher.cc",
    "test/test_protocol_handler.cc",
    "test/test_protocol_handler.h",
    "test/test_url_request_job.cc",
    "test/test_url_request_job.h",
  ]

  data = [
    "$root_out_dir/headless_lib.pak",
    "//net/tools/testserver/",
    "//third_party/pyftpdlib/",
    "//third_party/pywebsocket/",
    "//third_party/skia/",
    "//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",
    ]
  }

  deps = [
    ":headless_renderer",
    "//base",
    "//components/crash/content/browser",
    "//components/security_state/content",
    "//content/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_basic_printing) {
    deps += [
      "//components/printing/browser",
      "//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_switches.cc",
      "app/headless_shell_switches.h",
      "app/headless_shell_win.cc",
      "app/shell_navigation_request.cc",
      "app/shell_navigation_request.h",
      "lib/browser/headless_content_browser_client.cc",
      "lib/browser/headless_content_browser_client.h",
      "public/headless_shell.h",
    ]
    deps = [
      ":headless",
      "//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 += [ "//third_party/WebKit/public:blink_headers" ]
    }

    configs += [ ":headless_implementation" ]
  }

  # 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_switches.cc",
      "app/headless_shell_switches.h",
      "app/headless_shell_win.cc",
      "app/shell_navigation_request.cc",
      "app/shell_navigation_request.h",
      "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",
      ]
      deps += [ "//third_party/WebKit/public:blink_headers" ]
    }

    configs += [ ":headless_implementation" ]
  }
}

# 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.cc",
    "app/headless_shell_switches.h",
    "app/shell_navigation_request.cc",
    "app/shell_navigation_request.h",
    "lib/browser/headless_content_browser_client.cc",
    "lib/browser/headless_content_browser_client.h",
    "public/headless_shell.h",
  ]

  deps = [
    ":headless_renderer",
    "//components/crash/content/browser",
    "//components/security_state/content",
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/child:child",
    "//content/public/common",
  ]

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

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

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

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

  deps = [
    ":headless_shell_lib",
  ]

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

process_version("version_header") {
  template_file = "public/version.h.in"
  sources = [
    "//build/util/LASTCHANGE",
    "//chrome/VERSION",
  ]
  output = "$target_gen_dir/public/version.h"
}

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

  deps = [
    ":headless_shell_lib",
  ]
}
