# Copyright 2016 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("//extensions/buildflags/buildflags.gni")
import("//extensions/common/api/schema.gni")
import("//tools/json_schema_compiler/json_schema_api.gni")

assert(enable_extensions,
       "Cannot depend on extensions because enable_extensions=false.")

source_set("api") {
  sources = [
    "api_resource.cc",
    "api_resource.h",
    "api_resource_manager.h",
    "async_api_function.cc",
    "async_api_function.h",
    "device_permissions_manager.cc",
    "device_permissions_manager.h",
    "device_permissions_prompt.cc",
    "device_permissions_prompt.h",
    "execute_code_function.cc",
    "execute_code_function.h",
    "extensions_api_client.cc",
    "extensions_api_client.h",
    "guest_view/app_view/app_view_guest_internal_api.cc",
    "guest_view/app_view/app_view_guest_internal_api.h",
    "guest_view/extension_view/extension_view_internal_api.cc",
    "guest_view/extension_view/extension_view_internal_api.h",
    "guest_view/guest_view_internal_api.cc",
    "guest_view/guest_view_internal_api.h",
    "guest_view/web_view/web_view_internal_api.cc",
    "guest_view/web_view/web_view_internal_api.h",
    "web_contents_capture_client.cc",
    "web_contents_capture_client.h",
  ]

  public_deps = [
    "//base",
    "//content/public/browser",
    "//content/public/common",
    "//extensions/browser/api/activity_log",
    "//extensions/browser/api/alarms",
    "//extensions/browser/api/app_current_window_internal",
    "//extensions/browser/api/app_runtime",
    "//extensions/browser/api/app_window",
    "//extensions/browser/api/audio",
    "//extensions/browser/api/bluetooth",
    "//extensions/browser/api/bluetooth_low_energy",
    "//extensions/browser/api/bluetooth_socket",
    "//extensions/browser/api/cast_channel",
    "//extensions/browser/api/declarative",
    "//extensions/browser/api/declarative_content",
    "//extensions/browser/api/declarative_net_request",
    "//extensions/browser/api/declarative_webrequest",
    "//extensions/browser/api/display_source",
    "//extensions/browser/api/dns",
    "//extensions/browser/api/document_scan",
    "//extensions/browser/api/feedback_private",
    "//extensions/browser/api/file_handlers",
    "//extensions/browser/api/file_system",
    "//extensions/browser/api/hid",
    "//extensions/browser/api/idle",
    "//extensions/browser/api/management",
    "//extensions/browser/api/messaging",
    "//extensions/browser/api/metrics_private",
    "//extensions/browser/api/mime_handler_private",
    "//extensions/browser/api/networking_private",
    "//extensions/browser/api/power",
    "//extensions/browser/api/printer_provider",
    "//extensions/browser/api/printer_provider_internal",
    "//extensions/browser/api/runtime",
    "//extensions/browser/api/serial",
    "//extensions/browser/api/socket",
    "//extensions/browser/api/sockets_tcp",
    "//extensions/browser/api/sockets_tcp_server",
    "//extensions/browser/api/sockets_udp",
    "//extensions/browser/api/storage",
    "//extensions/browser/api/system_cpu",
    "//extensions/browser/api/system_display",
    "//extensions/browser/api/system_info",
    "//extensions/browser/api/system_memory",
    "//extensions/browser/api/system_network",
    "//extensions/browser/api/system_storage",
    "//extensions/browser/api/test",
    "//extensions/browser/api/usb",
    "//extensions/browser/api/virtual_keyboard_private",
    "//extensions/browser/api/web_request",
    "//extensions/common",
    "//ipc",
  ]

  deps = [
    "//base:i18n",
    "//components/keyed_service/content:content",
    "//extensions/browser:browser_sources",
    "//extensions/common/api",
    "//extensions/strings",
    "//services/device/public/cpp/hid",
    "//services/device/public/mojom",
  ]

  # TODO(michaelpg): Move these deps to the individual APIs that require them.
  deps += [
    "//components/onc",
    "//components/storage_monitor",
    "//device/base",
    "//device/bluetooth",
  ]

  if (is_chromeos) {
    sources += [
      "lock_screen_data/data_item.cc",
      "lock_screen_data/data_item.h",
      "lock_screen_data/lock_screen_data_api.cc",
      "lock_screen_data/lock_screen_data_api.h",
      "lock_screen_data/lock_screen_item_storage.cc",
      "lock_screen_data/lock_screen_item_storage.h",
      "lock_screen_data/lock_screen_value_store_migrator.h",
      "lock_screen_data/lock_screen_value_store_migrator_impl.cc",
      "lock_screen_data/lock_screen_value_store_migrator_impl.h",
      "lock_screen_data/operation_result.h",
      "media_perception_private/conversion_utils.cc",
      "media_perception_private/conversion_utils.h",
      "media_perception_private/media_perception_api_delegate.h",
      "media_perception_private/media_perception_api_manager.cc",
      "media_perception_private/media_perception_api_manager.h",
      "media_perception_private/media_perception_private_api.cc",
      "media_perception_private/media_perception_private_api.h",
    ]

    public_deps += [
      "//extensions/browser/api/cec_private",
      "//extensions/browser/api/clipboard",
      "//extensions/browser/api/diagnostics",
      "//extensions/browser/api/networking_config",
      "//extensions/browser/api/system_power_source",
      "//extensions/browser/api/virtual_keyboard",
      "//extensions/browser/api/vpn_provider",
      "//extensions/browser/api/webcam_private",
    ]

    deps += [
      "//chromeos",
      "//chromeos/dbus",
      "//chromeos/dbus:media_perception_proto",
      "//chromeos/login/login_state",
      "//chromeos/services/media_perception/public/mojom",
      "//chromeos/services/media_perception/public/mojom:mojom_js_data_deps",
    ]
  }
}

function_registration("api_registration") {
  sources = extensions_api_schema_files + extensions_api_uncompiled_sources
  impl_dir = "//extensions/browser/api"
  bundle_name = ""
  root_namespace = extensions_api_root_namespace

  deps = [
    ":api",
    "//extensions/common/api",
    "//skia",
  ]
}
