# 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)

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),
  ]

  # Files included from ${mojom_root} are generated.
  source_is_generated = true

  deps = [
    "//extensions/common:mojo_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_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_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",
    "//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/app/strings/content_strings_en-US.pak",
    "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
    "$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/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/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:resources",
    "//content/app/strings",
    "//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",
    "//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",
  ]

  if (enable_mus) {
    deps += [ "//ui/aura:test_support" ]
  }
}

test("extensions_browsertests") {
  data = [
    "//extensions/test/data/",
    "//net/tools/testserver/",
    "//third_party/pyftpdlib/",
    "//third_party/pywebsocket/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/extension_options/extension_options_apitest.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/app_modal",
    "//components/autofill/content/browser:risk_proto",
    "//components/autofill/content/renderer:test_support",
    "//components/captive_portal:test_support",
    "//components/dom_distiller/content/browser",
    "//components/dom_distiller/core:test_support",
    "//components/guest_view/browser:test_support",
    "//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/modules/desktop_capture",
    "//third_party/webrtc_overrides",
    "//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",
  ]
}
