blob: 0923a7790fe2e1ea80061e24b3520d4aadf03222 [file] [log] [blame]
# 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/chromeos/ui_mode.gni")
import("//build/config/features.gni")
import("//components/nacl/features.gni")
import("//extensions/buildflags/buildflags.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
# TODO(crbug.com/731689): Assert that extensions are enabled.
source_set("common_constants") {
sources = [
"constants.cc",
"constants.h",
"logging_constants.h",
]
public_deps = [
"//base",
"//build:chromeos_buildflags",
"//components/services/app_service/public/mojom",
]
deps = [ "//build:chromecast_buildflags" ]
configs += [ "//build/config/compiler:wexit_time_destructors" ]
}
if (enable_extensions) {
mojom("mojom") {
# We don't want Blink variants of bindings to be generated.
disable_variants = true
sources = [
"mojom/activation_sequence.mojom",
"mojom/api_permission_id.mojom",
"mojom/app_window.mojom",
"mojom/channel.mojom",
"mojom/code_injection.mojom",
"mojom/css_origin.mojom",
"mojom/event_dispatcher.mojom",
"mojom/event_router.mojom",
"mojom/execution_world.mojom",
"mojom/feature_session_type.mojom",
"mojom/frame.mojom",
"mojom/guest_view.mojom",
"mojom/host_id.mojom",
"mojom/injection_type.mojom",
"mojom/keep_alive.mojom",
"mojom/manifest.mojom",
"mojom/permission_set.mojom",
"mojom/renderer.mojom",
"mojom/run_location.mojom",
"mojom/url_pattern_set.mojom",
"mojom/view_type.mojom",
]
public_deps = [
"//content/public/common:interfaces",
"//extensions/common/api:mojom",
"//mojo/public/mojom/base",
"//ui/gfx/geometry/mojom",
"//url/mojom:url_mojom_gurl",
]
cpp_typemaps = [
{
types = [
{
mojom = "extensions.mojom.Channel"
cpp = "version_info::Channel"
},
]
traits_headers = [ "//extensions/common/mojom/channel_mojom_traits.h" ]
traits_public_deps = [ "//components/version_info:channel" ]
},
{
types = [
{
mojom = "extensions.mojom.APIPermission"
cpp = "::std::unique_ptr<::extensions::APIPermission>"
move_only = true
},
{
mojom = "extensions.mojom.APIPermissionSet"
cpp = "::extensions::APIPermissionSet"
move_only = true
},
{
mojom = "extensions.mojom.ManifestPermission"
cpp = "::std::unique_ptr<::extensions::ManifestPermission>"
move_only = true
},
{
mojom = "extensions.mojom.ManifestPermissionSet"
cpp = "::extensions::ManifestPermissionSet"
move_only = true
},
{
mojom = "extensions.mojom.PermissionSet"
cpp = "::extensions::PermissionSet"
move_only = true
},
]
traits_headers =
[ "//extensions/common/mojom/permission_set_mojom_traits.h" ]
traits_sources =
[ "//extensions/common/mojom/permission_set_mojom_traits.cc" ]
},
{
types = [
{
mojom = "extensions.mojom.URLPattern"
cpp = "::URLPattern"
},
{
mojom = "extensions.mojom.URLPatternSet"
cpp = "::extensions::URLPatternSet"
move_only = true
},
]
traits_headers =
[ "//extensions/common/mojom/url_pattern_set_mojom_traits.h" ]
traits_sources =
[ "//extensions/common/mojom/url_pattern_set_mojom_traits.cc" ]
},
{
types = [
{
mojom = "extensions.mojom.ActivationSequence"
cpp = "::extensions::ActivationSequence"
},
]
traits_headers =
[ "//extensions/common/mojom/activation_sequence_mojom_traits.h" ]
traits_sources =
[ "//extensions/common/mojom/activation_sequence_mojom_traits.cc" ]
},
{
types = [
{
mojom = "extensions.mojom.EventFilteringInfo"
cpp = "::extensions::EventFilteringInfo"
},
]
traits_headers =
[ "//extensions/common/mojom/event_dispatcher_mojom_traits.h" ]
traits_sources =
[ "//extensions/common/mojom/event_dispatcher_mojom_traits.cc" ]
},
]
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.
static_library("common") {
sources = [
"activation_sequence.h",
"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/extension_action/action_info.cc",
"api/extension_action/action_info.h",
"api/messaging/message.h",
"api/messaging/messaging_endpoint.cc",
"api/messaging/messaging_endpoint.h",
"api/messaging/port_context.cc",
"api/messaging/port_context.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",
"content_script_injection_url_getter.cc",
"content_script_injection_url_getter.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_filtering_info_type_converters.cc",
"event_filtering_info_type_converters.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.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_flags.cc",
"features/feature_flags.h",
"features/feature_provider.cc",
"features/feature_provider.h",
"features/feature_session_type.cc",
"features/feature_session_type.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",
"hashed_extension_id.cc",
"hashed_extension_id.h",
"identifiability_metrics.cc",
"identifiability_metrics.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/cross_origin_isolation_info.cc",
"manifest_handlers/cross_origin_isolation_info.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/extension_action_handler.cc",
"manifest_handlers/extension_action_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/replacement_apps.cc",
"manifest_handlers/replacement_apps.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",
"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",
"script_constants.h",
"stack_frame.cc",
"stack_frame.h",
"switches.cc",
"switches.h",
"trace_util.cc",
"trace_util.h",
"url_pattern.cc",
"url_pattern.h",
"url_pattern_set.cc",
"url_pattern_set.h",
"user_script.cc",
"user_script.h",
"utils/base_string.cc",
"utils/base_string.h",
"utils/content_script_utils.cc",
"utils/content_script_utils.h",
"value_builder.cc",
"value_builder.h",
"value_counter.cc",
"value_counter.h",
"verifier_formats.cc",
"verifier_formats.h",
"view_type_util.cc",
"view_type_util.h",
]
configs += [
"//build/config:precompiled_headers",
"//build/config/compiler:wexit_time_destructors",
]
public_deps = [
":common_constants",
":mojom",
"//components/services/app_service/public/cpp:app_file_handling",
"//content/public/common",
"//ipc",
"//skia",
]
# Allows including manifest_handler.h and permissions/permissions_info.h
# from mojom/permission_set_mojom_traits.cc.
allow_circular_includes_from = [ ":mojom" ]
deps = [
"//base",
"//build:branding_buildflags",
"//build:chromeos_buildflags",
"//components/crx_file",
"//components/nacl/common:buildflags",
"//components/url_formatter",
"//components/url_matcher",
"//components/version_info",
"//crypto",
"//device/bluetooth",
"//device/bluetooth/public/cpp",
"//extensions:extensions_resources",
"//extensions/common:mojom",
"//extensions/common/api",
"//extensions/strings",
"//net",
"//services/device/public/cpp/usb",
"//services/device/public/mojom:usb",
"//services/network/public/mojom",
"//third_party/boringssl",
"//third_party/icu",
"//third_party/re2",
"//third_party/zlib/google:compression_utils",
"//tools/json_schema_compiler:generated_api_util",
"//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_ash) {
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",
"api/extension_action/action_info_test_util.cc",
"api/extension_action/action_info_test_util.h",
"file_test_util.cc",
"file_test_util.h",
]
deps = [
":common",
"//base",
"//components/version_info:channel",
"//extensions/common/api",
]
}
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",
"error_utils_unittest.cc",
"event_filter_unittest.cc",
"extension_builder_unittest.cc",
"extension_icon_set_unittest.cc",
"extension_l10n_util_unittest.cc",
"extension_resource_path_normalizer_unittest.cc",
"extension_resource_unittest.cc",
"extension_set_unittest.cc",
"extension_unittest.cc",
"feature_switch_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/extension_action_handler_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/manifest_v3_permissions_unittest.cc",
"manifest_handlers/oauth2_manifest_unittest.cc",
"manifest_handlers/replacement_apps_unittest.cc",
"manifest_handlers/shared_module_manifest_unittest.cc",
"manifest_unittest.cc",
"message_bundle_unittest.cc",
"mojom/permission_set_mojom_traits_unittest.cc",
"mojom/url_pattern_set_mojom_traits_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",
"//content/test:test_support",
"//extensions:extensions_resources",
"//extensions/common:mojom",
"//extensions/common/api",
"//mojo/public/cpp/test_support:test_utils",
"//tools/json_schema_compiler:generated_api_util",
# TODO(brettw) these tests should not be including headers from browser.
"//extensions:test_support",
"//extensions/browser",
"//extensions/strings",
"//ipc",
"//services/device/public/cpp:test_support",
"//testing/gmock",
"//testing/gtest",
"//third_party/zlib/google:compression_utils",
"//ui/base",
"//ui/gfx",
"//url",
]
if (is_chromeos_ash) {
sources += [ "manifest_handlers/action_handlers_handler_unittest.cc" ]
}
data = [
"//extensions/common/mojom/api_permission_id.mojom",
"//tools/metrics/histograms/enums.xml",
]
}
fuzzer_test("extension_fuzzer") {
sources = [ "extension_fuzzer.cc" ]
deps = [
":common",
"//base",
]
}
fuzzer_test("extension_manifest_fuzzer") {
sources = [ "manifest_fuzzer.cc" ]
deps = [
":common",
"//base",
"//extensions:test_support",
]
}
fuzzer_test("extension_url_pattern_fuzzer") {
sources = [ "url_pattern_fuzzer.cc" ]
deps = [
":common",
"//base",
]
}
fuzzer_test("extension_csp_validator_fuzzer") {
sources = [ "csp_validator_fuzzer.cc" ]
deps = [
":common",
"//base",
]
}
} # enable_extensions