chromium/fuchsia_web/webengine/web_instance.cml

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

// A component manifest used by WebInstanceHost when creating a Context for
// which the caller does not provide a service_directory in its
// CreateContextParams.
{
  include: [
    "//fuchsia_web/webengine/web_instance-common.shard.cml",
    "inspect/client.shard.cml",
    "syslog/client.shard.cml",
  ],

  // These uses are based on https://fuchsia.dev/reference/fidl/fuchsia.web,
  // especially
  // https://fuchsia.dev/reference/fidl/fuchsia.web#CreateContextParams.
  use: [
    {
      // Required capabilities for all configurations.
      protocol: [
        "fuchsia.buildinfo.Provider",
        "fuchsia.device.NameProvider",
        "fuchsia.fonts.Provider",
        "fuchsia.hwinfo.Product",
        "fuchsia.intl.PropertyProvider",
        // "fuchsia.kernel.VmexResource" is optional below.
        // "fuchsia.logger/LogSink", is included by the shard above.
        "fuchsia.memorypressure.Provider",
        "fuchsia.process.Launcher",
        "fuchsia.sysmem.Allocator",
        "fuchsia.sysmem2.Allocator",
      ],
    },
    {
      // Optional capabilities, dependent on `ContextFeatureFlags` and other
      // optional functionality. Protocols for `ContextFeatureFlags` are listed
      // in the order in which they are defined. after those for other
      // functionality.
      protocol: [
        // Allows CPU scheduling profiles to be applied to threads to
        // tune their performance, especially for media rendering.
        // TODO(crbug.com/42050308): Migrate to `fuchsia.scheduler`.
        "fuchsia.media.ProfileProvider",

        // Optionally used by the tracing service.
        // TODO(crbug.com/42050521): Provide conditionally when enabled.
        "fuchsia.tracing.perfetto.ProducerConnector",

        // Required for `Frame.SetPreferredTheme(DEFAULT)`.
        "fuchsia.settings.Display",

        // Required by `ContextFeatureFlags.NETWORK`.
        "fuchsia.net.interfaces.State",
        "fuchsia.net.name.Lookup",
        "fuchsia.posix.socket.Provider",

        // Required by `ContextFeatureFlags.AUDIO`.
        "fuchsia.media.Audio",
        "fuchsia.media.AudioDeviceEnumerator",
        "fuchsia.media.SessionAudioConsumerFactory",

        // Required by `ContextFeatureFlags.VULKAN`.
        // These are the protocols not already required that
        //`vulkan/client.shard.cml` provides. That shard cannot be used because
        // it *requires* the Loader protocol.
        // "fuchsia.tracing.provider.Registry" is optionally used by the
        // tracing service.
        "fuchsia.vulkan.loader.Loader",
        "fuchsia.tracing.provider.Registry",

        // Required by `ContextFeatureFlags.HARDWARE_VIDEO_DECODER`.
        "fuchsia.mediacodec.CodecFactory",

        // Required by `ContextFeatureFlags.WIDEVINE_CDM`.
        // Only needed in builds with enable_widevine=true.
        // TODO(crbug.com/40875562): Move to a shard.
        "fuchsia.media.drm.Widevine",

        // Required by CreateContextParams.playready_key_system.
        // Only needed in builds with enable_widevine && enable_cast_receiver.
        // TODO(crbug.com/40875562): Move to a shard.
        "fuchsia.media.drm.PlayReady",

        // When `ContextFeatureFlags.HEADLESS` is not set, required to use
        // `Frame.CreateView*()`.
        "fuchsia.accessibility.semantics.SemanticsManager",
        "fuchsia.ui.composition.Allocator",
        "fuchsia.ui.composition.Flatland",

        // Required by `ContextFeatureFlags.LEGACY_METRICS`.
        // Only needed in enable_cast_receiver=true builds.
        // TODO(crbug.com/40875562): Move to a shard.
        "fuchsia.legacymetrics.MetricsRecorder",

        // Required by `ContextFeatureFlags.KEYBOARD`.
        "fuchsia.ui.input3.Keyboard",

        // Required by `ContextFeatureFlags.VIRTUAL_KEYBOARD`.
        "fuchsia.input.virtualkeyboard.ControllerCreator",

        // When `ContextFeatureFlags.DISABLE_DYNAMIC_CODE_GENERATION` is not
        // set, required for JavaScript & WebAssembly.
        "fuchsia.kernel.VmexResource",

        // Required for camera access.
        // TODO(crbug.com/42050280): Add ContextFeatureFlag and reference here.
        "fuchsia.camera3.DeviceWatcher",
      ],
      availability: "optional",
    },
  ],
}