# 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-gn-sdk/src/component.gni")
  import("//third_party/fuchsia-gn-sdk/src/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",
      "//testing/libfuzzer/tests",
      "//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/gfx:gfx_unittests",
      "//ui/tests:ui_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/actions:dump_actions",
        "//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_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_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/wm:wm_unittests",
      ]
    }

    if (use_aura || is_mac) {
      deps += [ "//ui/webui/examples:webui_examples" ]
    }

    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/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",
        "//components/ip_protection_auth/javatests:ip_protection_auth_test_apk",
        "//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/jni_zero/samples:jni_generator_tests",
        "//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/captured_sites_tests:captured_sites_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",

        # Windows virtual display driver testing executable.
        "//third_party/win_virtual_display/controller:display_driver_controller_executable",
      ]

      # 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(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:fuzzers",
        "//third_party/dawn/src/tint:tests",
      ]
    }

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

    # Rust build targets.
    if (enable_rust) {
      deps += [ ":all_rust" ]
    }

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

  if (is_chrome_for_testing) {
    deps += [ "//chrome/browser/chrome_for_testing:chrome_for_testing" ]
  }
}

# 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

  deps = [ ":rust_build_tests" ]

  # There is rust stuff behind flags in here.
  deps += [ "//base:base_unittests" ]

  if (enable_rust_mojo) {
    deps += [
      "//mojo/public/rust",
      "//mojo/public/rust:mojo_rust_integration_unittests",
      "//mojo/public/rust:mojo_rust_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 = [
      ":blink_wpt_tests",
      ":chrome_official_builder_no_unittests",
      "//base:base_unittests",
      "//chrome/test:browser_tests",
      "//chrome/test:interactive_ui_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_ppapi) {
      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/chromeos:image_processor_perf_test",
          "//media/gpu/v4l2:v4l2_stateless_decoder",
          "//media/gpu/v4l2:v4l2_unittest",
        ]
      }
    }
  }
}

if (use_blink && !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 && !is_ios) {
      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) {
    script_test("chrome_wpt_tests") {
      script = "//third_party/blink/tools/run_wpt_tests.py"
      args = [
        "--product=chrome",
        "--no-show-results",
        "--zero-tests-executed-ok",
      ]
      data_deps = [
        "//chrome:chrome",
        "//chrome/test/chromedriver:chromedriver_server",
        "//third_party/blink/tools:wpt_tests_isolate",
      ]
    }
    script_test("content_shell_wpt") {
      script = "//third_party/blink/tools/run_wpt_tests.py"
      args = [
        "--no-show-results",
        "--zero-tests-executed-ok",
      ]
      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:gen_files_for_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/blink/web_tests/TestLists/",
      "//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/apache-windows-arm64/",
        "//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/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/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/performance_timeline/",
      "//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/",
        "//third_party/blink/web_tests/platform/win11-arm64/",
      ]
      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/platform/mac/",
        "//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/",
      ]
    }
  }

  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/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/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/platform/mac/",
        "//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/",
      ]
    }
  }

  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/blink/web_tests/paint/invalidation/repaint-overlay/",
      "//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/",
    ]

    if (is_ios) {
      data += [ "//third_party/blink/web_tests/IOSTestExpectations" ]
    }

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

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)
