# 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("//ppapi/features/features.gni")

assert(enable_plugins, "PPAPI plugins must be enabled.")

group("ppapi_plugin") {
  visibility = [ "//content/*" ]  # This is an internal content API.

  if (is_component_build) {
    public_deps = [
      "//content",
    ]
  } else {
    public_deps = [
      ":ppapi_plugin_sources",
    ]
  }
}

source_set("ppapi_plugin_sources") {
  # Depend on via ":ppapi_plugin above.
  visibility = [
    ":ppapi_plugin",
    "//content",  # For the component build.
    "//content/app:*",
    "//gin",
    "//services/service_manager/public/cpp",
  ]

  sources = [
    "broker_process_dispatcher.cc",
    "broker_process_dispatcher.h",
    "plugin_process_dispatcher.cc",
    "plugin_process_dispatcher.h",
    "ppapi_blink_platform_impl.cc",
    "ppapi_blink_platform_impl.h",
    "ppapi_broker_main.cc",
    "ppapi_plugin_main.cc",
    "ppapi_thread.cc",
    "ppapi_thread.h",
  ]

  configs += [
    "//content:content_implementation",
    "//v8:external_startup_data",
  ]

  deps = [
    "//base",
    "//components/discardable_memory/client",
    "//content:export",
    "//content/child",
    "//content/public/child:child_sources",
    "//content/public/common:common_sources",
    "//gin",
    "//media:media_features",
    "//ppapi/c",
    "//ppapi/proxy",
    "//ppapi/proxy:ipc",
    "//ppapi/shared_impl",
    "//sandbox",
    "//services/service_manager/public/interfaces",
    "//skia",
    "//third_party/WebKit/public:blink",
    "//third_party/icu",
    "//ui/base",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_win) {
    deps += [ "//ui/display" ]
  }
}
