# 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("//build/config/jumbo.gni")
import("//components/nacl/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//mojo/public/tools/bindings/mojom.gni")

# TODO(crbug.com/731689): Assert that extensions are enabled.

source_set("common_constants") {
  if (is_chromecast) {
    defines = [ "IS_CHROMECAST" ]
  }

  sources = [
    "constants.cc",
    "constants.h",
  ]

  deps = [
    "//base",
    "//ui/base",
  ]

  configs += [
    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
    "//build/config/compiler:wexit_time_destructors",
  ]
}

if (enable_extensions) {
  mojom("mojo") {
    # We don't want Blink variants of bindings to be generated.
    disable_variants = true

    sources = [
      "mojo/app_window.mojom",
      "mojo/guest_view.mojom",
      "mojo/keep_alive.mojom",
    ]

    if (proprietary_codecs && enable_wifi_display) {
      sources += [ "mojo/wifi_display_session_service.mojom" ]
    }

    public_deps = [
      "//content/public/common:interfaces",
      "//extensions/common/api:mojom",
      "//mojo/public/mojom/base",
      "//ui/gfx/geometry/mojo",
      "//url/mojom:url_mojom_gurl",
    ]

    overridden_deps = [ "//content/public/common:interfaces" ]

    component_deps = [ "//content/public/common" ]
  }

  # This must be a static library because extensions common depends on
  # GetTrustedICAPublicKey in extensions/browser which isn't always linked
  # in. TODO(brettw): This reverse dependency should be fixed.
  jumbo_static_library("common") {
    sources = [
      "alias.h",
      "api/bluetooth/bluetooth_manifest_data.cc",
      "api/bluetooth/bluetooth_manifest_data.h",
      "api/bluetooth/bluetooth_manifest_handler.cc",
      "api/bluetooth/bluetooth_manifest_handler.h",
      "api/bluetooth/bluetooth_manifest_permission.cc",
      "api/bluetooth/bluetooth_manifest_permission.h",
      "api/declarative/declarative_constants.cc",
      "api/declarative/declarative_constants.h",
      "api/declarative/declarative_manifest_data.cc",
      "api/declarative/declarative_manifest_data.h",
      "api/declarative/declarative_manifest_handler.cc",
      "api/declarative/declarative_manifest_handler.h",
      "api/declarative_net_request/constants.cc",
      "api/declarative_net_request/constants.h",
      "api/declarative_net_request/dnr_manifest_data.cc",
      "api/declarative_net_request/dnr_manifest_data.h",
      "api/declarative_net_request/dnr_manifest_handler.cc",
      "api/declarative_net_request/dnr_manifest_handler.h",
      "api/declarative_net_request/utils.cc",
      "api/declarative_net_request/utils.h",
      "api/messaging/message.h",
      "api/messaging/port_id.cc",
      "api/messaging/port_id.h",
      "api/printer_provider/usb_printer_manifest_data.cc",
      "api/printer_provider/usb_printer_manifest_data.h",
      "api/printer_provider/usb_printer_manifest_handler.cc",
      "api/printer_provider/usb_printer_manifest_handler.h",
      "api/sockets/sockets_manifest_data.cc",
      "api/sockets/sockets_manifest_data.h",
      "api/sockets/sockets_manifest_handler.cc",
      "api/sockets/sockets_manifest_handler.h",
      "api/sockets/sockets_manifest_permission.cc",
      "api/sockets/sockets_manifest_permission.h",
      "common_manifest_handlers.cc",
      "common_manifest_handlers.h",
      "common_param_traits.h",
      "cors_util.cc",
      "cors_util.h",
      "csp_validator.cc",
      "csp_validator.h",
      "dom_action_types.h",
      "draggable_region.cc",
      "draggable_region.h",
      "error_utils.cc",
      "error_utils.h",
      "event_filter.cc",
      "event_filter.h",
      "event_filtering_info.cc",
      "event_filtering_info.h",
      "event_matcher.cc",
      "event_matcher.h",
      "extension.cc",
      "extension.h",
      "extension_api.cc",
      "extension_api.h",
      "extension_features.cc",
      "extension_features.h",
      "extension_icon_set.cc",
      "extension_icon_set.h",
      "extension_id.h",
      "extension_l10n_util.cc",
      "extension_l10n_util.h",
      "extension_message_generator.cc",
      "extension_message_generator.h",
      "extension_messages.cc",
      "extension_messages.h",
      "extension_paths.cc",
      "extension_paths.h",
      "extension_resource.cc",
      "extension_resource.h",
      "extension_resource_path_normalizer.cc",
      "extension_resource_path_normalizer.h",
      "extension_set.cc",
      "extension_set.h",
      "extension_updater_uma.h",
      "extension_urls.cc",
      "extension_urls.h",
      "extension_utility_types.h",
      "extensions_client.cc",
      "extensions_client.h",
      "feature_switch.cc",
      "feature_switch.h",
      "features/behavior_feature.cc",
      "features/behavior_feature.h",
      "features/complex_feature.cc",
      "features/complex_feature.h",
      "features/feature.cc",
      "features/feature.h",
      "features/feature_channel.cc",
      "features/feature_channel.h",
      "features/feature_provider.cc",
      "features/feature_provider.h",
      "features/feature_session_type.cc",
      "features/feature_session_type.h",
      "features/feature_util.cc",
      "features/feature_util.h",
      "features/json_feature_provider_source.cc",
      "features/json_feature_provider_source.h",
      "features/manifest_feature.cc",
      "features/manifest_feature.h",
      "features/permission_feature.cc",
      "features/permission_feature.h",
      "features/simple_feature.cc",
      "features/simple_feature.h",
      "file_util.cc",
      "file_util.h",
      "guest_view/extensions_guest_view_messages.h",
      "hashed_extension_id.cc",
      "hashed_extension_id.h",
      "host_id.cc",
      "host_id.h",
      "image_util.cc",
      "image_util.h",
      "install_warning.cc",
      "install_warning.h",
      "manifest.cc",
      "manifest.h",
      "manifest_constants.cc",
      "manifest_constants.h",
      "manifest_handler.cc",
      "manifest_handler.h",
      "manifest_handler_helpers.cc",
      "manifest_handler_helpers.h",
      "manifest_handlers/app_isolation_info.cc",
      "manifest_handlers/app_isolation_info.h",
      "manifest_handlers/automation.cc",
      "manifest_handlers/automation.h",
      "manifest_handlers/background_info.cc",
      "manifest_handlers/background_info.h",
      "manifest_handlers/content_capabilities_handler.cc",
      "manifest_handlers/content_capabilities_handler.h",
      "manifest_handlers/content_scripts_handler.cc",
      "manifest_handlers/content_scripts_handler.h",
      "manifest_handlers/csp_info.cc",
      "manifest_handlers/csp_info.h",
      "manifest_handlers/default_locale_handler.cc",
      "manifest_handlers/default_locale_handler.h",
      "manifest_handlers/externally_connectable.cc",
      "manifest_handlers/externally_connectable.h",
      "manifest_handlers/file_handler_info.cc",
      "manifest_handlers/file_handler_info.h",
      "manifest_handlers/icons_handler.cc",
      "manifest_handlers/icons_handler.h",
      "manifest_handlers/incognito_info.cc",
      "manifest_handlers/incognito_info.h",
      "manifest_handlers/kiosk_mode_info.cc",
      "manifest_handlers/kiosk_mode_info.h",
      "manifest_handlers/mime_types_handler.cc",
      "manifest_handlers/mime_types_handler.h",
      "manifest_handlers/oauth2_manifest_handler.cc",
      "manifest_handlers/oauth2_manifest_handler.h",
      "manifest_handlers/offline_enabled_info.cc",
      "manifest_handlers/offline_enabled_info.h",
      "manifest_handlers/options_page_info.cc",
      "manifest_handlers/options_page_info.h",
      "manifest_handlers/permissions_parser.cc",
      "manifest_handlers/permissions_parser.h",
      "manifest_handlers/requirements_info.cc",
      "manifest_handlers/requirements_info.h",
      "manifest_handlers/sandboxed_page_info.cc",
      "manifest_handlers/sandboxed_page_info.h",
      "manifest_handlers/shared_module_info.cc",
      "manifest_handlers/shared_module_info.h",
      "manifest_handlers/web_accessible_resources_info.cc",
      "manifest_handlers/web_accessible_resources_info.h",
      "manifest_handlers/webview_info.cc",
      "manifest_handlers/webview_info.h",
      "manifest_url_handlers.cc",
      "manifest_url_handlers.h",
      "message_bundle.cc",
      "message_bundle.h",
      "one_shot_event.cc",
      "one_shot_event.h",
      "permissions/api_permission.cc",
      "permissions/api_permission.h",
      "permissions/api_permission_set.cc",
      "permissions/api_permission_set.h",
      "permissions/base_set_operators.h",
      "permissions/extensions_api_permissions.cc",
      "permissions/extensions_api_permissions.h",
      "permissions/manifest_permission.cc",
      "permissions/manifest_permission.h",
      "permissions/manifest_permission_set.cc",
      "permissions/manifest_permission_set.h",
      "permissions/permission_message.cc",
      "permissions/permission_message.h",
      "permissions/permission_message_provider.cc",
      "permissions/permission_message_provider.h",
      "permissions/permission_message_util.cc",
      "permissions/permission_message_util.h",
      "permissions/permission_set.cc",
      "permissions/permission_set.h",
      "permissions/permissions_data.cc",
      "permissions/permissions_data.h",
      "permissions/permissions_info.cc",
      "permissions/permissions_info.h",
      "permissions/set_disjunction_permission.h",
      "permissions/settings_override_permission.cc",
      "permissions/settings_override_permission.h",
      "permissions/socket_permission.cc",
      "permissions/socket_permission.h",
      "permissions/socket_permission_data.cc",
      "permissions/socket_permission_data.h",
      "permissions/socket_permission_entry.cc",
      "permissions/socket_permission_entry.h",
      "permissions/usb_device_permission.cc",
      "permissions/usb_device_permission.h",
      "permissions/usb_device_permission_data.cc",
      "permissions/usb_device_permission_data.h",
      "stack_frame.cc",
      "stack_frame.h",
      "switches.cc",
      "switches.h",
      "url_pattern.cc",
      "url_pattern.h",
      "url_pattern_set.cc",
      "url_pattern_set.h",
      "user_script.cc",
      "user_script.h",
      "value_builder.cc",
      "value_builder.h",
      "value_counter.cc",
      "value_counter.h",
      "verifier_formats.cc",
      "verifier_formats.h",
      "view_type.cc",
      "view_type.h",
    ]

    configs += [
      "//build/config:precompiled_headers",

      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
      "//build/config/compiler:no_size_t_to_int_warning",
      "//build/config/compiler:wexit_time_destructors",
    ]

    public_deps = [
      ":common_constants",
      ":mojo",
      "//content/public/common",
      "//ipc",
      "//skia",
    ]

    deps = [
      "//base",
      "//components/crx_file",
      "//components/nacl/common:buildflags",
      "//components/url_formatter",
      "//components/url_matcher",
      "//components/version_info",
      "//crypto",
      "//device/bluetooth",
      "//device/usb",
      "//device/usb/mojo",
      "//device/usb/public/cpp",
      "//device/usb/public/mojom",
      "//extensions:extensions_resources",
      "//extensions/common/api",
      "//extensions/strings",
      "//net",
      "//services/network/public/mojom",
      "//third_party/boringssl",
      "//third_party/icu",
      "//third_party/re2",
      "//ui/base",
      "//ui/gfx/geometry",
      "//ui/gfx/ipc",
      "//ui/gfx/ipc/geometry",
      "//ui/gfx/ipc/skia",
      "//url",
    ]

    if (enable_nacl) {
      sources += [
        "manifest_handlers/nacl_modules_handler.cc",
        "manifest_handlers/nacl_modules_handler.h",
      ]
    }

    if (is_chromeos) {
      sources += [
        "manifest_handlers/action_handlers_handler.cc",
        "manifest_handlers/action_handlers_handler.h",
      ]
    }
  }

  # NOTE: This is separate from ":common" because it depends on
  # extensions/common/api:extensions_features, which in turn depends on
  # :common.
  source_set("core_api_provider") {
    sources = [
      "core_extensions_api_provider.cc",
      "core_extensions_api_provider.h",
    ]

    configs += [ "//build/config/compiler:wexit_time_destructors" ]
    deps = [
      ":common",
      "//extensions:extensions_resources",
      "//extensions/common/api",
      "//extensions/common/api:extensions_features",
    ]
  }

  source_set("test_support") {
    testonly = true

    sources = [
      "api/declarative_net_request/test_utils.cc",
      "api/declarative_net_request/test_utils.h",
    ]

    deps = [
      ":common",
      "//base",
    ]
  }

  source_set("unit_tests") {
    testonly = true
    sources = [
      "api/declarative/declarative_manifest_unittest.cc",
      "api/declarative_net_request/dnr_manifest_unittest.cc",
      "api/printer_provider/usb_printer_manifest_unittest.cc",
      "api/sockets/sockets_manifest_permission_unittest.cc",
      "component_extension_url_pattern_unittest.cc",
      "csp_validator_unittest.cc",
      "event_filter_unittest.cc",
      "extension_builder_unittest.cc",
      "extension_icon_set_unittest.cc",
      "extension_l10n_util_unittest.cc",
      "extension_messages_unittest.cc",
      "extension_resource_path_normalizer_unittest.cc",
      "extension_resource_unittest.cc",
      "extension_set_unittest.cc",
      "extension_unittest.cc",
      "features/complex_feature_unittest.cc",
      "features/feature_provider_unittest.cc",
      "features/simple_feature_unittest.cc",
      "file_util_unittest.cc",
      "hashed_extension_id_unittest.cc",
      "image_util_unittest.cc",
      "manifest_handler_perf_test.cc",
      "manifest_handler_unittest.cc",
      "manifest_handlers/content_capabilities_manifest_unittest.cc",
      "manifest_handlers/csp_info_unittest.cc",
      "manifest_handlers/default_locale_manifest_unittest.cc",
      "manifest_handlers/externally_connectable_unittest.cc",
      "manifest_handlers/file_handler_manifest_unittest.cc",
      "manifest_handlers/icons_handler_unittest.cc",
      "manifest_handlers/incognito_manifest_unittest.cc",
      "manifest_handlers/kiosk_mode_info_unittest.cc",
      "manifest_handlers/oauth2_manifest_unittest.cc",
      "manifest_handlers/shared_module_manifest_unittest.cc",
      "message_bundle_unittest.cc",
      "one_shot_event_unittest.cc",
      "permissions/api_permission_set_unittest.cc",
      "permissions/api_permission_unittest.cc",
      "permissions/base_set_operators_unittest.cc",
      "permissions/manifest_permission_set_unittest.cc",
      "permissions/socket_permission_unittest.cc",
      "permissions/usb_device_permission_unittest.cc",
      "stack_frame_unittest.cc",
      "url_pattern_set_unittest.cc",
      "url_pattern_unittest.cc",
      "user_script_unittest.cc",
      "value_builder_unittest.cc",
      "value_counter_unittest.cc",
    ]

    deps = [
      ":common",
      ":test_support",
      "//base",
      "//base:i18n",
      "//base/test:test_support",
      "//components/crx_file",
      "//components/version_info:version_info",
      "//device/usb",
      "//device/usb/mojo",
      "//device/usb/public/cpp:test_support",
      "//extensions:extensions_resources",

      # TODO(brettw) these tests should not be including headers from browser.
      "//extensions:test_support",
      "//extensions/browser",
      "//extensions/strings",
      "//ipc",
      "//testing/gmock",
      "//testing/gtest",
      "//ui/base",
      "//ui/gfx",
      "//url",
    ]

    if (is_chromeos) {
      sources += [ "manifest_handlers/action_handlers_handler_unittest.cc" ]
    }

    data = [
      "//extensions/common/permissions/api_permission.h",
      "//tools/metrics/histograms/enums.xml",
    ]
  }
}  # enable_extensions
