# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/config/chromecast_build.gni")
import("//build/config/jumbo.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)
assert(
    !(enable_autofill_assistant_api && is_official_build),
    "The AutofillAssistant Extension API must be disabled in official builds.")

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"
  defines = [ "is_chromecast=$is_chromecast" ]
  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",
  ]
}

jumbo_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/app_window/test_app_window_contents.cc",
    "browser/app_window/test_app_window_contents.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/guest_view/mime_handler_view/test_mime_handler_view_guest.cc",
    "browser/guest_view/mime_handler_view/test_mime_handler_view_guest.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/background_page_watcher.cc",
    "test/background_page_watcher.h",
    "test/extension_background_page_waiter.cc",
    "test/extension_background_page_waiter.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/logging_timer.cc",
    "test/logging_timer.h",
    "test/result_catcher.cc",
    "test/result_catcher.h",
    "test/test_background_page_first_load_observer.cc",
    "test/test_background_page_first_load_observer.h",
    "test/test_content_utility_client.cc",
    "test/test_content_utility_client.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",
  ]

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

  deps = [
    ":extensions_resources",
    "//base",
    "//chrome/common:buildflags",
    "//components/cast_certificate:test_support",
    "//components/cast_channel:test_support",
    "//components/guest_view/browser:test_support",
    "//components/prefs:test_support",
    "//components/sync_preferences:test_support",
    "//content/public/common",
    "//content/test:test_support",
    "//extensions/browser",
    "//extensions/browser:test_support",
    "//extensions/common",
    "//extensions/common:core_api_provider",
    "//extensions/common/api",
    "//extensions/common/api:extensions_features",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/cld_3/src/src:cld_3",
  ]

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

repack("shell_and_test_pak") {
  testonly = true

  sources = [
    "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
    "$root_gen_dir/content/content_resources.pak",
    "$root_gen_dir/content/dev_ui_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/shell/app_shell_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_resources_100_percent.pak",
    "$root_gen_dir/ui/strings/app_locale_settings_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:dev_ui_content_resources",
    "//content/browser/devtools:devtools_resources",
    "//content/shell:resources",
    "//extensions/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",
  ]
}

test("extensions_unittests") {
  sources = [
    "test/extensions_unittests_main.cc",
    "test/logging_timer_unittest.cc",
  ]

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

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

  data_deps = [ "//third_party/mesa_headers" ]
}

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

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

  data_deps = [ "//third_party/mesa_headers" ]
}

# TODO(rockot) bug 505926: These should be moved to extensions_browsertests but have
# old dependencies on chrome files. The chrome dependencies should be removed
# and these moved to the extensions_browsertests target. Currently, we solve
# the problem by making this a source set and linking it into
# //chrome/test:browser_tests.
source_set("chrome_extensions_browsertests") {
  testonly = true
  sources = [
    "browser/api/app_window/app_window_apitest.cc",
    "browser/api/bluetooth/bluetooth_apitest.cc",
    "browser/api/bluetooth/bluetooth_private_apitest.cc",
    "browser/api/cast_channel/cast_channel_apitest.cc",
    "browser/api/serial/serial_apitest.cc",
    "browser/api/usb/usb_manual_apitest.cc",
    "browser/app_window/app_window_browsertest.cc",
    "browser/guest_view/mime_handler_view/mime_handler_view_browsertest.cc",
    "renderer/script_context_browsertest.cc",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  # These are the deps from browser_tests minus some internal Chrome ones that
  # aren't allowed to be included here and that aren't needed.
  deps = [
    "//base",
    "//base:i18n",
    "//base/test:test_support",
    "//chrome/browser",
    "//chrome/common/extensions/api",
    "//chrome/renderer",
    "//components/autofill/content/browser:risk_proto",
    "//components/autofill/content/renderer:test_support",
    "//components/captive_portal/core:test_support",
    "//components/dom_distiller/content/browser",
    "//components/dom_distiller/core:test_support",
    "//components/guest_view/browser:test_support",
    "//components/javascript_dialogs",
    "//components/printing/common",
    "//components/resources",
    "//components/strings",
    "//components/sync",
    "//components/sync:test_support_model",
    "//components/translate/core/common",
    "//crypto:platform",
    "//crypto:test_support",
    "//device/bluetooth:mocks",
    "//extensions/common/api",
    "//google_apis:test_support",
    "//media:test_support",
    "//media/cast:test_support",
    "//net",
    "//net:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//testing/perf",
    "//third_party/blink/public:blink",
    "//third_party/cacheinvalidation",
    "//third_party/icu",
    "//third_party/leveldatabase",
    "//third_party/libaddressinput",
    "//third_party/webrtc_overrides:webrtc_component",
    "//third_party/widevine/cdm:headers",
    "//ui/accessibility:test_support",
    "//ui/base:test_support",
    "//ui/compositor:test_support",
    "//ui/resources",
    "//ui/web_dialogs:test_support",
    "//v8",
  ]

  if (is_chromeos) {
    deps += [ "//components/user_manager:test_support" ]
  }
}

# TODO(rockot) bug 505926: This should be deleted for the same reason as
# chrome_extensions_browsertests.
source_set("chrome_extensions_interactive_uitests") {
  testonly = true
  sources = [
    "browser/app_window/app_window_interactive_uitest.cc",
    "browser/guest_view/mime_handler_view/mime_handler_view_interactive_uitest.cc",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  # These are the deps from interactive_uitests minus some internal Chrome
  # ones that aren't allowed to be included here and that aren't needed.
  deps = [
    "//chrome/browser",
    "//chrome/browser/devtools",
    "//chrome/renderer",
    "//chrome/test:test_support",
    "//components/sync",
    "//content/app/resources",
    "//crypto:platform",
    "//crypto:test_support",
    "//google_apis:test_support",
    "//net",
    "//net:net_resources",
    "//net:test_support",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/hunspell",
    "//third_party/icu",
    "//third_party/libpng",
    "//third_party/zlib",
    "//ui/base:test_support",
    "//ui/resources:ui_test_pak",
    "//ui/web_dialogs:test_support",
  ]
}
