910e62b5创建于 1月15日历史提交
# 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("//components/guest_view/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")
import("//ui/base/ui_features.gni")

assert(enable_extensions_core)
assert(!is_fuchsia)

# If enable_extensions is true then enable_guest_view must also be true.
assert(!enable_extensions || enable_guest_view)

if (is_component_build) {
  component("extensions") {
    visibility = [
      "//extensions/common:common_constants",
      "//extensions/common:export",
      "//extensions/common:extension_features",
    ]
    public_deps = [
      "//extensions/common:constants_impl",
      "//extensions/common:export_impl",
    ]
  }
}

# Used by targets that compile into the implementation.
config("component_implementation") {
  defines = [ "EXTENSIONS_COMPONENT_IMPLEMENTATION" ]
}

group("extensions_resources") {
  public_deps = [
    ":extensions_browser_resources",
    ":extensions_renderer_resources",
    ":extensions_resources_grd",
  ]
}

grit("extensions_resources_grd") {
  source = "extensions_resources.grd"
  outputs = [
    "grit/extensions_resources.h",
    "extensions_resources.pak",
  ]
}

grit("extensions_browser_resources") {
  source = "browser/resources/extensions_browser_resources.grd"
  outputs = [
    "grit/extensions_browser_resources.h",
    "grit/extensions_browser_resources_map.cc",
    "grit/extensions_browser_resources_map.h",
    "extensions_browser_resources_100_percent.pak",
    "extensions_browser_resources_200_percent.pak",
  ]
}

grit("extensions_renderer_resources") {
  source = "renderer/resources/extensions_renderer_resources.grd"
  outputs = [
    "grit/extensions_renderer_resources.h",
    "extensions_renderer_resources.pak",
  ]
  grit_flags = [
    "-E",
    "mojom_root=" + rebase_path(root_gen_dir, root_build_dir),
  ]

  deps = [
    "//extensions/common:mojom_js",
    "//extensions/common/api:mojom_js",
    "//services/device/public/mojom:mojom_js",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "browser/api/declarative/test_rules_registry.cc",
    "browser/api/declarative/test_rules_registry.h",
    "browser/api/storage/settings_test_util.cc",
    "browser/api/storage/settings_test_util.h",
    "browser/api_test_utils.cc",
    "browser/api_test_utils.h",
    "browser/api_unittest.cc",
    "browser/api_unittest.h",
    "browser/content_verifier/test_utils.cc",
    "browser/content_verifier/test_utils.h",
    "browser/extension_error_test_util.cc",
    "browser/extension_error_test_util.h",
    "browser/extensions_test.cc",
    "browser/extensions_test.h",
    "browser/mock_extension_system.cc",
    "browser/mock_extension_system.h",
    "browser/mock_external_provider.cc",
    "browser/mock_external_provider.h",
    "browser/scoped_ignore_content_verifier_for_test.cc",
    "browser/scoped_ignore_content_verifier_for_test.h",
    "browser/test_event_router.cc",
    "browser/test_event_router.h",
    "browser/test_extension_registry_observer.cc",
    "browser/test_extension_registry_observer.h",
    "browser/test_extensions_browser_client.cc",
    "browser/test_extensions_browser_client.h",
    "browser/test_image_loader.cc",
    "browser/test_image_loader.h",
    "browser/test_management_policy.cc",
    "browser/test_management_policy.h",
    "browser/test_runtime_api_delegate.cc",
    "browser/test_runtime_api_delegate.h",
    "common/extension_builder.cc",
    "common/extension_builder.h",
    "common/manifest_test.cc",
    "common/manifest_test.h",
    "common/permissions/mock_manifest_permission.cc",
    "common/permissions/mock_manifest_permission.h",
    "common/permissions/permission_message_test_util.cc",
    "common/permissions/permission_message_test_util.h",
    "common/scoped_testing_manifest_handler_registry.cc",
    "common/scoped_testing_manifest_handler_registry.h",
    "renderer/test_extensions_renderer_client.cc",
    "renderer/test_extensions_renderer_client.h",
    "test/extension_background_page_waiter.cc",
    "test/extension_background_page_waiter.h",
    "test/extension_state_tester.cc",
    "test/extension_state_tester.h",
    "test/extension_test_message_listener.cc",
    "test/extension_test_message_listener.h",
    "test/extension_test_notification_observer.cc",
    "test/extension_test_notification_observer.h",
    "test/flakiness_test_util.h",
    "test/logging_timer.cc",
    "test/logging_timer.h",
    "test/permissions_manager_waiter.cc",
    "test/permissions_manager_waiter.h",
    "test/result_catcher.cc",
    "test/result_catcher.h",
    "test/test_content_script_load_waiter.cc",
    "test/test_content_script_load_waiter.h",
    "test/test_context_data.cc",
    "test/test_context_data.h",
    "test/test_extension_dir.cc",
    "test/test_extension_dir.h",
    "test/test_extensions_client.cc",
    "test/test_extensions_client.h",
    "test/test_permission_message_provider.cc",
    "test/test_permission_message_provider.h",
  ]

  deps = [
    ":extensions_resources",
    "//base",
    "//build:chromeos_buildflags",
    "//chrome/common:buildflags",
    "//components/crx_file",
    "//components/keyed_service/content",
    "//components/pref_registry",
    "//components/prefs:test_support",
    "//components/sync_preferences:test_support",
    "//components/update_client",
    "//components/update_client:test_support",
    "//components/user_prefs",
    "//content/public/common",
    "//content/test:test_support",
    "//crypto:test_support",
    "//extensions/browser",
    "//extensions/browser:test_support",
    "//extensions/browser/api",
    "//extensions/browser/api/storage:settings_namespace",
    "//extensions/browser/updater",
    "//extensions/common",
    "//extensions/common:core_api_provider",
    "//extensions/common/api",
    "//extensions/common/api:extensions_features",
    "//extensions/renderer",
    "//net:test_support",
    "//services/network/public/mojom",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/cld_3/src/src:cld_3",
    "//third_party/zlib/google:zip",
  ]

  if (enable_platform_apps) {
    sources += [
      "browser/app_window/test_app_window_contents.cc",
      "browser/app_window/test_app_window_contents.h",
    ]
  }

  if (enable_guest_view) {
    sources += [
      "browser/guest_view/mime_handler_view/test_mime_handler_view_guest.cc",
      "browser/guest_view/mime_handler_view/test_mime_handler_view_guest.h",
    ]

    deps += [ "//components/guest_view/browser:test_support" ]
  }

  # Generally, //extensions should not depend on //chromeos. However, a number
  # of the APIs and the extensions shell already do. We should try to avoid
  # expanding these dependencies.
  if (is_chromeos) {
    deps += [ "//chromeos/ash/components/login/login_state" ]
  }

  public_deps = [ "//content/public/browser" ]

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}

repack("shell_and_test_pak") {
  testonly = true

  sources = [
    "$root_gen_dir/content/content_resources.pak",
    "$root_gen_dir/content/shell/shell_resources.pak",
    "$root_gen_dir/extensions/extensions_browser_resources_100_percent.pak",
    "$root_gen_dir/extensions/extensions_renderer_resources.pak",
    "$root_gen_dir/extensions/extensions_resources.pak",
    "$root_gen_dir/extensions/strings/extensions_strings_en-US.pak",
    "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
    "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
    "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_100_percent.pak",
    "$root_gen_dir/third_party/blink/public/strings/blink_strings_en-US.pak",
    "$root_gen_dir/ui/resources/ui_lottie_resources.pak",
    "$root_gen_dir/ui/resources/ui_resources_100_percent.pak",
    "$root_gen_dir/ui/strings/app_locale_settings_en-US.pak",
    "$root_gen_dir/ui/strings/ax_strings_en-US.pak",
    "$root_gen_dir/ui/strings/ui_strings_en-US.pak",
  ]

  output = "$root_out_dir/extensions_shell_and_test.pak"

  deps = [
    ":extensions_resources",
    "//content:content_resources",
    "//content/shell:resources",
    "//extensions/strings",
    "//mojo/public/js:resources",
    "//third_party/blink/public:resources",
    "//third_party/blink/public:scaled_resources_100_percent",
    "//third_party/blink/public/strings",
    "//ui/resources",
    "//ui/strings",
  ]

  # The following resources are not used by desktop-android build.
  if (enable_extensions) {
    sources += [
      "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
      "$root_gen_dir/device/bluetooth/strings/bluetooth_strings_en-US.pak",
      "$root_gen_dir/extensions/shell/app_shell_resources.pak",
    ]

    deps += [
      "//content/browser/devtools:devtools_resources",
      "//device/bluetooth/strings",
      "//extensions/shell:resources",
    ]
  }
}

test("extensions_unittests") {
  use_xvfb = use_xvfb_in_this_config

  sources = [
    "test/extensions_unittests_main.cc",
    "test/flakiness_test_util_test.cc",
    "test/logging_timer_unittest.cc",
  ]

  data = [
    "test/data/",
    "//chrome/test/data/extensions/",
    "$root_out_dir/content_shell.pak",
    "$root_out_dir/extensions_shell_and_test.pak",
  ]

  deps = [
    ":shell_and_test_pak",
    ":test_support",
    "//base/test:test_support",
    "//build:android_buildflags",
    "//content/public/common",
    "//content/test:test_support",
    "//extensions/browser:unit_tests",
    "//extensions/common",
    "//extensions/common:unit_tests",
    "//extensions/renderer:unit_tests",
    "//services/data_decoder/public/cpp:test_support",
    "//services/service_manager/public/cpp/test:test_support",
    "//ui/gl:test_support",
  ]

  data_deps = [
    "//testing/buildbot/filters:extensions_unittests_filters",
    "//third_party/angle:includes",
  ]

  if (is_chromeos) {
    deps += [
      "//chrome/browser/chromeos/extensions/telemetry/api:extensions_unittests",
    ]
  }

  if (is_android) {
    deps += [
      "//content/public/android:content_full_java",
      "//gin:v8_snapshot_assets",
      "//ui/android:ui_full_java",
    ]
  }

  # TODO(https://crbug.com/356905053): Gradually include more of these sources
  # in the desktop-android build.
  if (enable_extensions) {
    deps += [ "//extensions/shell:unit_tests" ]
  }
}

if (enable_extensions) {
  # Browser tests are not currently supported in desktop-android builds.
  test("extensions_browsertests") {
    use_xvfb = use_xvfb_in_this_config

    data = [
      "//extensions/test/data/",
      "//net/tools/testserver/",
      "//third_party/pywebsocket3/src/mod_pywebsocket/",
      "$root_out_dir/extensions_shell_and_test.pak",
    ]

    deps = [
      "//extensions/browser:browser_tests",
      "//extensions/renderer:browser_tests",
      "//extensions/shell:browser_tests",
    ]

    data_deps = [ "//third_party/angle:includes" ]
  }
}