# Copyright 2019 The Chromium 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("//mojo/public/tools/bindings/mojom.gni")

mojom("mojom") {
  sources = [ "fuchsia_media_resource_provider.mojom" ]

  export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/public/platform/web_common.h"

  shared_cpp_typemaps = {
    types = [
      {
        mojom = "media.mojom.AudioConsumerRequest"
        cpp = "::fidl::InterfaceRequest<::fuchsia::media::AudioConsumer>"
        move_only = true
      },
      {
        mojom = "media.mojom.AudioCapturerRequest"
        cpp = "::fidl::InterfaceRequest<::fuchsia::media::AudioCapturer>"
        move_only = true
      },
    ]
    traits_headers = [ "fuchsia_media_resource_provider_mojom_traits.h" ]
    traits_public_deps = [
      "//fuchsia/mojom:traits",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.media",
    ]
  }

  cpp_typemaps = [ shared_cpp_typemaps ]
  blink_cpp_typemaps = [ shared_cpp_typemaps ]
}

mojom("cdm_provider") {
  sources = [ "fuchsia_cdm_provider.mojom" ]

  export_class_attribute_blink = "BLINK_PLATFORM_EXPORT"
  export_define_blink = "BLINK_PLATFORM_IMPLEMENTATION=1"
  export_header_blink = "third_party/blink/public/platform/web_common.h"

  shared_cpp_typemaps = {
    types = [
      {
        mojom = "media.mojom.CdmRequest"
        cpp = "::fidl::InterfaceRequest<::fuchsia::media::drm::ContentDecryptionModule>"
        move_only = true
      },
    ]
    traits_headers = [ "fuchsia_cdm_provider_mojom_traits.h" ]
    traits_public_deps = [
      "//fuchsia/mojom:traits",
      "//third_party/fuchsia-sdk/sdk/fidl/fuchsia.media.drm",
    ]
  }

  cpp_typemaps = [ shared_cpp_typemaps ]
  blink_cpp_typemaps = [ shared_cpp_typemaps ]
}
