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

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

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

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

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

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

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

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

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

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

group("gn_all") {
  testonly = true

  if (is_cronet_build) {
    if (is_android) {
      deps = [ "//components/cronet/android:cronet_package_android" ]
    } else if (is_ios) {
      deps = [ "//components/cronet/ios:cronet_package_ios" ]
    } else {
      deps = []
    }
  } else {
    deps = [
      "//base:base_perftests",
      "//base:base_unittests",
      "//codelabs",
      "//components:components_unittests",
      "//components/gwp_asan:gwp_asan_unittests",
      "//infra/orchestrator:orchestrator_all",
      "//net:net_unittests",
      "//sandbox:sandbox_unittests",
      "//services:services_unittests",
      "//services/service_manager/public/cpp",
      "//skia:skia_unittests",
      "//sql:sql_unittests",
      "//third_party/angle/src/tests:angle_end2end_tests",
      "//third_party/angle/src/tests:angle_unittests",
      "//third_party/angle/src/tests:angle_white_box_tests",
      "//third_party/flatbuffers:flatbuffers_unittests",
      "//third_party/liburlpattern:liburlpattern_unittests",
      "//tools/binary_size:binary_size_trybot_py",
      "//tools/ipc_fuzzer:ipc_fuzzer_all",
      "//tools/metrics:metrics_metadata",
      "//ui/base:ui_base_unittests",
      "//ui/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_browsertests",
        "//chrome/test:lacros_chrome_unittests",
      ]
    }

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

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

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

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

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

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

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

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

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

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

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

    # Rust build targets.
    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/",
    ]

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

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

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

group("chromium_builder_perf") {
  testonly = true

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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