# Copyright 2017 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("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("video_decode_stats_proto") {
  sources = [
    "video_decode_stats.proto",
  ]
}

source_set("capabilities") {
  # Do not expand the visibility here without double-checking with OWNERS, this
  # is a roll-up target which is part of the //media component. Most other DEPs
  # should be using //media and not directly DEP this roll-up target.
  visibility = [ "//media" ]

  sources = [
    "bucket_utility.cc",
    "bucket_utility.h",
    "in_memory_video_decode_stats_db_impl.cc",
    "in_memory_video_decode_stats_db_impl.h",
    "video_decode_stats_db.cc",
    "video_decode_stats_db.h",
    "video_decode_stats_db_impl.cc",
    "video_decode_stats_db_impl.h",
    "video_decode_stats_db_provider.cc",
    "video_decode_stats_db_provider.h",
  ]

  public_deps = [
    ":video_decode_stats_proto",
    "//base",
    "//components/leveldb_proto",
    "//media/base",
    "//ui/gfx/geometry",
  ]

  configs += [ "//media:subcomponent_config" ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "in_memory_video_decode_stats_db_unittest.cc",
    "video_decode_stats_db_unittest.cc",
  ]

  deps = [
    # Explicitly adding the proto lib here (in addition to "capabilities"
    # public_deps), because the generated files seem not to be available through
    # the transitive "capabilities" target (via media:test_support -> media).
    ":video_decode_stats_proto",
    "//base/test:test_support",
    "//components/leveldb_proto:test_support",
    "//media:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
