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

# TODO(rockot) bug 505926: Don't include chrome files from here.
# See chrome_browser_tests_extensions_sources below
import("//chrome/chrome_tests.gni")
import("//extensions/extensions.gni")
import("//testing/test.gni")
import("//tools/grit/grit_rule.gni")
import("//tools/grit/repack.gni")

assert(enable_extensions)

# GYP version: extensions/extensions_resources.gyp:extensions_resources
group("extensions_resources") {
  public_deps = [
    ":extensions_browser_resources",
    ":extensions_renderer_resources",
    ":extensions_resources_grd",
  ]
}

# GYP version: extensions/extensions_resources.gyp:extensions_resources
#              (extensions_resources action)
grit("extensions_resources_grd") {
  source = "extensions_resources.grd"
  outputs = [
    "grit/extensions_resources.h",
    "extensions_resources.pak",
  ]
}

# GYP version: extensions/extensions_resources.gyp:extensions_resources
#              (extensions_browser_resources action)
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_flags = [
    "-E",
    "mojom_root=" + rebase_path(root_gen_dir),
  ]
}

# GYP version: extensions/extensions_resources.gyp:extensions_resources
#              (extensions_renderer_resources action)
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),
  ]

  deps = [
    "//chrome/browser/media/router:mojo_bindings__generator",
    "//device/serial:serial_mojo__generator",
    "//extensions/common:mojo__generator",
    "//extensions/common/api:mojom__generator",
  ]
}

source_set("test_support") {
  testonly = true
  sources = rebase_path(extensions_gypi_values.extensions_test_support_sources,
                        ".",
                        "//extensions")

  # 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/guest_view/browser:test_support",
    "//components/pref_registry:test_support",
    "//components/prefs:test_support",
    "//content/public/common",
    "//content/test:test_support",
    "//extensions/browser",
    "//extensions/common",
    "//extensions/common/api",
    "//extensions/common/api:api_registration",
    "//net:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  public_deps = [
    "//content/public/browser",
    "//extensions/common/api/cast_channel:cast_channel_proto",
  ]

  if (cld_version == 2) {
    deps += [ "//third_party/cld_2:cld2_static" ]
  }
}

# GYP version: //extensions/extensions.gyp:extensions_shell_and_test_pak
repack("shell_and_test_pak") {
  sources = [
    "$root_gen_dir/blink/devtools_resources.pak",
    "$root_gen_dir/blink/public/resources/blink_image_resources_100_percent.pak",
    "$root_gen_dir/blink/public/resources/blink_resources.pak",
    "$root_gen_dir/content/app/strings/content_strings_en-US.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/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",
    "//third_party/WebKit/public:image_resources",
    "//third_party/WebKit/public:resources",
    "//ui/resources",
    "//ui/strings",
  ]
}

test("extensions_unittests") {
  sources =
      rebase_path(extensions_tests_gypi_values.extensions_unittests_sources,
                  ".",
                  "//extensions")

  sources += [
    # TODO(rockot): DisplayInfoProvider::Create() is only implemented in Chrome
    # and app_shell. This is wrong.
    "shell/browser/shell_display_info_provider.cc",
  ]

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

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

  deps = [
    ":extensions_resources",
    ":shell_and_test_pak",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/keyed_service/content",
    "//components/pref_registry:test_support",
    "//components/prefs:test_support",
    "//components/user_prefs",
    "//content/test:test_support",
    "//device/bluetooth:mocks",
    "//device/core",
    "//device/hid",
    "//device/serial",
    "//device/serial:test_support",
    "//extensions/common",
    "//extensions/common/api/cast_channel:cast_channel_proto",
    "//extensions/renderer",
    "//extensions/strings",
    "//extensions/utility",
    "//mojo/edk/js",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//mojo/shell/public/interfaces",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/leveldatabase",
  ]

  data_deps = [
    "//third_party/mesa:osmesa",
  ]

  if (is_chromeos) {
    sources += [
      "browser/api/webcam_private/visca_webcam_unittest.cc",

      # TODO(rockot): There are two implementations of VpnServiceFactory, a
      # stub in app_shell and a real one in Chrome. This is wrong.
      "shell/browser/api/vpn_provider/vpn_service_factory.cc",
    ]

    deps += [ "//chromeos:test_support" ]
  }
}

test("extensions_browsertests") {
  sources =
      rebase_path(extensions_tests_gypi_values.extensions_browsertests_sources,
                  ".",
                  "//extensions")

  data = [
    "test/data/",
    "//net/data/",
    "//net/tools/testserver/",
    "//third_party/pyftpdlib/",
    "//third_party/pywebsocket/",
    "//third_party/tlslite/",
    "$root_out_dir/extensions_shell_and_test.pak",
  ]

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  deps = [
    ":test_support",
    "shell:app_shell_lib",

    # TODO(yoz): find the right deps
    "//base",
    "//base/test:test_support",
    "//components/prefs:test_support",
    "//components/storage_monitor:test_support",
    "//content/test:browsertest_base",
    "//content/test:test_support",
    "//device/bluetooth:mocks",
    "//device/core:mocks",
    "//device/hid:mocks",
    "//device/usb:mocks",
    "//mojo/edk/js",
    "//mojo/edk/system",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//testing/gmock",
    "//testing/gtest",
  ]

  data_deps = [
    "//third_party/mesa:osmesa",
  ]

  if (is_win) {
    if (target_cpu == "x86") {
      data_deps += [
        # "$root_out_dir/wow_helper.exe"  # TODO(GYP)
      ]
    }
  }

  if (is_mac) {
    deps += [ "shell:app_shell" ]  # Needed for App Shell.app's Helper.
  }
}

# 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 = rebase_path(
          chrome_tests_gypi_values.chrome_browser_tests_extensions_sources,
          ".",
          "//chrome")

  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/browser/resources:extension_resource_demo",
    "//chrome/common/extensions/api",
    "//chrome/renderer",
    "//components/autofill/content/browser:risk_proto",
    "//components/autofill/content/browser/wallet:test_support",
    "//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/translate/core/common",
    "//crypto:platform",
    "//crypto:test_support",
    "//device/bluetooth:mocks",
    "//device/serial:test_support",
    "//extensions/common/api",
    "//google_apis:test_support",
    "//media",
    "//media/base:test_support",
    "//media/cast:test_support",
    "//net",
    "//net:test_support",
    "//sdch",
    "//skia",
    "//sync",
    "//sync:test_support_sync_api",
    "//testing/gmock",
    "//testing/gtest",
    "//testing/perf",
    "//third_party/WebKit/public:blink",
    "//third_party/cacheinvalidation",
    "//third_party/icu",
    "//third_party/leveldatabase",
    "//third_party/libaddressinput",
    "//third_party/libjingle",
    "//third_party/safe_browsing:test_support",
    "//third_party/webrtc/modules/desktop_capture",
    "//third_party/widevine/cdm:version_h",
    "//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 = rebase_path(
          chrome_tests_gypi_values.chrome_interactive_ui_test_extensions_sources,
          ".",
          "//chrome")

  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",
    "//content/app/resources",
    "//crypto:platform",
    "//crypto:test_support",
    "//google_apis:test_support",
    "//net",
    "//net:net_resources",
    "//net:test_support",
    "//skia",
    "//sync",
    "//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",
  ]
}
