# 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/features.gni")
import("//extensions/common/api/schema.gni")
import("//extensions/buildflags/buildflags.gni")
import("//mojo/public/tools/bindings/mojom.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",
    ":mojom",
    "//extensions/buildflags",
  ]
}

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

mojom("mojom") {
  sources = [
    "mime_handler.mojom",
  ]
}

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

generated_json_strings("generated_api_json_strings") {
  sources = extensions_api_schema_files + extensions_api_uncompiled_sources +
            extensions_api_uncompiled_bundle_schema_sources
  bundle_name = ""
  root_namespace = extensions_api_root_namespace
  deps = [
    "//base",
    "//extensions/buildflags",
  ]
  visibility = [ ":api" ]
}

generated_types("generated_api_types") {
  sources = extensions_api_schema_files
  root_namespace = extensions_api_root_namespace
  deps = [
    "//base",
    "//extensions/buildflags",
  ]
  visibility = [ ":api" ]
}

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

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

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

json_features("behavior_features") {
  feature_type = "BehaviorFeature"
  method_name = "AddCoreBehaviorFeatures"
  sources = [
    "_behavior_features.json",
  ]
  visibility = [ ":extensions_features" ]
}
