# Copyright 2014 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("//media/media_options.gni")
import("//testing/test.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")

component("blink") {
  output_name = "media_blink"

  sources = [
    "buffered_data_source_host_impl.cc",
    "buffered_data_source_host_impl.h",
    "cache_util.cc",
    "cache_util.h",
    "cdm_result_promise.h",
    "cdm_result_promise_helper.cc",
    "cdm_result_promise_helper.h",
    "cdm_session_adapter.cc",
    "cdm_session_adapter.h",
    "interval_map.h",
    "key_system_config_selector.cc",
    "key_system_config_selector.h",
    "lru.h",
    "media_blink_export.h",
    "multibuffer.cc",
    "multibuffer.h",
    "multibuffer_data_source.cc",
    "multibuffer_data_source.h",
    "multibuffer_reader.cc",
    "multibuffer_reader.h",
    "new_session_cdm_result_promise.cc",
    "new_session_cdm_result_promise.h",
    "remote_playback_client_wrapper_impl.cc",
    "remote_playback_client_wrapper_impl.h",
    "resource_fetch_context.h",
    "resource_multibuffer_data_provider.cc",
    "resource_multibuffer_data_provider.h",
    "texttrack_impl.cc",
    "texttrack_impl.h",
    "url_index.cc",
    "url_index.h",
    "video_decode_stats_reporter.cc",
    "video_decode_stats_reporter.h",
    "video_frame_compositor.cc",
    "video_frame_compositor.h",
    "watch_time_reporter.cc",
    "watch_time_reporter.h",
    "webaudiosourceprovider_impl.cc",
    "webaudiosourceprovider_impl.h",
    "webcontentdecryptionmodule_impl.cc",
    "webcontentdecryptionmodule_impl.h",
    "webcontentdecryptionmoduleaccess_impl.cc",
    "webcontentdecryptionmoduleaccess_impl.h",
    "webcontentdecryptionmodulesession_impl.cc",
    "webcontentdecryptionmodulesession_impl.h",
    "webencryptedmediaclient_impl.cc",
    "webencryptedmediaclient_impl.h",
    "webinbandtexttrack_impl.cc",
    "webinbandtexttrack_impl.h",
    "webmediacapabilitiesclient_impl.cc",
    "webmediacapabilitiesclient_impl.h",
    "webmediaplayer_delegate.h",
    "webmediaplayer_params.cc",
    "webmediaplayer_params.h",
    "webmediaplayer_util.cc",
    "webmediaplayer_util.h",
    "webmediasource_impl.cc",
    "webmediasource_impl.h",
    "websourcebuffer_impl.cc",
    "websourcebuffer_impl.h",
  ]

  defines = [ "MEDIA_BLINK_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//cc",
    "//gpu",
    "//media",
    "//media:shared_memory_support",
    "//media/mojo/interfaces",
    "//net",
    "//services/service_manager/public/cpp:cpp",
    "//skia",
    "//third_party/blink/public:blink",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]

  if (media_use_ffmpeg || !is_android) {
    sources += [
      "webmediaplayer_impl.cc",
      "webmediaplayer_impl.h",
    ]
    if (is_android) {
      sources += [
        "webmediaplayer_cast_android.cc",
        "webmediaplayer_cast_android.h",
      ]
      deps += [ "//gpu/command_buffer/client:gles2_interface" ]
    }
  }
}

test("media_blink_unittests") {
  deps = [
    ":blink",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//gin",
    "//media:test_support",
    "//media/mojo/interfaces",
    "//media/mojo/services",
    "//mojo/edk",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/public:blink",
    "//third_party/blink/public:test_support",
    "//tools/v8_context_snapshot",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
    "//url",
  ]

  data = [
    "//media/test/data/",
  ]

  configs += [
    "//build/config/compiler:no_size_t_to_int_warning",
    "//tools/v8_context_snapshot:use_v8_context_snapshot",
    "//v8:external_startup_data",
  ]

  sources = [
    "buffered_data_source_host_impl_unittest.cc",
    "cache_util_unittest.cc",
    "interval_map_unittest.cc",
    "key_system_config_selector_unittest.cc",
    "lru_unittest.cc",
    "mock_resource_fetch_context.cc",
    "mock_resource_fetch_context.h",
    "mock_webassociatedurlloader.cc",
    "mock_webassociatedurlloader.h",
    "multibuffer_data_source_unittest.cc",
    "multibuffer_unittest.cc",
    "resource_multibuffer_data_provider_unittest.cc",
    "run_all_unittests.cc",
    "test_response_generator.cc",
    "test_response_generator.h",
    "url_index_unittest.cc",
    "video_decode_stats_reporter_unittest.cc",
    "video_frame_compositor_unittest.cc",
    "watch_time_reporter_unittest.cc",
    "webaudiosourceprovider_impl_unittest.cc",
    "webmediacapabilitiesclient_impl_unittest.cc",
    "webmediaplayer_impl_unittest.cc",
  ]

  if (is_android) {
    deps += [ "//media/base/android:media_java" ]
    if (use_v8_context_snapshot) {
      deps += [ "//tools/v8_context_snapshot:v8_context_snapshot_assets" ]
    } else {
      deps += [ "//v8:v8_external_startup_data_assets" ]
    }
  }
}
