# 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("//headless/headless.gni")
import("//build/util/process_version.gni")
import("//mojo/public/tools/bindings/mojom.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") {
  deps = [
    "//headless:headless_lib",
  ]
}

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

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",
  "application_cache",
  "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",
  "rendering",
  "runtime",
  "security",
  "service_worker",
  "target",
  "tracing",
]

generated_devtools_api = [
  "$target_gen_dir/public/domains/types.h",
  "$target_gen_dir/public/domains/type_conversions.h",
]
foreach(domain, devtools_domains) {
  generated_devtools_api += [
    "$target_gen_dir/public/domains/" + domain + ".h",
    "$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 = "//headless/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/deprecated_type_conversions_h.template",
    "lib/browser/devtools_api/deprecated_types_h.template",
    "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",
  ]
}

static_library("headless_lib") {
  sources = generated_devtools_api + [
              "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_mac.mm",
              "lib/browser/headless_browser_main_parts.cc",
              "lib/browser/headless_browser_main_parts.h",
              "lib/browser/headless_content_browser_client.cc",
              "lib/browser/headless_content_browser_client.h",
              "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_macros.h",
              "lib/browser/headless_network_delegate.cc",
              "lib/browser/headless_network_delegate.h",
              "lib/browser/headless_platform_event_source.cc",
              "lib/browser/headless_platform_event_source.h",
              "lib/browser/headless_shell_application_mac.mm",
              "lib/browser/headless_shell_application_mac.h",
              "lib/browser/headless_url_request_context_getter.cc",
              "lib/browser/headless_url_request_context_getter.h",
              "lib/browser/headless_web_contents_impl.cc",
              "lib/browser/headless_web_contents_impl.h",
              "lib/headless_crash_reporter_client.cc",
              "lib/headless_crash_reporter_client.h",
              "lib/headless_content_client.cc",
              "lib/headless_content_client.h",
              "lib/headless_content_main_delegate.cc",
              "lib/headless_content_main_delegate.h",
              "public/headless_browser.cc",
              "public/headless_browser.h",
              "public/headless_browser_context.h",
              "public/headless_devtools_client.h",
              "public/headless_devtools_host.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/generic_url_request_job.cc",
              "public/util/generic_url_request_job.h",
              "public/util/flat_dom_tree_extractor.cc",
              "public/util/flat_dom_tree_extractor.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",
            ]

  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",
      "lib/browser/headless_window_tree_host.h",
    ]
  }

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

  if (!is_mac) {
    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" ]
  }

  configs += [ ":headless_implementation" ]
}

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

  deps = [
    ":headless_lib",
    "//base/test:run_all_unittests",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

mojom("embedder_mojo_for_testing") {
  sources = [
    "lib/embedder_test.mojom",
  ]
}

grit("headless_browsertest_resources_grit") {
  source = "lib/headless_browsertest_resources.grd"
  outputs = [
    "grit/headless_browsertest_resources.h",
    "$root_gen_dir/headless/headless_browsertest_resources.pak",
  ]
  grit_flags = [
    "-E",
    "mojom_root=" + rebase_path(root_gen_dir),
  ]
  deps = [
    ":embedder_mojo_for_testing__generator",
  ]
  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") {
  sources = [
    "lib/embedder_mojo_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",
    "public/util/protocol_handler_request_id_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_browser_tests.pak",
    "$root_out_dir/headless_lib.pak",
    "//net/tools/testserver/",
    "//third_party/pyftpdlib/",
    "//third_party/pywebsocket/",
    "//third_party/skia/",
    "//third_party/tlslite/",
    "test/data/",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":embedder_mojo_for_testing",
    ":headless_browser_tests_pak",
    "//base",
    "//content/test:test_support",
    "//headless:headless_lib",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

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",
    "public/headless_shell.h",
  ]

  deps = [
    "//headless:headless_lib",
  ]

  configs += [ ":headless_implementation" ]
}

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

  deps = [
    "//headless:headless_shell_lib",
  ]

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

  configs += [ ":headless_implementation" ]
}

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