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

import("//media/media_options.gni")
import("//arkweb/build/features/features.gni")

# Implementations of media C++ interfaces using corresponding mojo services.
source_set("clients") {
  visibility = [
    ":test_support",
    "//chromecast/*",

    # Mirroring Service needs the video accelerated encoder mojom interfaces.
    "//components/mirroring/service:mirroring_service",
    "//content/renderer:*",

    # TODO(xhwang): Only allow //media/mojo/services:unit_tests
    "//chrome/browser:*",
    "//chrome/browser/thumbnail/generator",
    "//content/browser:*",
    "//content/gpu:*",
    "//media/mojo:test_support",
    "//media/mojo/services:*",
    "//media/test/*",

    # TODO(liberato): can we avoid this?
    "//content/test/*",
    "//third_party/blink/renderer/modules/mediarecorder",
    "//third_party/blink/renderer/modules/peerconnection",
    "//third_party/blink/renderer/modules/webcodecs",
    "//third_party/blink/renderer/platform",
  ]

  sources = [
    "mojo_audio_decoder.cc",
    "mojo_audio_decoder.h",
    "mojo_audio_encoder.cc",
    "mojo_audio_encoder.h",
    "mojo_cdm.cc",
    "mojo_cdm.h",
    "mojo_cdm_factory.cc",
    "mojo_cdm_factory.h",
    "mojo_codec_factory.cc",
    "mojo_codec_factory.h",
    "mojo_codec_factory_mojo_decoder.cc",
    "mojo_codec_factory_mojo_decoder.h",
    "mojo_decoder_factory.cc",
    "mojo_decoder_factory.h",
    "mojo_decryptor.cc",
    "mojo_decryptor.h",
    "mojo_demuxer_stream_impl.cc",
    "mojo_demuxer_stream_impl.h",
    "mojo_gpu_video_accelerator_factories.cc",
    "mojo_gpu_video_accelerator_factories.h",
    "mojo_media_log_service.cc",
    "mojo_media_log_service.h",
    "mojo_renderer.cc",
    "mojo_renderer.h",
    "mojo_renderer_factory.cc",
    "mojo_renderer_factory.h",
    "mojo_renderer_wrapper.cc",
    "mojo_renderer_wrapper.h",
    "mojo_video_decoder.cc",
    "mojo_video_decoder.h",
    "mojo_video_encode_accelerator.cc",
    "mojo_video_encode_accelerator.h",
    "mojo_video_encoder_metrics_provider.cc",
    "mojo_video_encoder_metrics_provider.h",
  ]

  if (is_android) {
    sources += [
      "mojo_android_overlay.cc",
      "mojo_android_overlay.h",
    ]
  }

  public_deps = [
    "//base",
    "//media",
    "//media/mojo:buildflags",
    "//media/mojo/mojom",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/mojom",
    "//services/viz/public/cpp/gpu",
  ]

  deps = [
    "//media/gpu",
    "//media/mojo/common",
    "//services/service_manager/public/cpp",
  ]

  if (is_android) {
    deps += [
      "//gpu/ipc/common",
      "//ui/gl",
    ]
  }
  if (is_win) {
    sources += [
      "win/media_foundation_renderer_client.cc",
      "win/media_foundation_renderer_client.h",
      "win/media_foundation_renderer_client_factory.cc",
      "win/media_foundation_renderer_client_factory.h",
    ]
  }

  if (is_fuchsia) {
    sources += [
      "mojo_codec_factory_fuchsia.cc",
      "mojo_codec_factory_fuchsia.h",
      "mojo_fuchsia_cdm_provider.cc",
      "mojo_fuchsia_cdm_provider.h",
    ]

    deps += [
      "//media/fuchsia/video",
      "//third_party/blink/public:blink_headers",
    ]
  }

  if (enable_arkweb) {
    deps += [ "//arkweb/build/features" ]
  }

  if (enable_arkweb) {
    public_deps += [ "//arkweb/build/features" ]
  }
}

static_library("test_support") {
  testonly = true

  sources = [
    "mock_mojo_video_encoder_metrics_provider_factory.cc",
    "mock_mojo_video_encoder_metrics_provider_factory.h",
  ]

  deps = [
    ":clients",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "mojo_audio_decoder_unittest.cc",
    "mojo_audio_encoder_unittest.cc",
    "mojo_cdm_unittest.cc",
    "mojo_decryptor_unittest.cc",
    "mojo_gpu_video_accelerator_factories_unittest.cc",
    "mojo_renderer_unittest.cc",
    "mojo_video_encode_accelerator_unittest.cc",
    "mojo_video_encoder_metrics_provider_unittest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//gpu:test_support",
    "//gpu/ipc/common:test_support",
    "//media:test_support",
    "//media/mojo:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (is_android) {
    sources += [ "mojo_android_overlay_unittest.cc" ]

    deps += [
      "//media/mojo/mojom:test_interfaces",
      "//ui/gfx:test_support",
      "//ui/gl",
    ]
  }

  if (is_win) {
    sources += [ "win/media_foundation_renderer_client_unittest.cc" ]

    deps += [
      "//content/public/renderer",
      "//content/renderer",
      "//media",
    ]
  }

  if (enable_arkweb) {
    deps += [ "//arkweb/build/features" ]
  }

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}