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

  deps = [
    "//base",
    "//cc",
    "//cc/blink",
    "//gpu",
    "//media",
    "//media:shared_memory_support",
    "//net",
    "//skia",
    "//third_party/WebKit/public:blink",
    "//third_party/WebKit/public:mojo_bindings",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//url",
  ]

  defines = [ "MEDIA_BLINK_IMPLEMENTATION" ]

  sources = [
    "active_loader.cc",
    "active_loader.h",
    "buffered_data_source.cc",
    "buffered_data_source.h",
    "buffered_data_source_host_impl.cc",
    "buffered_data_source_host_impl.h",
    "buffered_resource_loader.cc",
    "buffered_resource_loader.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_multibuffer_data_provider.cc",
    "resource_multibuffer_data_provider.h",
    "texttrack_impl.cc",
    "texttrack_impl.h",
    "url_index.cc",
    "url_index.h",
    "video_frame_compositor.cc",
    "video_frame_compositor.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",
    "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",
  ]

  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",
      ]
    }
  }
}

test("media_blink_unittests") {
  deps = [
    ":blink",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//cc/blink",
    "//components/scheduler:scheduler",
    "//components/scheduler:test_support",
    "//gin",
    "//media",
    "//media:shared_memory_support",
    "//media/base:test_support",
    "//net",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/public:blink",
    "//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",
    "buffered_data_source_unittest.cc",
    "buffered_resource_loader_unittest.cc",
    "cache_util_unittest.cc",
    "interval_map_unittest.cc",
    "key_system_config_selector_unittest.cc",
    "lru_unittest.cc",
    "mock_webframeclient.h",
    "mock_weburlloader.cc",
    "mock_weburlloader.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_frame_compositor_unittest.cc",
    "webaudiosourceprovider_impl_unittest.cc",
    "webmediaplayer_impl_unittest.cc",
  ]

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