# Copyright 2015 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("//electron/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//tools/json_schema_compiler/json_features.gni")
import("//tools/json_schema_compiler/json_schema_api.gni")

assert(enable_extensions)

################################################################################
# Public Targets

group("api") {
  public_deps = [
    ":generated_api_json_strings",
    ":generated_api_types",
  ]
}

group("extensions_features") {
  public_deps = [
    ":api_features",
    ":manifest_features",
    ":permission_features",

    # TODO(devlin): It would be nicer to have this dependency hoisted up to
    # //extensions/common (since that's where it's consumed), but there's some
    # cycles to be resolved first.
    "//extensions/common/api:extensions_features",
  ]
}

################################################################################
# Private Targets

generated_json_strings("generated_api_json_strings") {
  sources = [
    "action.json",
    "browser_action.json",
    "extension.json",
    "resources_private.idl",
    "scripting.idl",
    "tabs.json",
  ]

  if (enable_pdf_viewer) {
    sources += [ "pdf_viewer_private.idl" ]
  }

  configs = [ "//build/config:precompiled_headers" ]
  bundle_name = "Electron"
  schema_include_rules = "extensions/common/api:extensions::api::%(namespace)s"

  root_namespace = "extensions::api::%(namespace)s"
  deps = [ "//extensions/common/api" ]

  visibility = [ ":api" ]
}

generated_types("generated_api_types") {
  sources = [
    "resources_private.idl",
    "scripting.idl",
    "tabs.json",
  ]

  if (enable_pdf_viewer) {
    sources += [ "pdf_viewer_private.idl" ]
  }

  configs = [ "//build/config:precompiled_headers" ]
  schema_include_rules = "extensions/common/api:extensions::api::%(namespace)s"

  root_namespace = "extensions::api::%(namespace)s"
  deps = [ "//extensions/common/api" ]

  visibility = [ ":api" ]
}

json_features("manifest_features") {
  feature_type = "ManifestFeature"
  method_name = "AddElectronManifestFeatures"
  sources = [ "_manifest_features.json" ]
  visibility = [ ":extensions_features" ]
}

json_features("api_features") {
  feature_type = "APIFeature"
  method_name = "AddElectronAPIFeatures"
  sources = [ "_api_features.json" ]
  visibility = [ ":extensions_features" ]
}

json_features("permission_features") {
  feature_type = "PermissionFeature"
  method_name = "AddElectronPermissionFeatures"
  sources = [ "_permission_features.json" ]
  visibility = [ ":extensions_features" ]
}
