# 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/cast.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/ios/config.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("//components/enterprise/buildflags/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("//services/on_device_model/on_device_model.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")
} else {
  import("//chrome/browser/buildflags.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 {
      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/distributed_point_functions/shim:distributed_point_functions_shim_unittests",
      "//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) {
      if (!is_fuchsia) {
        deps += [
          "//chrome",
          "//chrome/browser/ui/actions:dump_actions",
          "//chrome/browser/ui/color:dump_colors",
          "//chrome/test:browser_tests",
        ]
      }
      deps += [
        "//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 && !is_fuchsia) {
      deps += [ "//chrome/installer" ]
    }

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

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

    if (!is_ios && !is_castos) {
      if (!is_fuchsia) {
        deps += [ "//chrome/test:unit_tests" ]
      }
      deps += [ "//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 && !is_fuchsia) {
          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",
        "//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_tests) {
      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_ml_internal) {
      deps +=
          [ "//components/optimization_guide/internal:ondevice_model_example" ]
    }

    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 (enterprise_watermark) {
      deps += [ "//chrome/browser/enterprise/watermark:watermark_app" ]
    }

    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 (enable_platform_experience) {
        deps += [
          "//chrome/browser/platform_experience/win:platform_experience_helper",
        ]
      }
    }

    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: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/android_auth_client_lib/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:jni_zero_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: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/sdk_sandbox",
          "//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 (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 && !is_fuchsia) {
        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",
          "//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",
        "//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",
        "//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_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",
      ]
      if (dcheck_always_on) {
        args += [ "--timeout-multiplier=2" ]
      } else {
        args += [ "--timeout-multiplier=1" ]
      }
      data = [
        "//third_party/blink/web_tests/platform/linux-chrome/",
        "//third_party/blink/web_tests/ChromeTestExpectations",
      ]
      data_deps = [
        ":blink_web_tests_expectations",
        ":blink_web_tests_support_data",
        "//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 = [
        "--test-type",
        "testharness",
        "crashtest",
        "--product=content_shell",
        "--no-virtual-tests",
        "--no-show-results",
        "--zero-tests-executed-ok",
        "--no-retry-failures",
        "--exit-after-n-crashes-or-timeouts=400",
      ]
      data_deps = [
        ":blink_web_tests_expectations",
        ":blink_web_tests_support_data",
        "//chrome/test/chromedriver:chromedriver_server",
        "//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 || (is_ios && target_environment == "simulator")) {
      data += [
        "//third_party/apache-mac/",
        "//third_party/apache-mac-arm64/",
      ]
    }

    if (is_linux || is_chromeos || 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 {
    base_out_dir = rebase_path(get_path_info(root_build_dir, "dir"), ".")
    out_dir = get_path_info(root_build_dir, "name")
    _common_web_test_args = [
      "@WrappedPath(" +
          rebase_path("//third_party/blink/tools/run_web_tests.py",
                      root_build_dir) + ")",
      "--build-directory",
      base_out_dir,
      "--target",
      out_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_chrome_branded) {
    _common_web_test_args += [ "--chrome-branded" ]
  }

  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_expectations",
      ":blink_web_tests_support_data",
    ]
    data = [
      "//third_party/blink/perf_tests/",
      "//third_party/blink/web_tests/VirtualTestSuites",

      # === 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/ppapi/",
      "//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 ===
    ]
  }

  group("blink_web_tests_expectations") {
    testonly = true

    data = [
      # Include virtual baselines.
      "//third_party/blink/web_tests/virtual/",

      # 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",
    ]

    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/",
        "//third_party/blink/web_tests/platform/mac-mac13-arm64/",
        "//third_party/blink/web_tests/platform/mac-mac14-arm64/",
      ]
    }

    # flag-specific tests only runs on linux & mac as of now
    if (is_linux || is_mac) {
      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_expectations",
      ":blink_web_tests_support_data",
    ]
    data = [
      "//third_party/blink/perf_tests/",
      "//third_party/blink/web_tests/VirtualTestSuites",

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

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

  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) + ")",
      "-v",
      "-t",
    ]

    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 = [
      "//components/tracing:tracing_perftests",
      "//gpu:command_buffer_perftests",
      "//gpu:gpu_perftests",
      "//media:media_perftests",
      "//tools/perf/chrome_telemetry_build:telemetry_chrome_test",
    ]

    if (!is_fuchsia) {
      data_deps += [
        "//chrome/test:load_library_perf_tests",
        "//chrome/test:performance_test_suite",
      ]
    }

    if (!is_chromeos_ash && !is_fuchsia) {
      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",
    ]
  }
}

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

    deps = [
      "//content/shell:content_shell",
      "//third_party/blink/public/mojom:mojom_modules_js",
      "//v8:d8",
    ]
    if (!is_fuchsia) {
      deps += [ "//chrome:chrome" ]
    }
    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 += [ "//v8:v8_shell($v8_snapshot_toolchain)" ]
      if (enable_pdf) {
        deps += [ "//third_party/pdfium/samples:pdfium_test" ]
      }
    }

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

# 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)
