# Copyright 2019 The Fuchsia 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.gni")
import("//build/packages/prebuilt_package.gni")
import("//build/packages/prebuilt_test_manifest.gni")
import("//src/lib/icu/tzdata/icu_tzdata_config_data.gni")

declare_args() {
  # Set to use the most recent canary version of prebuilt Chromium components
  # otherwise the most recently validated version is used.
  use_chromium_canary = false
}

# This target is provided for use by the //src:src target. Dependencies on
# Chromium-supplied packages should refer explicitly to the desired package.
group("chromium") {
  public_deps = [
    ":web_engine",
    ":web_runner",
  ]
}

group("web_engine") {
  deps = [
    ":web_engine_config",
    ":web_engine_pkg",
  ]
}

prebuilt_archive_base_path = "//prebuilt/third_party/chromium"
debug_archive_base_path = "//prebuilt/build_ids/" + target_cpu + "/chromium"

if (use_chromium_canary) {
  prebuilt_archive_base_path += "_latest"
  debug_archive_base_path += "_latest"
}

config_data("web_engine_config") {
  visibility = [ ":web_engine" ]

  for_pkg = "sysmgr"
  sources = [ rebase_path("config/web_context_provider.config") ]
}

prebuilt_package("web_engine_pkg") {
  visibility = [ ":web_engine" ]

  package_name = "web_engine"
  archive =
      prebuilt_archive_base_path + "/arch/" + target_cpu + "/web_engine.far"
  debug_archive = debug_archive_base_path + "/web_engine.symbols.tar.bz2"
}

group("web_runner") {
  deps = [
    ":tzdata_for_web_runner",
    ":web_runner_config",
    ":web_runner_pkg",
  ]
}

config_data("web_runner_config") {
  visibility = [ ":web_runner" ]
  for_pkg = "appmgr"
  sources = [ rebase_path("config/http_scheme_map.config") ]

  outputs = [ "scheme_map/http.config" ]
}

prebuilt_package("web_runner_pkg") {
  visibility = [ ":web_runner" ]

  package_name = "web_runner"
  archive =
      prebuilt_archive_base_path + "/arch/" + target_cpu + "/web_runner.far"
  debug_archive = debug_archive_base_path + "/web_runner.symbols.tar.bz2"
}

icu_tzdata_config_data("tzdata_for_web_runner") {
  for_pkg = "web_runner"
  data_version = "44"
}

# Prebuilt FAR tests
test_env = [ nuc_env ]

group("chromium_tests_group") {
  testonly = true
  deps = [
    ":chromium_tests",

    # The targets below have exactly the same contents, so will not be taking
    # extra storage in configurations that use them both.
    ":tzdata_for_base_unittests",
    ":tzdata_for_chromium_tests_base_unittests",
  ]
}

prebuilt_test_manifest("chromium_tests") {
  if (use_chromium_canary) {
    archive_dir = "//prebuilt/third_party/chromium_tests_latest/arch/x64"
  } else {
    archive_dir = "//prebuilt/third_party/chromium_tests/arch/x64"
  }
  environments = test_env

  disabled_tests = []

  # Tests temporarily disabled due to flake.
  # crbug.com/1060489
  disabled_tests += [
    {
      component_name = "cast_runner_integration_tests"
      package = "cast_runner_integration_tests"
    },
    {
      component_name = "web_runner_integration_tests"
      package = "web_runner_integration_tests"
    },
  ]

  # https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=47760
  disabled_tests += [
    {
      component_name = "base_unittests"
      package = "base_unittests"
    },
  ]
}

icu_tzdata_config_data("tzdata_for_chromium_tests_base_unittests") {
  for_pkg = "chromium_tests_base_unittests"
  data_version = "44"
  testonly = true
}

icu_tzdata_config_data("tzdata_for_base_unittests") {
  for_pkg = "base_unittests"
  data_version = "44"
  testonly = true
}

group("tests") {
  testonly = true

  deps = [
    ":chromium_tests_group",
    ":web_engine",
    ":web_runner",
    "web_runner_tests:tests",
    "//src/fonts:downstream_test_deps",
  ]
}
