# 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",
    "services.cc",
    "services.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/tracing:lib",
    "//services/tracing/public/mojom",
    "//services/video_capture:lib",
    "//services/video_capture/public/mojom:constants",
    "//services/viz:lib",
    "//third_party/blink/public:blink_headers",
    "//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",
    ]
  }
}
