# 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")

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",
    "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",
    "//cc/blink",
    "//gpu",
    "//media",
    "//media:shared_memory_support",
    "//media/mojo/interfaces",
    "//net",
    "//services/service_manager/public/cpp:cpp",
    "//skia",
    "//third_party/WebKit/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",
    "//cc/blink",
    "//gin",
    "//media:test_support",
    "//media/mojo/interfaces",
    "//media/mojo/services",
    "//mojo/edk/system",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/public:blink",
    "//third_party/WebKit/public:test_support",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
    "//url",
  ]

  configs += [
    "//build/config/compiler:no_size_t_to_int_warning",
    "//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",
    "webmediaplayer_impl_unittest.cc",
  ]

  if (is_android) {
    deps += [
      "//media/base/android:media_java",
      "//v8:v8_external_startup_data_assets",
    ]
  }
}
