// Copyright 2022 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.

// This shard contains the minimum set of capabilities required to create a
// `fuchsia.web.Context`(aka `web_instance`) via `fuchsia.web.ContextProvider`.
// per https://fuchsia.dev/reference/fidl/fuchsia.web#CreateContextParams.
// It includes `use` declarations for all capabilities whose `use` is required
// in Chromium's `web_instance.cml` as well as optional but recommended
// capabilities for which use is not explicitly controlled.
//
// Include this shard when `fuchsia.web.ContextProvider.Create` may be used.
// Capabilities only required by ContextProvider are not included.
//
{
    include: [ "syslog/client.shard.cml" ],
    use: [
        {
            protocol: [
                "fuchsia.buildinfo.Provider",
                "fuchsia.device.NameProvider",
                "fuchsia.fonts.Provider",
                "fuchsia.hwinfo.Product",
                "fuchsia.intl.PropertyProvider",
                "fuchsia.kernel.VmexResource", // Assuming JavaScript desired.

                // "fuchsia.logger/LogSink", is included by the shard above.
                "fuchsia.memorypressure.Provider",
                "fuchsia.process.Launcher",
                "fuchsia.sysmem.Allocator",
                "fuchsia.sysmem2.Allocator",
            ],
        },
        {
            protocol: [
                // TODO(crbug.com/1224707): Migrate to `fuchsia.scheduler`.
                "fuchsia.media.ProfileProvider",

                // The `web_instance` attempts to connect to this service.
                // Tests may pass a clone of the test component's Service
                // Directory in the `Create()` call. Including it here
                // suppresses "proper `use` declaration" warnings.
                // If the protocol is not actually provided, an "Optional
                // protocol `fuchsia.tracing.perfetto.ProducerConnector` was
                // not available for target component" message will be logged.
                // TODO(crbug.com/1364196): Provide and use conditionally when
                // enabled once WebEngine respects the same condition.
                "fuchsia.tracing.perfetto.ProducerConnector",
            ],
            availability: "optional",
        },
    ],
}
