# 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/host.gni")
import("//build/packages/prebuilt_package.gni")
import("//build/packages/prebuilt_test_manifest.gni")
import("//build/testing/host_test_data.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 = [
    ":tzdata_for_web_engine",
    ":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 = [
    ":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_engine") {
  for_pkg = "web_engine"
}

if (is_host) {
  copy("chromedriver") {
    outputs = [ "$host_tools_dir/chromedriver" ]
    if (use_chromium_canary) {
      sources = [
        "//prebuilt/third_party/chromedriver_latest/linux-x64/chromedriver",
      ]
    } else {
      sources = [ "//prebuilt/third_party/chromedriver/linux-x64/chromedriver" ]
    }
  }
} else {
  # 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",
      ":tzdata_for_media_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
    log_settings = {
      max_severity = "ERROR"
    }

    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"
    testonly = true
  }

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

  icu_tzdata_config_data("tzdata_for_media_unittests") {
    for_pkg = "media_unittests"
    testonly = true
  }

  group("tests") {
    testonly = true

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