# Copyright 2021 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# The allowlist of components that can use the "structured_config" feature in CML.
group("structured_config") {
  # Available to all components in fuchsia.git
}

# The allowlist of components that can use dictionaries in CML.
group("dictionaries") {
  visibility = [
    "//src/session/bin/session_manager:*",
    "//src/sys/component_manager/tests/*",
    "//vendor/google/boards/*",
  ]
}

# The allowlist of components that can use config capabilities in CML.
group("config_capabilities") {
  visibility = [
    "//sdk/lib/driver_test_realm/*",
    "//src/connectivity/policy/http-client/*",
    "//src/graphics/tests/vkext:*",
    "//src/graphics/tests/vkloop:*",
    "//src/sys/component_manager/tests/*",
  ]
}

# The allowlist of components that can customize timing of request delivery in CML.
group("delivery_type") {
  visibility = [
    "//src/connectivity/policy/http-client/*",
    "//src/sys/component_manager/tests/*",
  ]
}

# The allowlist of components that can use the "allow_long_names" feature in CML.
group("allow_long_names") {
  visibility = [
    # driver collections
    "//sdk/lib/driver_test_realm/*",
    "//src/devices/bin/driver_manager/*",
    "//src/sys/bootstrap/*",
    "//tools/cmc:*",
  ]
}

# The allowlist of test components that can resolve non-hermetic packages.
# Don't add any more dependencies to this. See
# https://fuchsia.dev/fuchsia-src/development/testing/components/test_runner_framework?hl=en#hermetic-resolver
group("allow_non_hermetic_packages") {
  visibility = [
    "//src/chromium/web_runner_tests:*",
    "//src/connectivity/bluetooth/lib/fuchsia-audio-codec:*",
    "//src/connectivity/bluetooth/profiles/bt-a2dp:*",
    "//src/connectivity/bluetooth/profiles/bt-hfp-audio-gateway:*",
    "//src/connectivity/bluetooth/profiles/tests/bt-a2dp-loopback:*",
    "//src/connectivity/bluetooth/profiles/tests/bt-a2dp-source-integration-tests:*",
    "//src/connectivity/network/testing/netemul/runner/tests:*",
    "//src/graphics/tests/vkvalidation:*",
    "//src/identity/tests/account_manager_integration:*",
    "//src/media/codec/examples:*",
    "//src/media/stream_processors/test:*",
    "//src/recovery/integration/ota:*",
    "//src/sys/pkg/tests/isolated-ota:*",
    "//src/sys/run_test_suite/tests:*",
    "//src/sys/test_manager/tests:*",
    "//src/sys/test_manager/tests/nonhermetic_packaged_tests:*",
    "//src/sys/test_runners/elf/tests:*",
    "//src/sys/test_runners/fuzz/tests:*",
    "//src/sys/test_runners/gotests/tests:*",
    "//src/sys/test_runners/gtest/tests:*",
    "//src/sys/test_runners/gunit/tests:*",
    "//src/sys/test_runners/inspect/tests:*",
    "//src/sys/test_runners/rust/tests:*",
    "//src/sys/test_runners/stress_test/tests:*",
    "//src/testing/system-validation/web:*",
    "//src/tests/intl/timezone:*",
    "//src/ui/a11y/lib/semantics/tests:*",
    "//src/ui/tests/integration_graphics_tests/web-pixel-tests:*",
    "//src/ui/tests/integration_input_tests/mouse:*",
    "//src/ui/tests/integration_input_tests/text-input:*",
    "//src/ui/tests/integration_input_tests/touch:*",
    "//src/ui/tests/integration_input_tests/virtual-keyboard:*",
    "//src/ui/tests/integration_input_tests/web-touch-input:*",
    "//vendor/google/bin/*",
    "//vendor/google/media/*",
  ]
}

# The allowlist of components that can use the "enable_allow_non_hermetic_packages_feature" feature in CML.
group("enable_allow_non_hermetic_packages_feature") {
  # Available to all components in fuchsia.git
}

# The allowlist of components that can use the "restrict_test_type_in_facets" feature in CML.
group("restrict_test_type_in_facets") {
  # Available to all components in fuchsia.git
}
