# 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("//build/config/jumbo.gni")
import("//media/media_options.gni")

jumbo_source_set("utility") {
  # Only the public target should depend on this. All other targets (even
  # internal content ones other than test) should depend on the public one.
  visibility = [
    ":for_content_tests",
    "//content/app:*",
    "//content/public/utility:utility_sources",
  ]

  sources = [
    "in_process_utility_thread.cc",
    "in_process_utility_thread.h",
    "utility_blink_platform_with_sandbox_support_impl.cc",
    "utility_blink_platform_with_sandbox_support_impl.h",
    "utility_main.cc",
    "utility_service_factory.cc",
    "utility_service_factory.h",
    "utility_thread_impl.cc",
    "utility_thread_impl.h",
  ]

  configs += [ "//content:content_implementation" ]

  deps = [
    "//base",
    "//content:export",
    "//content/child",
    "//content/public/child:child_sources",
    "//content/public/common:common_sources",
    "//media:media_buildflags",
    "//mojo/public/cpp/bindings",
    "//net:net_with_v8",
    "//sandbox",
    "//services/audio:lib",
    "//services/audio/public/mojom:constants",
    "//services/data_decoder:lib",
    "//services/data_decoder/public/cpp",
    "//services/network:network_service",
    "//services/service_manager",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/mojom",
    "//services/shape_detection:lib",
    "//services/shape_detection/public/mojom",
    "//services/video_capture:lib",
    "//services/video_capture/public/mojom:constants",
    "//services/viz:lib",
    "//third_party/blink/public:blink_headers",
    "//third_party/blink/public:mojo_bindings",
    "//url",
  ]

  # When pepper CDMs are supported, we also support running the CDM in the
  # utility process using mojo MediaService.
  if (enable_library_cdms) {
    deps += [
      "//media",
      "//media/mojo:buildflags",
      "//media/mojo/interfaces:constants",
      "//media/mojo/services",
    ]
  }

  if (is_chromeos) {
    deps += [ "//chromeos/services/ime:sandbox_hook" ]
  }
}

# See comment at the top of //content/BUILD.gn for how this works.
group("for_content_tests") {
  visibility = [ "//content/test/*" ]
  if (!is_component_build) {
    public_deps = [
      ":utility",
    ]
  }
}
