# Copyright 2020 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.

import("//tools/cmc/build/expect_includes.gni")

# `fuchsia.web.ContextProvider.Create` may be used.
# Does not apply to launching a `fuchsia.web.ContextProvider` implementation.
expect_includes("context_provider_create_base") {
  includes = [ "context_provider_create_base.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::AUDIO` may be specified.
expect_includes("context_provider_create_with_audio") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_audio.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::HARDWARE_VIDEO_DECODER` may be specified.
expect_includes("context_provider_create_with_hardware_video_decoder") {
  deps = [ ":context_provider_create_with_vulkan" ]
  includes = [ "context_provider_create_with_hardware_video_decoder.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::KEYBOARD` may be specified.
expect_includes("context_provider_create_with_keyboard") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_keyboard.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::NETWORK` may be specified.
expect_includes("context_provider_create_with_network") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_network.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::VIRTUAL_KEYBOARD` may be specified.
expect_includes("context_provider_create_with_virtual_keyboard") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_virtual_keyboard.shard.cml" ]
}

# `fuchsia::web::ContextFeatureFlags::VULKAN` may be specified.
expect_includes("context_provider_create_with_vulkan") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_vulkan.shard.cml" ]
}

# `fuchsia.web.Frame.CreateView*()` may be called.
expect_includes("context_provider_create_with_view") {
  deps = [ ":context_provider_create_base" ]
  includes = [ "context_provider_create_with_view.shard.cml" ]
}
