# Copyright 2014 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/buildflag_header.gni")
import("//build/config/chromeos/rules.gni")
import("//build/config/ui.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

assert(is_chromeos, "Non-Chrome-OS builds must not depend on //chromeos")

# Used by targets that compile into the implementation.
config("chromeos_implementation") {
  defines = [ "CHROMEOS_IMPLEMENTATION" ]
}

declare_args() {
  # Defines a buildflag for ease of iteration on the print team's
  # PpdProvider class.
  # TODO(crbug.com/1025995): remove this and all related scaffolding
  # once we're ready to cut over.
  is_printing_ppd_provider_v3 = true
}

component("chromeos") {
  configs += [
    ":chromeos_implementation",
    "//build/config/linux/nss:system_nss_no_ssl_config",
  ]
  if (is_chromeos_device) {
    configs += [ "//build/config/compiler:use_orderfile_for_hugepage" ]
  }
  public_deps = [
    "//chromeos/constants",
    "//components/policy/proto",
  ]
  deps = [
    ":chromeos_export",
    "//base",
    "//base:i18n",
    "//chromeos/dbus",
    "//chromeos/dbus/constants",
    "//google_apis",
    "//services/network/public/cpp:cpp",
    "//third_party/protobuf:protobuf_lite",
  ]
  sources = [
    "hugepage_text/hugepage_text.cc",
    "hugepage_text/hugepage_text.h",
    "policy/weekly_time/time_utils.cc",
    "policy/weekly_time/time_utils.h",
    "policy/weekly_time/weekly_time.cc",
    "policy/weekly_time/weekly_time.h",
    "policy/weekly_time/weekly_time_interval.cc",
    "policy/weekly_time/weekly_time_interval.h",
    "printing/cups_printer_status.cc",
    "printing/cups_printer_status.h",
    "printing/epson_driver_matching.cc",
    "printing/epson_driver_matching.h",
    "printing/ppd_cache.cc",
    "printing/ppd_cache.h",
    "printing/ppd_line_reader.cc",
    "printing/ppd_line_reader.h",
    "printing/ppd_provider.h",
    "printing/printer_configuration.cc",
    "printing/printer_configuration.h",
    "printing/printer_translator.cc",
    "printing/printer_translator.h",
    "printing/uri.cc",
    "printing/uri.h",
    "printing/uri_impl.cc",
    "printing/uri_impl.h",
    "printing/usb_printer_id.cc",
    "printing/usb_printer_id.h",
    "process_proxy/process_output_watcher.cc",
    "process_proxy/process_output_watcher.h",
    "process_proxy/process_proxy.cc",
    "process_proxy/process_proxy.h",
    "process_proxy/process_proxy_registry.cc",
    "process_proxy/process_proxy_registry.h",
    "scanning/scanner.cc",
    "scanning/scanner.h",
  ]
  if (current_cpu == "arm" || current_cpu == "x86") {
    defines = [ "BINDER_IPC_32BIT" ]
  }

  if (is_printing_ppd_provider_v3) {
    sources += [
      "printing/ppd_metadata_manager.cc",
      "printing/ppd_metadata_manager.h",
      "printing/ppd_metadata_parser.cc",
      "printing/ppd_metadata_parser.h",
      "printing/ppd_provider_v3.cc",
      "printing/ppd_provider_v3.h",
      "printing/printer_config_cache.cc",
      "printing/printer_config_cache.h",
    ]
  } else {
    sources += [ "printing/ppd_provider.cc" ]
  }
}

source_set("chromeos_export") {
  deps = [ "//base" ]
  sources = [ "chromeos_export.h" ]
}

# This must be a static library instead of a source set because some of the
# files pull in things with dependencies that aren't linked in all cases.
#
# TODO this should probably be changed such that it links in all cases and
# can be converted to a source set.
static_library("test_support") {
  testonly = true
  public_deps = [ ":test_support_source_set" ]
}

source_set("test_support_source_set") {
  testonly = true
  public_deps = [
    ":chromeos",
    ":test_utils",
  ]
  deps = [
    "//chromeos/attestation:test_support",
    "//chromeos/cryptohome:test_support",
    "//chromeos/dbus:test_support",
    "//chromeos/disks:test_support",
    "//chromeos/login/auth:test_support",
    "//chromeos/login/login_state:test_support",
    "//chromeos/network:test_support",
    "//chromeos/tpm:test_support",
    "//google_apis",
    "//net:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("test_utils") {
  deps = [ "//base" ]
  sources = [
    "test/chromeos_test_utils.cc",
    "test/chromeos_test_utils.h",
  ]
}

test("chromeos_unittests") {
  configs += [
    "//build/config/linux/dbus",
    "//build/config/linux/nss:system_nss_no_ssl_config",
  ]

  deps = [
    ":test_support",
    "//base/test:test_support",
    "//build:chromeos_buildflags",
    "//chromeos/attestation:unit_tests",
    "//chromeos/audio:unit_tests",
    "//chromeos/cryptohome:unit_tests",
    "//chromeos/dbus:test_support",
    "//chromeos/dbus:unit_tests",
    "//chromeos/dbus/services:unit_tests",
    "//chromeos/disks:unit_tests",
    "//chromeos/geolocation:unit_tests",
    "//chromeos/login/auth:unit_tests",
    "//chromeos/login/login_state:unit_tests",
    "//chromeos/login/session:unit_tests",
    "//chromeos/memory:unit_tests",
    "//chromeos/memory/userspace_swap:unit_tests",
    "//chromeos/network:test_support",
    "//chromeos/network:unit_tests",
    "//chromeos/services:unit_tests",
    "//chromeos/settings:unit_tests",
    "//chromeos/system:unit_tests",
    "//chromeos/timezone:unit_tests",
    "//chromeos/tpm:unit_tests",
    "//components/onc",
    "//components/policy:generated",
    "//components/policy/proto",
    "//components/prefs:test_support",
    "//components/proxy_config",
    "//crypto",
    "//crypto:platform",
    "//dbus:test_support",
    "//google_apis",
    "//mojo/core/embedder",
    "//net",
    "//net:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/icu",
    "//url",
  ]
  sources = [
    "policy/weekly_time/time_utils_unittest.cc",
    "policy/weekly_time/weekly_time_interval_unittest.cc",
    "policy/weekly_time/weekly_time_unittest.cc",
    "printing/cups_printer_status_unittest.cc",
    "printing/epson_driver_matching_unittest.cc",
    "printing/ppd_cache_unittest.cc",
    "printing/ppd_line_reader_unittest.cc",
    "printing/printer_configuration_unittest.cc",
    "printing/printer_translator_unittest.cc",
    "printing/uri_unittest.cc",
    "printing/uri_unittest.h",
    "printing/uri_unittest_consistency.cc",
    "printing/usb_printer_id_unittest.cc",
    "process_proxy/process_output_watcher_unittest.cc",
    "process_proxy/process_proxy_unittest.cc",
    "test/run_all_unittests.cc",
  ]

  if (is_printing_ppd_provider_v3) {
    sources += [
      "printing/fake_printer_config_cache.cc",
      "printing/fake_printer_config_cache.h",
      "printing/ppd_metadata_manager_unittest.cc",
      "printing/ppd_metadata_matchers.h",
      "printing/ppd_metadata_parser_unittest.cc",
      "printing/ppd_provider_v3_unittest.cc",
      "printing/printer_config_cache_unittest.cc",
    ]
  } else {
    sources += [ "printing/ppd_provider_unittest.cc" ]
  }

  data = [ "test/data/" ]
}

# The following definitions only apply when building for a CrOS board (ie: not
# linux-chromeos). See the following for reference:
# https://chromium.googlesource.com/chromium/src/+/master/docs/chromeos_build_instructions.md
# https://chromium.googlesource.com/chromiumos/docs/+/master/simple_chrome_workflow.md
if (is_chromeos_device) {
  # This builds a tool that prepares a DUT or VM for testing, which can be
  # utilized by wrapping a host-side script test.
  generate_runner_script("cros_test_wrapper") {
    generated_script = "$root_build_dir/bin/cros_test_wrapper"

    # Assume every time we build cros_test_wrapper, we also build chrome and
    # want to deploy it to the DUT.
    deploy_chrome = true
  }

  # The sanity test's actual binary is baked into the OS image. All we need to
  # do is build the test wrapper and build our own browser to push to the DUT
  # before testing it.
  generate_runner_script("cros_browser_sanity_test") {
    testonly = true
    test_exe = "cros_browser_sanity_test"
    generated_script = "$root_build_dir/bin/run_cros_browser_sanity_test"
    runtime_deps_file = "$root_out_dir/cros_browser_sanity_test.runtime_deps"

    data_deps = [
      ":cros_chrome_deploy",
      "//:chromiumos_preflight",  # Builds the browser.
    ]
  }

  tast_test("chrome_login_tast_tests") {
    tast_tests = [
      "ui.ChromeLogin",
      "ui.ChromeCrashLoggedIn",
      "ui.ChromeCrashNotLoggedIn",
    ]
  }

  # Used to report the size of various partitions. For more details, see:
  # https://source.chromium.org/search?q=report_disk_usage.go
  tast_test("disk_usage_tast_test") {
    tast_tests = [ "platform.ReportDiskUsage" ]
  }

  # Tast test sources live in the Chromium OS repository.
  # To diagnose tast failures or disable tests, see go/tast-failures
  tast_test("chrome_all_tast_tests") {
    # To disable a specific test, add it the following list and cite a bug.
    tast_disabled_tests = [
      # crbug.com/1115622
      "ui.ChromeLoginGAIA",
      "inputs.VirtualKeyboardOOBE.stable",

      # crbug.com/1097630
      "security.OpenFDs",

      # crbug.com/1051059
      "security.SELinuxProcessesARC",

      # crbug.com/1062289
      "security.NetworkListenersARC",
      "security.NetworkListenersNonARC",

      # crbug.com/1056163
      "hwsec.LoginGuest",

      # crbug.com/1059426
      "ui.ChromeCrashNotLoggedInDirect.breakpad",
      "ui.ChromeCrashLoggedInDirect.breakpad",

      # crbug.com/1073084
      "crostini.CopyPaste.wayland_to_x11_artifact",

      # crbug.com/1098810
      "security.SELinuxFilesSystem",

      # crbug.com/1099695
      "platform.Drivefs",

      # crbug.com/1114654
      "crostini.Restart.artifact",

      # crbug.com/1114752
      "arc.ContainerMount",

      # crbug.com/1131496
      "apps.LaunchHelpApp.clamshell_oobe_stable",
      "apps.LaunchHelpApp.tablet_oobe_stable",

      # crbug.com/1131304
      "printer.PinPrintLexmark.no_pin",
      "printer.PinPrintLexmark.pin",

      # crbug.com/1141944
      "crostini.LaunchBrowser.artifact",
    ]
  }

  tast_test("chrome_all_tast_tests_informational") {
    enable_tast_informational_tests = true
  }

  group("cros_chrome_deploy") {
    # The following run-time dependencies are needed to deploy chrome to a
    # ChromeOS device. See the link for the full list:
    # https://codesearch.chromium.org/chromium/src/third_party/chromite/lib/chrome_util.py?l=341
    # Most of these are copy targets, for which GN doesn't add their outputs
    # as runtime-deps. See the link below for more details:
    # https://chromium.googlesource.com/chromium/src/+/master/tools/gn/docs/reference.md#actions-and-copies
    data_deps = [
      "//chrome:xdg_mime",
      "//mojo/core:shared_library_arc32",
      "//mojo/core:shared_library_arc64",
    ]

    # TODO(bpastene): Figure out what's generating resources/chromeos/ and
    # declare it as a dep instead of adding the dir directly.
    data = [ "$root_out_dir/resources/chromeos/" ]
  }
}

fuzzer_test("ppd_line_reader_fuzzer") {
  sources = [ "printing/ppd_line_reader_fuzzer.cc" ]
  deps = [ ":chromeos" ]
}

fuzzer_test("uri_fuzzer") {
  sources = [ "printing/uri_fuzzer.cc" ]
  seed_corpus = "printing/uri_fuzzer_seed_corpus"
  deps = [ ":chromeos" ]
}
