# Copyright 2013 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This is the root build file for GN. GN will start processing by loading this
# file, and recursively load all dependencies until all dependencies are either
# resolved or known not to exist (which will cause the build to fail). So if
# you add a new build file, there must be some path of dependencies from this
# file to your new one or GN won't know about it.

import("//build/config/chromecast_build.gni")
import("//build/config/chromeos/ui_mode.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/cronet/config.gni")
import("//build/config/dcheck_always_on.gni")
import("//build/config/features.gni")
import("//build/config/rust.gni")
import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build/gn_logs.gni")
import("//build/util/generate_wrapper.gni")
import("//chrome/browser/buildflags.gni")
import("//components/nacl/features.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//gpu/vulkan/features.gni")
import("//media/gpu/args.gni")
import("//media/media_options.gni")
import("//pdf/features.gni")
import("//ppapi/buildflags/buildflags.gni")
import("//printing/buildflags/buildflags.gni")
import("//remoting/remoting_enable.gni")
import("//third_party/closure_compiler/compile_js.gni")
import("//tools/ipc_fuzzer/ipc_fuzzer.gni")
import("//ui/base/ui_features.gni")
import("//ui/gl/features.gni")
import("//v8/gni/v8.gni")

if (is_android) {
  import("//build/config/android/config.gni")
}

if (is_fuchsia) {
  import("//build/config/fuchsia/generate_runner_scripts.gni")
  import("//third_party/fuchsia-sdk/sdk/build/component.gni")
  import("//third_party/fuchsia-sdk/sdk/build/package.gni")
}

if (is_linux) {
  import("build/config/linux/gtk/gtk.gni")
}

if (use_blink) {
  import("//v8/gni/snapshot_toolchain.gni")
}

declare_args() {
  # A list of extra dependencies to add to the root target. This allows a
  # checkout to add additional targets without explicitly changing any checked-
  # in files.
  root_extra_deps = []
}

if (is_official_build) {
  # An official (maximally optimized!) component (optimized for build times)
  # build doesn't make sense and usually doesn't work.
  assert(!is_component_build)
}

# The `gn_all` target is used to list all of the main targets in the build, so
# that we can figure out which BUILD.gn files to process, following the process
# described at the top of this file.
#
# Because of the way GN works (again, as described above), there may be targets
# built by `all` that aren't built by `gn_all`. We always want `all` to build,
# so there's really never a reason you'd want to build `gn_all` instead of
# `all`, and no tooling should depend directly on this target. Tools should
# should depend on either an explicit list of targets, or `all`.

group("gn_all") {
  testonly = true

  if (is_cronet_build) {
    if (is_android) {
      deps = [ "//components/cronet/android:cronet_package_android" ]
    } else if (is_ios) {
      deps = [ "//components/cronet/ios:cronet_package_ios" ]
    } else {
      deps = []
    }
  } else {
    deps = [
      "//base:base_perftests",
      "//base:base_unittests",
      "//codelabs",
      "//components:components_unittests",
      "//components/gwp_asan:gwp_asan_unittests",
      "//infra/orchestrator:orchestrator_all",
      "//net:net_unittests",
      "//sandbox:sandbox_unittests",
      "//services:services_unittests",
      "//services/service_manager/public/cpp",
      "//skia:skia_unittests",
      "//sql:sql_unittests",
      "//third_party/angle/src/tests:angle_end2end_tests",
      "//third_party/angle/src/tests:angle_unittests",
      "//third_party/angle/src/tests:angle_white_box_tests",
      "//third_party/flatbuffers:flatbuffers_unittests",
      "//third_party/liburlpattern:liburlpattern_unittests",
      "//tools/binary_size:binary_size_trybot_py",
      "//tools/ipc_fuzzer:ipc_fuzzer_all",
      "//tools/metrics:metrics_metadata",
      "//ui/base:ui_base_unittests",
      "//ui/color:color_unittests",
      "//ui/gfx:gfx_unittests",
      "//url:url_unittests",
    ]

    if (!is_component_build) {
      deps += [ "//third_party/abseil-cpp:absl_tests" ]
    }

    if (is_chromeos_ash && enable_js_type_check) {
      deps += [ ":webui_closure_compile" ]
    }

    if (!is_android && !is_castos) {
      deps += [
        "//crypto:crypto_unittests",
        "//google_apis/gcm:gcm_unit_tests",
      ]
    }

    if (!is_ios && !is_android && !is_castos) {
      deps += [
        "//chrome",
        "//chrome/browser/ui/color:dump_colors",
        "//chrome/test:browser_tests",
        "//components/subresource_filter/tools:subresource_filter_tools",
        "//components/zucchini:zucchini",
        "//gpu/gles2_conform_support:gles2_conform_test",
        "//gpu/khronos_glcts_support:khronos_glcts_test",
        "//net:hpack_example_generator",
        "//third_party/vulkan-deps/spirv-tools/src:SPIRV-Tools",
        "//tools/aggregation_service:aggregation_service_tool",
        "//tools/perf/clear_system_cache",
        "//tools/polymer:polymer_tools_python_unittests",
        "//tools/privacy_budget:privacy_budget_tools",
        "//ui/accessibility/extensions:extensions",
      ]
    }

    if (!is_castos) {
      deps += [ "//chrome/installer" ]
    }

    if (enable_updater) {
      deps += [ "//chrome/updater" ]
    }

    if (enable_ppapi) {
      deps += [
        "//ppapi:ppapi_unittests",
        "//ppapi/examples",
      ]
    }

    if (is_chromeos_lacros) {
      deps += [
        "//chrome/test:lacros_chrome_browsertests",
        "//chrome/test:lacros_chrome_unittests",
      ]
    }

    if (!is_ios && !is_castos) {
      deps += [
        "//chrome/test:unit_tests",
        "//ui/accessibility:accessibility_unittests",
      ]
    }

    if (use_blink) {
      deps += [
        "//cc:cc_unittests",
        "//components/policy:policy_templates",
        "//components/url_formatter/tools:format_url",
        "//components/viz:viz_perftests",
        "//components/viz:viz_unittests",
        "//content/shell:content_shell",
        "//content/test:content_browsertests",
        "//content/test:content_unittests",
        "//device:device_unittests",
        "//gpu:gpu_benchmark",
        "//gpu:gpu_unittests",
        "//media:media_unittests",
        "//media/capture:capture_unittests",
        "//media/cast:cast_unittests",
        "//media/midi:midi_unittests",
        "//media/mojo:media_mojo_unittests",
        "//mojo",
        "//mojo:mojo_unittests",
        "//storage:storage_unittests",
        "//third_party/blink/common:blink_common_unittests",
        "//third_party/blink/renderer/controller:blink_unittests",
        "//third_party/blink/renderer/platform:blink_platform_unittests",
        "//third_party/blink/renderer/platform/heap:blink_heap_unittests",
        "//third_party/blink/renderer/platform/wtf:wtf_unittests",
        "//third_party/libjingle_xmpp:libjingle_xmpp_unittests",
        "//tools/imagediff",
        "//tools/memory:all",
        "//ui/display:display_unittests",
        "//ui/gl:gl_unittests",
        "//ui/latency:latency_unittests",
        "//ui/native_theme:native_theme_unittests",
        "//ui/touch_selection:ui_touch_selection_unittests",
        "//v8:gn_all",
      ]

      if (!v8_use_external_startup_data) {
        deps += [ "//v8:v8_snapshot" ]
      }
    }

    if (!is_ios) {
      deps += [
        ":chromedriver_group",
        "//components:components_browsertests",
        "//ipc:ipc_tests",
        "//net:net_perftests",
        "//ui/events:events_unittests",
        "//url/ipc:url_ipc_unittests",
      ]
    }

    if (is_android) {
      deps += [
        "//weblayer/browser/android/javatests:webengine_support_instrumentation_test_apk",
        "//weblayer/browser/java:weblayer_junit_tests",
        "//weblayer/test:weblayer_browsertests",
      ]
    }

    if (!is_ios && !is_android) {
      deps += [ "//components/viz/demo:viz_demo" ]
    }

    if (!is_ios) {
      deps += [
        "//google_apis/gcm:mcs_probe",
        "//third_party/catapult/telemetry:bitmaptools($host_toolchain)",
      ]
      if (!is_android) {
        if (!is_castos) {
          deps += [ "//chrome/test:telemetry_perf_unittests" ]
        }
      } else {
        import("//tools/perf/chrome_telemetry_build/android_browser_types.gni")
        foreach(_target_suffix, telemetry_android_browser_target_suffixes) {
          deps += [ "//chrome/test:telemetry_perf_unittests${_target_suffix}" ]
        }
      }
    } else {
      deps += [
        "//ios:all",
        "//third_party/crashpad/crashpad:crashpad_tests",
      ]
    }

    if (is_fuchsia) {
      # Add targets that only exist on Fuchsia.
      deps += [
        ":d8_fuchsia",
        "//build/fuchsia/cipd",
        "//chrome/app:chrome_fuchsia",
        "//fuchsia_web:gn_all",
        "//tools/fuchsia/size_tests:fuchsia_sizes",

        # Ensure this target continues to build.
        "//chromecast/bindings:bindings_manager_fuchsia",
      ]
    }

    deps += root_extra_deps

    if (enable_printing || enable_printing_unittests) {
      deps += [ "//printing:printing_unittests" ]
    }

    if (enable_extensions) {
      deps += [
        "//extensions:extensions_browsertests",
        "//extensions:extensions_unittests",
        "//extensions/browser/api/declarative_net_request/filter_list_converter",
        "//extensions/shell:app_shell_unittests",
      ]
    }

    if (enable_pdf) {
      deps += [
        "//pdf/pdfium/fuzzers",
        "//third_party/pdfium/samples:pdfium_test",
      ]
    }

    if (enable_remoting) {
      deps += [ "//remoting:remoting_all" ]
    }

    if (toolkit_views) {
      deps += [
        "//ui/views:views_unittests",
        "//ui/views/examples:views_examples",
        "//ui/views/examples:views_examples_unittests",
        "//ui/views/examples:views_examples_with_content",
      ]
    }

    if (use_aura) {
      deps += [
        "//ui/aura:aura_demo",
        "//ui/aura:aura_unittests",
        "//ui/webui/examples:webui_examples",
        "//ui/wm:wm_unittests",
      ]
    }

    if (use_ozone) {
      deps += [
        "//ui/ozone",
        "//ui/ozone:unittests",
      ]
      if (!is_fuchsia) {
        deps += [ "//ui/ozone/demo" ]
      }
    }

    if (is_win) {
      deps += [
        "//chrome/credential_provider",
        "//chrome/credential_provider/test:gcp_unittests",
      ]
    }

    if (is_mac) {
      deps += [
        "//chrome/installer/gcapi_mac:gcapi_example",
        "//tools/mac",
      ]
    }

    # Allow building md5sum tool for other OSes (android is added below).
    # For Windows, see: crbug.com/1090428.
    # TODO(cavalcantii): move it out of 'android' folder.
    if (!is_win) {
      deps += [ "//tools/android/md5sum" ]
    }

    if (is_android) {
      deps += [
        "//base:base_junit_tests",
        "//base/android/jni_generator:jni_generator_tests",
        "//base/android/linker:chromium_android_linker",
        "//build/android/gyp/test:hello_world",
        "//build/android/stacktrace:java_deobfuscate",
        "//build/config/android/test/proto:test_build_protos",
        "//build/private_code_test:private_paths",
        "//chrome/android/monochrome:monochrome_public_apk_checker",
        "//chrome/android/webapk/shell_apk:maps_go_webapk",
        "//chrome/android/webapk/shell_apk:webapk",
        "//chrome/android/webapk/shell_apk/prepare_upload_dir:prepare_webapk_shell_upload_dir",
        "//chrome/test:android_browsertests",
        "//components:components_junit_tests",
        "//content/public/android:content_junit_tests",
        "//content/shell/android:content_shell_apk",
        "//device:device_junit_tests",
        "//media/gpu:video_decode_accelerator_unittest",
        "//net/android:net_junit_tests",
        "//services:services_junit_tests",
        "//testing/android/junit:junit_unit_tests",
        "//third_party/android_build_tools/lint:custom_lint_java",
        "//third_party/androidx_javascriptengine",
        "//third_party/catapult/devil",
        "//third_party/r8:custom_d8_java",
        "//tools/android:android_tools",
        "//tools/android:memconsumer",
        "//tools/android:push_apps_to_background",
        "//tools/android/audio_focus_grabber:audio_focus_grabber_apk",
        "//tools/android/customtabs_benchmark:customtabs_benchmark_apk",
        "//tools/android/kerberos/SpnegoAuthenticator:spnego_authenticator_apk",
        "//ui/android:ui_junit_tests",
      ]
      deps -= [
        "//net:net_perftests",
        "//url:url_unittests",
      ]

      if (!is_cast_android) {
        deps += [
          "//android_webview:empty_group",
          "//android_webview/test",
          "//android_webview/tools/automated_ui_tests:webview_ui_test_app",
          "//android_webview/tools/system_webview_shell",
          "//chrome/android:chrome_junit_tests",
          "//chrome/android:chrome_public_apk",
          "//chrome/android:chrome_public_test_apk",
          "//chrome/android:chrome_public_unit_test_apk",
          "//chrome/browser/android/examples/custom_tabs_client:custom_tabs_client_example_apk",
          "//chrome/browser/android/examples/partner_browser_customizations_provider:partner_browser_customizations_example_apk",
          "//content/shell/android:content_shell_test_apk",
        ]

        if (android_sdk_release == "tprivacysandbox") {
          deps += [ "//android_webview/tools/sdk_sandbox" ]
        }
      }

      if (enable_chrome_android_internal) {
        deps += [ "//clank" ]
      }
    }

    if (is_linux || is_chromeos || is_android) {
      deps += [
        "//third_party/breakpad:breakpad_unittests",
        "//third_party/breakpad:core-2-minidump",
        "//third_party/breakpad:generate_test_dump",
        "//third_party/breakpad:minidump-2-core",
        "//tools/dump_process_memory:dump_process",
      ]
    }

    if (is_chromeos_ash) {
      deps += [
        "//ash:ash_unittests",
        "//ash/components:ash_components_unittests",
        "//ash/keyboard/ui:keyboard_unittests",
        "//ash/webui:ash_webui_unittests",
        "//chrome/browser/metrics/perf:profile_provider_unittest",
        "//chrome/test:ash_crosapi_tests",
        "//chrome/test:usage_time_limit_unittests",
        "//chromeos/ash/components/proximity_auth:proximity_auth_unittests",
        "//chromeos/components:chromeos_components_unittests",
        "//components/exo/wayland:wayland_client_compatibility_tests",
        "//components/session_manager/core",
        "//third_party/shell-encryption:shell_encryption_unittests",
        "//ui/chromeos:ui_chromeos_unittests",
      ]
    }

    if (is_chromeos) {
      deps += [ "//chromeos:chromeos_unittests" ]
    }

    if (is_chromeos_ash || is_mac || is_win) {
      deps += [
        "//rlz:rlz_id",
        "//rlz:rlz_lib",
        "//rlz:rlz_unittests",
      ]
    }

    if (is_linux || is_chromeos) {
      # The following are definitely linux-only.
      deps += [
        "//net:disk_cache_memory_test",
        "//net:quic_client",
        "//net:quic_server",
        "//sandbox/linux:chrome_sandbox",
        "//sandbox/linux:sandbox_linux_unittests",
      ]
      if (!is_clang) {
        deps += [ "//testing:empty_main" ]
      }

      if (!is_castos) {
        deps += [ "//chrome:xdg_mime" ]
      }

      if (use_dbus) {
        deps += [
          "//dbus:dbus_test_server",
          "//dbus:dbus_unittests",
        ]
      }

      if (is_chrome_branded && is_official_build) {
        # TODO(dpranke): add the linux_dump_symbols flag?
        deps += [ "//chrome:linux_symbols" ]
      }
    }

    if (is_ios || is_win || is_linux || is_chromeos_lacros || is_fuchsia) {
      deps += [
        "//base:base_i18n_perftests",
        "//google_apis:google_apis_unittests",
      ]
    }

    if ((is_win || is_mac || is_linux || is_chromeos || is_fuchsia) &&
        (target_cpu == "x86" || target_cpu == "x64")) {
      deps += [
        "//third_party/swiftshader/src/Vulkan:icd_file",
        "//third_party/swiftshader/src/Vulkan:swiftshader_libvulkan",
      ]
    }

    # TODO(GYP): Figure out which of these should (and can) build
    # for Chrome OS and iOS (without blink).
    if (!is_chromeos_ash && use_blink) {
      deps += [
        "//cc:cc_perftests",
        "//device:device_unittests",
        "//gin:gin_shell",
        "//gin:gin_unittests",
        "//gpu:command_buffer_perftests",
        "//gpu:gl_tests",
        "//gpu:gpu_perftests",
        "//media:media_perftests",
        "//third_party/libphonenumber:libphonenumber_unittests",
        "//ui/compositor:compositor_unittests",
      ]

      if (!is_ios) {
        deps += [
          "//base:build_utf8_validator_tables",
          "//base:check_example",
          "//components:components_perftests",
          "//ipc:ipc_perftests",
          "//net:dump_cache",
        ]
      }

      if (!is_android && !is_castos && !is_ios) {
        deps += [
          "//chrome/test:load_library_perf_tests",
          "//chrome/test:sync_performance_tests",
        ]
      }

      if (!is_android && !is_ios) {
        deps += [
          "//courgette:courgette",
          "//courgette:courgette_fuzz",
          "//courgette:courgette_minimal_tool",
          "//courgette:courgette_unittests",
          "//media/cast:generate_barcode_video",
          "//media/cast:generate_timecode_audio",
          "//net:crash_cache",
          "//net:net_watcher",  # TODO(GYP): This should be conditional on
                                # use_v8_in_net
          "//net:run_testserver",
          "//net:stress_cache",
          "//net:tld_cleanup",
          "//third_party/leveldatabase:env_chromium_unittests",
          "//third_party/libaddressinput:libaddressinput_unittests",
        ]
      }

      if (enable_extensions) {
        deps += [ "//extensions/shell:app_shell" ]
      }

      # TODO(https://crbug.com/1299021): These dependencies might be
      # redundant given that we were able to disable them, apparently without
      # negative consequences, for the ARM32-NaCl-on-ARM64 case.
      if (enable_nacl) {
        if (target_cpu != "arm64") {
          deps += [ "//components/nacl/loader:nacl_loader_unittests" ]
        }

        if (is_linux || is_chromeos) {
          # TODO(dpranke): Figure out what platforms should actually have this.
          deps += [ "//components/nacl/loader:nacl_helper" ]
        }
      }

      if (media_use_ffmpeg && !is_android) {
        deps += [ "//media:ffmpeg_regression_tests" ]
      }
    }

    if (enable_ppapi) {
      deps += [
        "//ppapi:pepper_hash_for_uma",
        "//ppapi:ppapi_perftests",
      ]
    }

    if (is_android || is_linux || is_chromeos_lacros) {
      deps += [
        "//components/network_hints/browser",
        "//content/public/app",
        "//mojo:mojo_perftests",
        "//services/service_manager/public/cpp",
        "//testing/gmock:gmock_main",
        "//third_party/breakpad:dump_syms($host_toolchain)",
        "//third_party/breakpad:microdump_stackwalk($host_toolchain)",
        "//third_party/breakpad:minidump_dump($host_toolchain)",
        "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
      ]
    }

    if (is_linux || is_chromeos_lacros) {
      deps += [
        "//gpu/khronos_glcts_support:khronos_glcts_test",
        "//media/cast:cast_benchmarks",
        "//media/cast:tap_proxy",
        "//skia:filter_fuzz_stub",
        "//skia:image_operations_bench",
        "//ui/snapshot:snapshot_unittests",
      ]

      if (!is_castos) {
        deps += [ "//chrome/test:chrome_app_unittests" ]
      }

      if (!is_debug && !is_component_build && !is_castos) {
        deps += [ "//chrome/tools/service_discovery_sniffer" ]
      }
    }

    if (is_mac) {
      deps += [
        "//third_party/breakpad:dump_syms",

        # The following are accessibility API tools.
        "//tools/accessibility/inspect:ax_dump_events",
        "//tools/accessibility/inspect:ax_dump_tree",
      ]
      deps -= [
        # Mojo in GN contains some things which are never compiled in GYP on Mac,
        # so compilation fails on Mac. They need porting.
        "//mojo",
      ]
    }

    if (is_win) {
      deps += [
        "//base:pe_image_test",
        "//chrome/chrome_elf:chrome_elf_unittests",
        "//chrome/chrome_elf:dll_hash_main",
        "//chrome/elevation_service:elevation_service_unittests",
        "//chrome/install_static:install_static_unittests",
        "//chrome/installer/gcapi",
        "//chrome/installer/setup:setup_unittests",
        "//chrome/notification_helper:notification_helper_unittests",
        "//chrome/test:delayloads_unittests",
        "//components/wifi:wifi_test",
        "//components/zucchini",
        "//net:quic_client",
        "//net:quic_server",
        "//sandbox/win:sbox_integration_tests",
        "//sandbox/win:sbox_unittests",
        "//sandbox/win:sbox_validation_tests",
        "//testing/gtest:gtest_main",

        # The following two are accessibility API debugging tools.
        "//tools/accessibility/inspect:ax_dump_events",
        "//tools/accessibility/inspect:ax_dump_tree",
        "//tools/win/chromeexts:chromeexts",
      ]

      # TODO(thakis): Enable this in cross builds, https://crbug.com/799827
      if (!(is_component_build && is_debug && target_cpu == "x86") &&
          host_os == "win") {
        deps += [ "//chrome/test/mini_installer:mini_installer_tests" ]
      }
    } else if (!is_android && !is_ios && !is_fuchsia) {
      deps += [ "//third_party/breakpad:symupload($host_toolchain)" ]
    }

    if (is_cast_android || is_castos || (is_fuchsia && enable_cast_receiver)) {
      deps += [ "//chromecast:cast_test_lists" ]
    }

    if (is_cast_android || is_castos) {
      deps += [
        "//chromecast:cast_shell",
        "//chromecast/cast_core:core_runtime_simple",
      ]
    }

    if (is_mac || is_win || is_android || is_linux || is_chromeos) {
      deps += [
        "//third_party/crashpad/crashpad:crashpad_tests",
        "//third_party/crashpad/crashpad/handler:crashpad_handler",
        "//third_party/crashpad/crashpad/tools:crashpad_database_util",
      ]
    }

    if (enable_message_center) {
      deps += [ "//ui/message_center:message_center_unittests" ]
    }

    if (!is_android && !is_ios) {
      deps += [ "//content/browser/bluetooth/tools:bluetooth_metrics_hash" ]
    }

    if (is_win || is_linux || is_chromeos) {
      deps += [ "//mojo" ]
    }

    if (is_mac || is_linux || is_chromeos || is_android || is_fuchsia) {
      deps += [ "//third_party/perfetto:all" ]
    }

    if (is_win || is_mac || is_linux || is_chromeos) {
      deps += [ "//third_party/sqlite:sqlite_shell" ]
    }

    if ((is_linux && !is_castos) || is_chromeos_lacros || is_fuchsia) {
      # TODO(https://crbug.com/1329673): Figure out if this should be in gn_all
      # and how cross-platform this is.
      deps +=
          [ "//components/services/filesystem:filesystem_service_unittests" ]
    }

    if ((is_linux && !is_castos) || is_chromeos_lacros) {
      # TODO(https://crbug.com/1329673): Figure out if any of these should be in
      # gn_all and figure out how cross-platform they are.
      deps += [
        "//chrome/installer/util:strings",
        "//chrome/tools/convert_dict",
        "//components/constrained_window:unit_tests",
        "//components/metrics:serialization",
        "//components/sessions:unit_tests",
        "//media/cast:udp_proxy",
        "//storage/browser:dump_file_system",
        "//third_party/angle:libANGLE",
        "//third_party/angle:libEGL",
        "//third_party/angle:libGLESv2",
        "//third_party/leveldatabase:leveldb_test_targets",
        "//third_party/libjpeg_turbo:simd",
        "//third_party/opus:opus_compare",
        "//third_party/opus:opus_demo",
        "//third_party/opus:test_opus_api",
        "//third_party/opus:test_opus_decode",
        "//third_party/opus:test_opus_encode",
        "//third_party/opus:test_opus_padding",
        "//ui/display/types",
        "//ui/shell_dialogs:shell_dialogs_unittests",
      ]

      if (target_cpu == "x86" || target_cpu == "x64") {
        if (!is_android) {
          deps += [ "//chrome/test:load_library_perf_tests" ]
        }
        deps += [ "//third_party/libjpeg_turbo:simd_asm" ]
      }
      if ((is_linux || is_chromeos) && current_toolchain == host_toolchain) {
        deps += [ "//v8:v8_shell" ]
      }
    }

    if ((is_linux && !is_castos) || is_chromeos ||
        ((is_win || is_mac) && use_fuzzing_engine)) {
      deps += [
        "//testing/libfuzzer/fuzzers",
        "//third_party/freetype-testing:fuzzers",
        "//third_party/grpc:fuzzers",
        "//third_party/icu/fuzzers",
        "//third_party/qcms:fuzzers",
        "//third_party/ukey2/fuzzers",
        "//third_party/zlib/contrib/tests/fuzzers",
      ]

      if (is_chromeos_ash) {
        deps += [ "//chrome/services/ipp_parser/public/cpp:fuzzers" ]
      }

      # TODO(crbug.com/906751): Get the libFuzzer tests working on Windows.
      # Disable them for now because they cause the Windows clang ToT builder to
      # fail.
      if (!is_win) {
        deps += [ "//testing/libfuzzer/tests:libfuzzer_tests" ]
      }
    }

    # TODO(https://crbug.com/1299021): Remove the special case for arm64.
    if (enable_nacl && target_cpu != "arm64") {
      deps += [ "//native_client_sdk/src:nacl_core_sdk" ]
    }

    if (((is_linux || is_chromeos) && use_ozone) || is_fuchsia) {
      deps += [
        "//headless:headless_non_renderer",
        "//headless:headless_tests",
      ]
    }

    if (enable_vr) {
      deps += [
        "//chrome/browser/vr:vr_common_perftests",
        "//chrome/browser/vr:vr_common_unittests",
      ]
      if (!is_android) {
        deps += [ "//tools/perf/contrib/vr_benchmarks:vr_perf_tests" ]
      } else {
        deps += [ "//chrome/browser/android/vr:vr_android_unittests" ]
        import("//tools/perf/chrome_telemetry_build/android_browser_types.gni")
        foreach(_target_suffix, telemetry_android_browser_target_suffixes) {
          deps += [
            "//tools/perf/contrib/vr_benchmarks:vr_perf_tests${_target_suffix}",
          ]
        }
      }
    }

    if (use_atk) {
      deps += [
        "//tools/accessibility/inspect:ax_dump_events",
        "//tools/accessibility/inspect:ax_dump_tree",
      ]
    }

    if (build_dawn_tests) {
      deps += [
        "//third_party/dawn/src/dawn/fuzzers:fuzzers",
        "//third_party/dawn/src/dawn/tests:dawn_end2end_tests",
        "//third_party/dawn/src/dawn/tests:dawn_unittests",
        "//third_party/dawn/src/tint:tint_unittests",
        "//third_party/dawn/src/tint/fuzzers",
      ]
    }

    # PFFFT.
    deps += [
      "//third_party/pffft:fuzzers",
      "//third_party/pffft:pffft_benchmark",
      "//third_party/pffft:pffft_unittest",
    ]

    # Rust build targets.
    deps += [ ":all_rust" ]

    if (!is_android && !is_ios) {
      deps += [ "//components/cronet:cronet_tests" ]
    }
  }
}

# All Rust targets. This is provided for convenience while developing Rust to
# e.g. test build config or toolchain changes.
group("all_rust") {
  testonly = true

  # Unconditional because this includes things that should work whether or not
  # Rust is enabled.
  deps = [ ":rust_build_tests" ]

  if (toolchain_has_rust) {
    if (enable_rust_mojo) {
      deps += [
        "//mojo/public/rust",
        "//mojo/public/rust:mojo_rust_integration_unittests",
        "//mojo/public/rust:mojo_rust_unittests",
      ]
    }

    # gnrt is a developer tool run on developer machines. It is not needed when
    # cross-compiling.
    if (enable_rust_gnrt && host_os == target_os && host_cpu == target_cpu) {
      deps += [
        "//tools/crates/gnrt($host_toolchain)",
        "//tools/crates/gnrt/lib:gnrt_unittests",
      ]
    }
  }
  if (enable_rust_gtest_interop) {
    deps += [ "//testing/rust_gtest_interop:rust_gtest_interop_unittests" ]
  }
}

# This group exists to give targets for the waterfall to refer to.
group("rust_build_tests") {
  testonly = true
  deps = [ "//build/rust/tests" ]
}

# TODO(https://crbug.com/1112776): ensure remoting is functional on Linux builds with
# other than X11 Ozone backends.
if (enable_remoting && ((is_linux && ozone_platform_x11) ||
                        ((is_chromeos || is_win) && !use_ozone))) {
  # On CQ, run the Traffic Annotation Auditor when a change affects one of these
  # targets.
  group("traffic_annotation_auditor_dependencies") {
    deps = [
      "//chrome:chrome",
      "//remoting/client",
      "//remoting/host:host",
      "//tools/traffic_annotation:annotations_xml",
    ]
  }
}

if (is_chromeos_ash) {
  group("traffic_annotation_auditor_dependencies") {
    deps = [
      "//chrome",
      "//chromeos",
      "//tools/traffic_annotation:annotations_xml",
    ]
  }
}

if (is_android && !is_cronet_build) {
  # On CQ, run the Traffic Annotation Auditor when a change affects one of these
  # targets.
  group("traffic_annotation_auditor_dependencies") {
    deps = [
      "//chrome/android:chrome_public_apk",
      "//tools/traffic_annotation:annotations_xml",
    ]
  }
}

if (is_fuchsia) {
  # TODO(https://crbug.com/731217): This can't practically be in //v8 without
  # duplicating all the Fuchsia running infrastructure there.
  fuchsia_component("d8_component") {
    testonly = true
    manifest = "//v8/gni/v8.cml"
    data_deps = [ "//v8:d8" ]
  }
  fuchsia_package("d8_pkg") {
    testonly = true
    package_name = "d8"
    deps = [ ":d8_component" ]
  }
  fuchsia_package_installer("d8_fuchsia") {
    testonly = true
    package = ":d8_pkg"
    package_name = "d8"
  }
}

# TODO(GYP_GONE): Figure out if we really need this target or if there's
# some better way to specify things.
if (is_win) {
  group("chrome_official_builder_no_unittests") {
    deps = [
      "//chrome/common/win:eventlog_provider",
      "//chrome/credential_provider",
      "//chrome/installer/gcapi",
      "//chrome/installer/mini_installer",
      "//chrome/updater/win:updater_zip",
      "//components/policy:pack_policy_templates",
      "//components/zucchini",
      "//components/zucchini:zucchini64",
      "//courgette",
      "//third_party/hyphenation-patterns",
      "//tools/metrics:metrics_metadata",
    ]

    if (target_cpu == "x86") {
      deps += [
        "//courgette:copy_courgette_binaries",
        "//courgette(//build/toolchain/win:win_clang_x64)",
      ]
    }
    if (is_chrome_branded) {
      deps += [ "//remoting/host:remoting_host_installation" ]
    }
  }

  group("chrome_official_builder") {
    testonly = true

    deps = [
      ":chrome_official_builder_no_unittests",
      "//base:base_unittests",
      "//chrome/test:browser_tests",
      "//ipc:ipc_tests",
      "//media:media_unittests",
      "//media/midi:midi_unittests",
      "//net:net_unittests",
      "//printing:printing_unittests",
      "//sql:sql_unittests",
      "//third_party/breakpad:symupload($host_toolchain)",
      "//ui/base:ui_base_unittests",
      "//ui/gfx:gfx_unittests",
      "//ui/touch_selection:ui_touch_selection_unittests",
      "//ui/views:views_unittests",
      "//url:url_unittests",
    ]
  }
}

if (is_chromeos_ash) {
  # This group is used to collect all targets used when verifying a new version
  # of Chrome for Chrome OS.
  group("chromiumos_preflight") {
    testonly = true
    data_deps = [
      "//chrome",
      "//chrome/test/chromedriver:chromedriver_server",
      "//components/chromeos_camera:jpeg_decode_accelerator_unittest",
      "//components/exo/wayland:wayland_client_integration_tests",
      "//components/exo/wayland:wayland_client_perftests",
      "//components/exo/wayland:wayland_client_tests",
      "//components/exo/wayland:wayland_hdr_client",
      "//components/policy/test_support:fake_dmserver",
      "//media:media_unittests",
      "//media/capture:capture_unittests",
      "//sandbox/linux:chrome_sandbox",
      "//sandbox/linux:sandbox_linux_unittests",
      "//third_party/breakpad:minidump_stackwalk($host_toolchain)",
      "//third_party/dawn/src/dawn/tests:dawn_end2end_tests",
      "//third_party/dawn/src/dawn/tests:dawn_unittests",
      "//ui/ozone:ozone_integration_tests",

      # Blocked on https://github.com/catapult-project/catapult/issues/2297
      #"//third_party/catapult/telemetry:bitmaptools",
      "//tools/perf/clear_system_cache",
      "//ui/ozone/gl:ozone_gl_unittests",
    ]

    if (enable_plugins) {
      data_deps += [ "//ppapi/examples/video_decode" ]
    }

    if (use_v4l2_codec || use_vaapi) {
      data_deps += [
        "//components/chromeos_camera:jpeg_encode_accelerator_unittest",
        "//media/gpu/chromeos:image_processor_test",
        "//media/gpu/test/:video_decode_accelerator_perf_tests",
        "//media/gpu/test/:video_decode_accelerator_tests",
        "//media/gpu/test/:video_encode_accelerator_perf_tests",
        "//media/gpu/test/:video_encode_accelerator_tests",
      ]
      if (use_vaapi) {
        data_deps += [
          "//media/gpu/vaapi:decode_test",
          "//media/gpu/vaapi:vaapi_unittest",
          "//media/gpu/vaapi/test/fake_libva_driver:fake_libva_driver_unittest",
        ]
      }
      if (use_v4l2_codec) {
        data_deps += [
          "//media/gpu/v4l2:v4l2_stateless_decoder",
          "//media/gpu/v4l2:v4l2_unittest",
        ]
      }
    }
  }
}

if (!is_ios && !is_cronet_build) {
  group("chromedriver_group") {
    testonly = true

    if (is_fuchsia || is_android) {
      # On Fuchsia and non-Cast Android, ChromeDriver runs on the host, not the
      # device.
      if (!is_cast_android) {
        deps = [
          "//chrome/test/chromedriver:chromedriver_server($host_toolchain)",
        ]
      }
      if (is_android && !is_cast_android) {
        deps += [ "//chrome/test/chromedriver/test/webview_shell:chromedriver_webview_shell_apk" ]
      }
    } else if (!is_castos) {
      deps = [
        "//chrome/test/chromedriver:chromedriver_server",
        "//chrome/test/chromedriver:chromedriver_unittests",
        "//chrome/test/chromedriver:generate_chromedriver_license",
      ]
    }
  }

  # This group includes all of the targets needed to build and test Blink,
  # including running web tests (see below). This target is defined here because
  # previously //third_party/WebKit, now //third_party/blink, couldn't depend on
  # //content/shell. This might not longer be true, see
  # https://crbug.com/1018659.
  group("blink_tests") {
    testonly = true

    deps = [
      ":blink_web_tests",
      ":blink_wpt_tests",
      "//third_party/blink/public:all_blink",
    ]
  }

  # Web tests runner
  # third_party/blink/tools/run_web_tests.py
  group("run_web_tests") {
    testonly = true
    deps = [
      ":blink_web_tests",
      ":blink_wpt_tests",
    ]
  }

  if (!is_chromeos_ash && !is_ios && !is_fuchsia && !is_android && !is_castos) {
    # WPT Webdriver tests runner
    # chrome/test/chromedriver/test/run_webdriver_tests.py
    script_test("webdriver_wpt_tests") {
      # The script is wrapped in testing/xvfb.py; the actual
      # run_webdriver_tests.py script is passed as an arg in gn_isolate_map.pyl
      script = "//testing/xvfb.py"

      data = [
        "//build/skia_gold_common/",
        "//chrome/test/chromedriver/chrome_paths.py",
        "//chrome/test/chromedriver/server/server.py",
        "//chrome/test/chromedriver/test/run_webdriver_tests.py",
        "//chrome/test/chromedriver/util.py",
        "//third_party/blink/tools/blinkpy/",
        "//third_party/blink/web_tests/external/wpt/config.json",
        "//third_party/blink/web_tests/external/wpt/webdriver/",
        "//third_party/blink/web_tests/VirtualTestSuites",
        "//third_party/blink/web_tests/WebDriverExpectations",
        "//third_party/pywebsocket3/src/mod_pywebsocket/",
        "//third_party/wpt_tools/",
      ]
      data_deps = [
        "//chrome:chrome",
        "//chrome/test/chromedriver:chromedriver_server",
        "//testing:test_scripts_shared",
        "//third_party/catapult/third_party/typ",
      ]
      if (is_win) {
        data_deps += [ "//build/win:copy_cdb_to_output" ]
      }
    }
    script_test("wpt_tests_isolate") {
      script = "//third_party/blink/tools/run_wpt_tests.py"
      args = [
        "--product=chrome",
        "--no-show-results",
      ]
      data_deps = [
        "//chrome:chrome",
        "//chrome/test/chromedriver:chromedriver_server",
        "//third_party/blink/tools:wpt_tests_isolate",
      ]
    }
    script_test("wpt_tests_isolate_content_shell") {
      script = "//third_party/blink/tools/run_wpt_tests.py"
      args = [ "--no-show-results" ]
      data_deps = [
        ":blink_web_tests_support_data",
        "//third_party/blink/tools:wpt_tests_isolate",
      ]
    }
  }

  group("blink_web_tests_support_data") {
    testonly = true
    data_deps = [
      ":layout_test_data_mojo_bindings",
      ":layout_test_data_mojo_bindings_lite",
      "//content/shell:content_shell",
      "//content/test:mojo_bindings_web_test_mojom_js_data_deps",
      "//content/test:mojo_web_test_bindings_js_data_deps",
      "//device/bluetooth/public/mojom:fake_bluetooth_interfaces_js_data_deps",
      "//device/vr/public/mojom:vr_service_js_data_deps",
      "//media/capture/mojom:image_capture_js_data_deps",
      "//media/midi:mojo_js_data_deps",
      "//mojo/public/interfaces/bindings/tests:test_data_deps",
      "//mojo/public/js/ts/bindings/tests:test_interfaces_js_data_deps",
      "//mojo/public/mojom/base:base_js_data_deps",
      "//services/device/public/mojom:generic_sensor_js_data_deps",
      "//services/device/public/mojom:mojom_js_data_deps",
      "//services/device/public/mojom:usb_js_data_deps",
      "//services/shape_detection/public/mojom:mojom_js_data_deps",
      "//skia/public/mojom:mojom_js_data_deps",
      "//testing/buildbot/filters:blink_web_tests_filter",
      "//third_party/blink/public:blink_devtools_frontend_resources_files",
      "//third_party/blink/public:blink_devtools_inspector_resources",
      "//third_party/blink/public/mojom:mojom_platform_js_data_deps",
      "//third_party/blink/renderer/core:js_files_for_form_controls_web_tests",
      "//third_party/catapult/third_party/typ",
      "//third_party/hyphenation-patterns:test_data",
      "//third_party/mesa_headers",
      "//tools/imagediff",
      "//ui/base:goldctl",
    ]

    if (is_android) {
      data_deps += [
        "//third_party/breakpad:breakpad_unittests",
        "//third_party/breakpad:dump_syms",
        "//third_party/breakpad:microdump_stackwalk",
        "//third_party/breakpad:minidump_dump",
        "//third_party/breakpad:minidump_stackwalk",
        "//third_party/breakpad:symupload",
        "//tools/android/forwarder2",
      ]
    } else {
      data_deps += [ "//content/web_test:web_test_common_mojom_js_data_deps" ]
    }

    if (!is_win && !is_android) {
      data_deps +=
          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
    }

    if (is_mac) {
      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
    }

    if (is_linux || is_chromeos) {
      data_deps += [ "//third_party/breakpad:dump_syms($host_toolchain)" ]
    }

    if (is_fuchsia) {
      data_deps += [
        "//build/config/fuchsia:deployment_resources",
        "//content/shell:content_shell_fuchsia",
        "//content/shell:content_shell_pkg__archive-manifest",
        "//content/shell:content_shell_pkg__archive-metadata",
      ]
    }

    data = [
      "//build/skia_gold_common/",
      "//testing/scripts/common.py",
      "//testing/scripts/run_isolated_script_test.py",
      "//testing/xvfb.py",
      "//third_party/blink/tools/",
      "//third_party/blink/web_tests/external/wpt/config.json",
      "//third_party/blink/web_tests/resources/",
      "//third_party/pywebsocket3/src/mod_pywebsocket/",
      "//third_party/test_fonts/test_fonts/",
      "//third_party/wpt_tools/",
    ]

    if (is_win) {
      data += [
        "//third_party/apache-win32/",
        "//third_party/perl/perl/",
      ]
      data_deps += [ "//build/win:copy_cdb_to_output" ]
    }

    if (is_mac) {
      data += [
        "//third_party/apache-mac/",
        "//third_party/apache-mac-arm64/",
      ]
    }

    if (is_linux || is_fuchsia) {
      data += [ "//third_party/apache-linux/" ]
    }

    if (is_android) {
      data += [
        "//third_party/catapult/",
        "//build/android/",
      ]
    }
  }

  _common_web_test_script = "//testing/scripts/run_isolated_script_test.py"

  if (is_fuchsia) {
    _common_web_test_args = [
      "@WrappedPath(" +
          rebase_path("//build/fuchsia/test/run_test.py", root_build_dir) + ")",
      "blink",
      "--out-dir",
      "@WrappedPath(.)",
    ]
  } else {
    _common_web_test_args = [ "@WrappedPath(" + rebase_path(
                                  "//third_party/blink/tools/run_web_tests.py",
                                  root_build_dir) + ")" ]
  }
  if (is_debug) {
    _common_web_test_args += [ "--debug" ]
  } else {
    _common_web_test_args += [ "--release" ]
    if (dcheck_always_on) {
      _common_web_test_args += [ "--timeout-ms=12000" ]
    }
  }

  if (is_android) {
    _common_web_test_args += [
      "--platform",
      "android",
    ]
  }

  if (is_fuchsia) {
    _common_web_test_args += [
      "--platform",
      "fuchsia",
      "--jobs",
      "1",
    ]
  }

  _common_web_test_args += [
    "--seed",
    "4",
    "--debug-rwt-logging",
    "--no-show-results",
    "--zero-tests-executed-ok",
    "--clobber-old-results",
  ]

  # https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_tests.md
  script_test("blink_web_tests") {
    script = _common_web_test_script

    args = _common_web_test_args

    data_deps = [ ":blink_web_tests_support_data" ]
    data = [
      "//third_party/blink/perf_tests/",
      "//third_party/blink/web_tests/SmokeTests/Default.txt",
      "//third_party/blink/web_tests/VirtualTestSuites",

      # List all test expectations here
      "//third_party/blink/web_tests/ASANExpectations",
      "//third_party/blink/web_tests/LeakExpectations",
      "//third_party/blink/web_tests/MSANExpectations",
      "//third_party/blink/web_tests/NeverFixTests",
      "//third_party/blink/web_tests/SlowTests",
      "//third_party/blink/web_tests/StaleTestExpectations",
      "//third_party/blink/web_tests/TestExpectations",
      "//third_party/blink/web_tests/WebDriverExpectations",
      "//third_party/blink/web_tests/WebGPUExpectations",

      # === List Test Cases folders here ===
      "//third_party/blink/web_tests/accessibility/",
      "//third_party/blink/web_tests/android/",
      "//third_party/blink/web_tests/animations/",
      "//third_party/blink/web_tests/app_banner/",
      "//third_party/blink/web_tests/bindings/",
      "//third_party/blink/web_tests/clipboard/",
      "//third_party/blink/web_tests/compositing/",
      "//third_party/blink/web_tests/crypto/",
      "//third_party/blink/web_tests/css-parser/",
      "//third_party/blink/web_tests/css1/",
      "//third_party/blink/web_tests/css2.1/",
      "//third_party/blink/web_tests/css3/",
      "//third_party/blink/web_tests/cssom/",
      "//third_party/blink/web_tests/custom-elements/",
      "//third_party/blink/web_tests/custom-properties/",
      "//third_party/blink/web_tests/dark-mode/",
      "//third_party/blink/web_tests/dom/",
      "//third_party/blink/web_tests/editing/",
      "//third_party/blink/web_tests/fast/",
      "//third_party/blink/web_tests/fonts/",
      "//third_party/blink/web_tests/fragmentation/",
      "//third_party/blink/web_tests/fullscreen/",
      "//third_party/blink/web_tests/gamepad/",
      "//third_party/blink/web_tests/harness-tests/",
      "//third_party/blink/web_tests/hittesting/",
      "//third_party/blink/web_tests/html/",
      "//third_party/blink/web_tests/html5lib/",
      "//third_party/blink/web_tests/http/",
      "//third_party/blink/web_tests/idle-callback/",
      "//third_party/blink/web_tests/ietestcenter/",
      "//third_party/blink/web_tests/images/",
      "//third_party/blink/web_tests/inspector-protocol/",
      "//third_party/blink/web_tests/intersection-observer/",
      "//third_party/blink/web_tests/jquery/",
      "//third_party/blink/web_tests/js/",
      "//third_party/blink/web_tests/loader/",
      "//third_party/blink/web_tests/media/",
      "//third_party/blink/web_tests/media_capabilities/",
      "//third_party/blink/web_tests/mhtml/",
      "//third_party/blink/web_tests/navigator_language/",
      "//third_party/blink/web_tests/navigator_webdriver/",
      "//third_party/blink/web_tests/netinfo/",
      "//third_party/blink/web_tests/overflow/",
      "//third_party/blink/web_tests/paint/",
      "//third_party/blink/web_tests/payments/",
      "//third_party/blink/web_tests/permissionclient/",
      "//third_party/blink/web_tests/plugins/",
      "//third_party/blink/web_tests/pointer-lock/",
      "//third_party/blink/web_tests/print_testharness/",
      "//third_party/blink/web_tests/printing/",
      "//third_party/blink/web_tests/register-protocol-handler/",
      "//third_party/blink/web_tests/regress/",
      "//third_party/blink/web_tests/resize-observer/",
      "//third_party/blink/web_tests/resources/",
      "//third_party/blink/web_tests/rootscroller/",
      "//third_party/blink/web_tests/screen_orientation/",
      "//third_party/blink/web_tests/scrollbars/",
      "//third_party/blink/web_tests/scrollingcoordinator/",
      "//third_party/blink/web_tests/security/",
      "//third_party/blink/web_tests/handwriting/",
      "//third_party/blink/web_tests/shadow-dom/",
      "//third_party/blink/web_tests/storage/",
      "//third_party/blink/web_tests/svg/",
      "//third_party/blink/web_tests/synthetic_gestures/",
      "//third_party/blink/web_tests/tables/",
      "//third_party/blink/web_tests/test_runner/",
      "//third_party/blink/web_tests/third_party/",
      "//third_party/blink/web_tests/timezonechange/",
      "//third_party/blink/web_tests/touchadjustment/",
      "//third_party/blink/web_tests/transforms/",
      "//third_party/blink/web_tests/transitions/",
      "//third_party/blink/web_tests/traversal/",
      "//third_party/blink/web_tests/typedcssom/",
      "//third_party/blink/web_tests/vibration/",
      "//third_party/blink/web_tests/view-transition/",
      "//third_party/blink/web_tests/virtual/",
      "//third_party/blink/web_tests/virtualkeyboard/",
      "//third_party/blink/web_tests/wasm/",
      "//third_party/blink/web_tests/webaudio/",
      "//third_party/blink/web_tests/webexposed/",
      "//third_party/blink/web_tests/webgpu/",
      "//third_party/blink/web_tests/xmlviewer/",

      # === Test Case Folders Ends ===
    ]

    if (is_win || is_linux || is_fuchsia) {
      data += [
        "//third_party/blink/web_tests/platform/win/",
        "//third_party/blink/web_tests/platform/win10/",
      ]
      if (is_linux || is_fuchsia) {
        data += [ "//third_party/blink/web_tests/platform/linux/" ]
      }
      if (is_fuchsia) {
        data += [
          "//third_party/blink/web_tests/platform/fuchsia/",
          "$root_gen_dir/package_metadata/content_shell.meta",
        ]
      }
    } else if (is_mac) {
      data += [
        "//third_party/blink/web_tests/SmokeTests/Mac.txt",
        "//third_party/blink/web_tests/platform/mac/",
        "//third_party/blink/web_tests/platform/mac-mac10.13/",
        "//third_party/blink/web_tests/platform/mac-mac10.14/",
        "//third_party/blink/web_tests/platform/mac-mac10.15/",
        "//third_party/blink/web_tests/platform/mac-mac11/",
        "//third_party/blink/web_tests/platform/mac-mac11-arm64/",
        "//third_party/blink/web_tests/platform/mac-mac12/",
        "//third_party/blink/web_tests/platform/mac-mac12-arm64/",
        "//third_party/blink/web_tests/platform/mac-mac13-arm64/",
      ]
    }

    # flag-specific tests only runs on linux as of now
    if (is_linux) {
      data += [
        "//third_party/blink/web_tests/FlagSpecificConfig",
        "//third_party/blink/web_tests/FlagExpectations/",
        "//third_party/blink/web_tests/flag-specific/",
        "//third_party/blink/web_tests/SmokeTests/",
      ]
    }
  }

  script_test("blink_wpt_tests") {
    script = _common_web_test_script

    args = _common_web_test_args

    # Use --wpt-only to skip tests under web_tests/virtual/
    args += [ "--wpt-only" ]

    data_deps = [ ":blink_web_tests_support_data" ]
    data = [
      "//third_party/blink/perf_tests/",
      "//third_party/blink/web_tests/SmokeTests/Default.txt",
      "//third_party/blink/web_tests/SmokeTests/rel-ready.blink_wpt_tests.filter",
      "//third_party/blink/web_tests/VirtualTestSuites",

      # List all test expectations here
      "//third_party/blink/web_tests/ASANExpectations",
      "//third_party/blink/web_tests/LeakExpectations",
      "//third_party/blink/web_tests/MSANExpectations",
      "//third_party/blink/web_tests/NeverFixTests",
      "//third_party/blink/web_tests/SlowTests",
      "//third_party/blink/web_tests/StaleTestExpectations",
      "//third_party/blink/web_tests/TestExpectations",
      "//third_party/blink/web_tests/WebDriverExpectations",
      "//third_party/blink/web_tests/WebGPUExpectations",

      # === List Test Cases folders here ===
      "//third_party/blink/web_tests/external/",
      "//third_party/blink/web_tests/wpt_internal/",
      "//third_party/blink/web_tests/virtual/",

      # === Test Case Folders Ends ===
    ]

    if (is_win || is_linux || is_fuchsia) {
      data += [
        "//third_party/blink/web_tests/platform/win/",
        "//third_party/blink/web_tests/platform/win10/",
      ]
      if (is_linux || is_fuchsia) {
        data += [ "//third_party/blink/web_tests/platform/linux/" ]
      }
      if (is_fuchsia) {
        data += [
          "//third_party/blink/web_tests/platform/fuchsia/",
          "$root_gen_dir/package_metadata/content_shell.meta",
        ]
      }
    } else if (is_mac) {
      data += [
        "//third_party/blink/web_tests/SmokeTests/Mac.txt",
        "//third_party/blink/web_tests/platform/mac/",
        "//third_party/blink/web_tests/platform/mac-mac10.13/",
        "//third_party/blink/web_tests/platform/mac-mac10.14/",
        "//third_party/blink/web_tests/platform/mac-mac10.15/",
        "//third_party/blink/web_tests/platform/mac-mac11-arm64/",
      ]
    }

    # flag-specific tests only runs on linux as of now
    if (is_linux) {
      data += [
        "//third_party/blink/web_tests/FlagSpecificConfig",
        "//third_party/blink/web_tests/FlagExpectations/",
        "//third_party/blink/web_tests/flag-specific/",
        "//third_party/blink/web_tests/SmokeTests/",
      ]
    }
  }

  script_test("devtools_web_tests") {
    # This target differs from :blink_web_tests in that it uses the
    # same test harness but runs an entirely different set of tests
    # and doesn't have a dependency on the web_test directory at all.
    script = _common_web_test_script

    args = _common_web_test_args + [
             "--layout-tests-directory=@WrappedPath(" + rebase_path(
                     "//third_party/devtools-frontend/src/test/webtests",
                     root_out_dir) + ")",
             "http/tests/devtools",
           ]

    data_deps = [ ":blink_web_tests_support_data" ]
    data = [ "//third_party/devtools-frontend/src/test/webtests/" ]
  }

  script_test("webgpu_blink_web_tests") {
    # This target differs from :blink_web_tests in that it uses the same
    # test harness and a few additional flags but, more importantly, only runs
    # the web_tests/wpt_internal/webgpu tests, so it doesn't have a data
    # dependency on the whole web_test directory.
    script = _common_web_test_script

    args = _common_web_test_args
    if (is_asan) {
      args += [ "--timeout-ms=30000" ]
    }
    args += [
      "--ignore-default-expectations",
      "--additional-expectations",
      "@WrappedPath(../../third_party/blink/web_tests/WebGPUExpectations)",
      "--isolated-script-test-filter=wpt_internal/webgpu/*",
    ]

    data_deps = [
      ":blink_web_tests_support_data",
      "//third_party/webgpu-cts",
    ]
    data = [
      "//third_party/blink/web_tests/external/wpt/common/",
      "//third_party/blink/web_tests/external/wpt/resources/",
      "//third_party/blink/web_tests/FlagSpecificConfig",
      "//third_party/blink/web_tests/VirtualTestSuites",
      "//third_party/blink/web_tests/WebGPUExpectations",
      "//third_party/blink/web_tests/wpt_internal/",
      "//third_party/webgpu-cts/scripts/",
    ]
  }

  copy("layout_test_data_mojo_bindings") {
    testonly = true

    sources = [ "$root_gen_dir/mojo/public/js/mojo_bindings.js" ]

    outputs =
        [ "$root_gen_dir/layout_test_data/mojo/public/js/mojo_bindings.js" ]

    deps = [ "//mojo/public/js:bindings" ]
  }

  copy("layout_test_data_mojo_bindings_lite") {
    testonly = true

    sources = [ "$root_gen_dir/mojo/public/js/mojo_bindings_lite.js" ]

    outputs = [
      "$root_gen_dir/layout_test_data/mojo/public/js/mojo_bindings_lite.js",
    ]

    deps = [ "//mojo/public/js:bindings_lite" ]
  }

  script_test("blink_python_tests") {
    script = "//testing/scripts/run_isolated_script_test.py"
    args = [ "@WrappedPath(" +
             rebase_path("//third_party/blink/tools/run_blinkpy_tests.py",
                         root_build_dir) + ")" ]

    data = [
      # These tests use //build/android/devil_chromium.py even when !is_android,
      # so cannot use the helpers in //build/android (they assert(is_android)).
      "//build/android/",
      "//build/gn_helpers.py",
      "//build/config/gclient_args.gni",
      "//build/skia_gold_common/",
      "//components/crash/content/tools/generate_breakpad_symbols.py",
      "//testing/unexpected_passes_common/",
      "//testing/flake_suppressor_common/",
      "//third_party/blink/renderer/bindings/scripts/",
      "//third_party/blink/renderer/build/scripts/",
      "//third_party/blink/tools/",
      "//third_party/blink/web_tests/ASANExpectations",
      "//third_party/blink/web_tests/FlagExpectations/",
      "//third_party/blink/web_tests/LeakExpectations",
      "//third_party/blink/web_tests/MSANExpectations",
      "//third_party/blink/web_tests/NeverFixTests",
      "//third_party/blink/web_tests/SlowTests",
      "//third_party/blink/web_tests/StaleTestExpectations",
      "//third_party/blink/web_tests/TestExpectations",
      "//third_party/blink/web_tests/VirtualTestSuites",
      "//third_party/blink/web_tests/W3CImportExpectations",
      "//third_party/catapult/common/py_utils/",
      "//third_party/catapult/devil/",
      "//third_party/catapult/dependency_manager/",
      "//third_party/catapult/third_party/typ/",
      "//third_party/depot_tools/pylint-2.7",
      "//third_party/depot_tools/pylint_main.py",
      "//third_party/depot_tools/pylintrc",
      "//third_party/ply/",
      "//third_party/pyjson5/",
      "//third_party/wpt_tools/",
      "//tools/idl_parser/",
    ]

    data_deps = [ "//ui/base:goldctl" ]
  }
}

# TODO(cassew): Add more OS's that don't support x86.
is_valid_x86_target =
    target_os != "ios" && target_os != "mac" &&
    (target_os != "linux" || use_libfuzzer || !build_with_chromium)

# Note: v8_target_cpu == arm allows using the V8 arm simulator on x86 for fuzzing.
assert(
    is_valid_x86_target || target_cpu != "x86" || v8_target_cpu == "arm",
    "'target_cpu=x86' is not supported for 'target_os=$target_os'. Consider omitting 'target_cpu' (default) or using 'target_cpu=x64' instead.")

group("chromium_builder_perf") {
  testonly = true

  if (!is_ios && !is_android && !is_castos && !is_cronet_build) {
    data_deps = [
      "//chrome/test:load_library_perf_tests",
      "//chrome/test:performance_test_suite",
      "//components/tracing:tracing_perftests",
      "//gpu:command_buffer_perftests",
      "//gpu:gpu_perftests",
      "//media:media_perftests",
      "//tools/perf/chrome_telemetry_build:telemetry_chrome_test",
    ]

    if (!is_chromeos_ash) {
      data_deps += [ "//chrome/test:performance_browser_tests" ]
    }

    if (!is_win) {
      data_deps +=
          [ "//third_party/breakpad:minidump_stackwalk($host_toolchain)" ]
    }
  }

  if ((is_linux && !is_castos) || is_chromeos_lacros) {
    if (is_official_build) {
      # In GN builds, this is controlled by the 'linux_dump_symbols'
      # flag, which defaults to 1 for official builds. For now,
      # we skip the separate flag and just key off of is_official_build.
      data_deps += [ "//chrome:linux_symbols" ]
    }

    data_deps += [ "//tools/perf/clear_system_cache" ]
  }

  if (is_win) {
    data_deps += [
      "//chrome/installer/mini_installer:mini_installer",
      "//components:components_perftests",
      "//third_party/angle/src/tests:angle_perftests",
    ]
  }

  # An `if (is_fuchsia)` condition in //chrome/test/BUILD.gn prevents this
  # target from being defined.
  # TODO(crbug.com/1310086): Resolve that and remove this exception.
  if (is_fuchsia) {
    data_deps -= [ "//chrome/test:performance_test_suite" ]
  }
}

if (!is_ios && !is_android && !is_castos && !is_cronet_build) {
  group("chromium_builder_asan") {
    testonly = true

    deps = [
      "//chrome:chrome",
      "//content/shell:content_shell",
      "//third_party/blink/public/mojom:mojom_modules_js",
      "//v8:d8",
    ]
    if (!is_win) {
      deps += [ "//skia:filter_fuzz_stub" ]
    }
    if (enable_ipc_fuzzer && !is_component_build) {
      deps += [ "//tools/ipc_fuzzer:ipc_fuzzer_all" ]
    }
    if (!is_chromeos_ash) {
      deps += [
        "//third_party/pdfium/samples:pdfium_test",
        "//v8:v8_shell($v8_snapshot_toolchain)",
      ]
    }

    if (!is_component_build) {
      # See https://bugs.chromium.org/p/chromium/issues/detail?id=942546#c11.
      deps += [
        "//third_party/webrtc/rtc_tools:rtp_generator",
        "//third_party/webrtc/rtc_tools:video_replay",
      ]
    }

    if (build_dawn_tests) {
      deps += [ "//third_party/dawn/src/tint/fuzzers:fuzzers" ]
    }
  }
}

if (is_android && !is_cronet_build) {
  group("optimize_gn_gen") {
    deps = [
      # These run expensive scripts in non-default toolchains. Generally, host
      # toolchain targets are loaded in the later part of the run, and the
      # result is they push out the end of generation. By preloading these, the
      # scripts can be parallelized with the rest of the load.
      "//build/config/linux(//build/toolchain/linux:clang_x64)",
      "//build/config/posix(//build/toolchain/linux:clang_x64)",

      # Include x86 toolchains as well since V8 uses them for 32-bit snapshot
      # generation.
      "//build/config/linux(//build/toolchain/linux:clang_x86)",
      "//build/config/posix(//build/toolchain/linux:clang_x86)",
    ]
  }
}

if (is_chromeos_ash && enable_js_type_check) {
  group("webui_closure_compile") {
    testonly = true
    data_deps = [
      "ash/webui:closure_compile",
      "chrome/browser/resources:closure_compile",
      "chrome/test/data/webui:closure_compile",
      "mojo/public/tools/bindings/generators/js_templates/lite/test:closure_compile",
      "mojo/public/tools/bindings/generators/js_templates/lite/test:closure_compile_modules",
      "ui/file_manager:closure_compile",
    ]
  }
}

# Write debug logs to gn_logs.txt.
_lines = [
           "Generated during 'gn gen' by //BUILD.gn.",
           "",
         ] + build_gn_logs

# GN evaluates each .gn file once per toolchain, so restricting to default
# toolchain will ensure write_file() is called only once.
assert(current_toolchain == default_toolchain)

write_file("$root_build_dir/gn_logs.txt", _lines)
