# 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/chrome_build.gni")
import("//build/config/compiler/compiler.gni")
import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build_overrides/v8.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")

content_tests_gypi_values =
    exec_script("//build/gypi_to_gn.py",
                [
                  rebase_path("../content_tests.gypi"),
                  "--replace=<(SHARED_INTERMEDIATE_DIR)=$root_gen_dir",
                ],
                "scope",
                [ "../content_tests.gypi" ])

# GYP version //content/content_tests.gypi:test_support_content
source_set("test_support") {
  testonly = true

  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  configs += [
    "//build/config:precompiled_headers",
    "//v8:external_startup_data",
  ]

  public_deps = [
    "//content/public/app:both",
    "//content/public/browser",
    "//content/public/common",
    "//third_party/WebKit/public:blink",
    "//third_party/WebKit/public:test_support",
  ]
  deps = [
    ":browsertest_base",
    ":content_test_mojo_bindings",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//cc:test_support",
    "//cc/blink",
    "//cc/ipc",
    "//cc/surfaces",
    "//components/display_compositor",
    "//components/scheduler:scheduler",
    "//components/scheduler:test_support",
    "//content/app:both_for_content_tests",
    "//content/browser:for_content_tests",
    "//content/browser/speech/proto",
    "//content/child:for_content_tests",
    "//content/gpu",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/renderer",
    "//content/public/utility",
    "//content/renderer:for_content_tests",
    "//content/shell:pak",
    "//content/utility:for_content_tests",
    "//device/nfc:mojo_bindings",
    "//ipc:test_support",
    "//ipc/mojo",
    "//media",
    "//mojo/edk/test:test_support",
    "//net:test_support",
    "//services/shell/public/cpp",
    "//skia",
    "//storage/browser",
    "//storage/common",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/accessibility:ax_gen",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/base:ui_data_pack",
    "//ui/base/ime",
    "//ui/compositor:test_support",
    "//ui/display",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events_base",
    "//ui/events:gesture_detection",
    "//ui/events:test_support",
    "//ui/gfx:test_support",
    "//ui/gl",
    "//ui/gl:test_support",
    "//ui/resources",
    "//ui/surface",
    "//url",
    "//v8",
  ]

  sources = rebase_path(content_tests_gypi_values.test_support_content_sources,
                        ".",
                        "//content")

  if (is_android) {
    sources -= [
      "mock_google_streaming_server.cc",
      "mock_google_streaming_server.h",
    ]
  }

  if (enable_plugins) {
    deps += [
      "//content/ppapi_plugin",
      "//ppapi/host",
      "//ppapi/proxy",
      "//ppapi/proxy:test_support",
      "//ppapi/shared_impl",
      "//ppapi/shared_impl:test_support",
    ]
  } else {
    sources -= [ "ppapi_unittest.cc" ]
  }

  if (enable_webrtc) {
    sources += [
      "../renderer/media/mock_data_channel_impl.cc",
      "../renderer/media/mock_data_channel_impl.h",
      "../renderer/media/mock_media_stream_dispatcher.cc",
      "../renderer/media/mock_media_stream_dispatcher.h",
      "../renderer/media/mock_peer_connection_impl.cc",
      "../renderer/media/mock_peer_connection_impl.h",
      "../renderer/media/mock_web_rtc_peer_connection_handler_client.cc",
      "../renderer/media/mock_web_rtc_peer_connection_handler_client.h",
      "../renderer/media/webrtc/mock_peer_connection_dependency_factory.cc",
      "../renderer/media/webrtc/mock_peer_connection_dependency_factory.h",
    ]

    deps += [
      "//third_party/libjingle:libjingle_webrtc",
      "//third_party/webrtc/base:rtc_base",
      "//third_party/webrtc/modules/video_capture",
    ]
  }

  if (use_glib) {
    configs += [ "//build/config/linux:glib" ]
  }

  if (use_aura) {
    deps += [
      "//ui/aura:test_support",
      "//ui/resources:ui_test_pak",
      "//ui/wm",
    ]
  }

  if (use_aura || is_mac) {
    deps += [
      "//third_party/libvpx",
      "//ui/compositor",
    ]

    sources += [
      "../browser/compositor/test/no_transport_image_transport_factory.cc",
      "../browser/compositor/test/no_transport_image_transport_factory.h",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (is_win) {
    deps += [
      "//content:sandbox_helper_win",
      "//third_party/iaccessible2",
    ]
  }

  if (is_android) {
    deps += [
      "//ui/android",
      "//ui/shell_dialogs",
    ]
  }

  if (is_win) {
    deps += [ "//sandbox" ]
  }

  if (v8_use_external_startup_data) {
    deps += [ "//gin:gin" ]
  }
}

# browsertest_support can be used by targets that run content_shell based
# browser tests.
source_set("browsertest_support") {
  testonly = true

  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  sources = [
    "../public/test/content_browser_test.cc",
    "../public/test/content_browser_test.h",
    "../public/test/content_browser_test_utils.cc",
    "../public/test/content_browser_test_utils.h",
    "../public/test/content_browser_test_utils_mac.mm",
    "content_browser_test_utils_internal.cc",
    "content_browser_test_utils_internal.h",
    "content_test_launcher.cc",
  ]

  deps = [
    ":browsertest_base",
    ":test_support",
    "//base",
    "//base:i18n",
    "//base/test:test_config",
    "//base/test:test_support",
    "//cc/surfaces",
    "//content/app:both_for_content_tests",
    "//content/browser:for_content_tests",
    "//content/shell:content_shell_lib",
    "//gin",
    "//media",
    "//net",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility:ax_gen",
    "//ui/base",
    "//ui/base/ime",
  ]

  if (is_android) {
    deps += [ "//content/public/app:both" ]
  } else {
    deps += [ "//content/public/browser" ]
  }

  configs += [ "//v8:external_startup_data" ]
}

# browsertest_base can be used by any browser test target.
source_set("browsertest_base") {
  testonly = true

  sources = [
    "../public/test/browser_test.h",
    "../public/test/browser_test_base.cc",
    "../public/test/browser_test_base.h",
    "../public/test/browser_test_utils.cc",
    "../public/test/browser_test_utils.h",
  ]

  public_deps = [
    "//content/browser:for_content_tests",
    "//content/public/browser",
    "//content/public/common",
    "//third_party/WebKit/public:blink",
  ]
  deps = [
    "//base:base",
    "//content/public/app:both",
    "//net:test_support",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//ui/events:dom_keycode_converter",
    "//ui/events:events_base",
    "//ui/events:gesture_detection",
    "//ui/resources",
  ]
}

mojom("content_test_mojo_bindings") {
  sources = [
    "../public/test/test_mojo_service.mojom",
  ]
}

mojom("web_ui_test_mojo_bindings") {
  sources = [
    "data/web_ui_test_mojo_bindings.mojom",
  ]
}

# GYP version //content/content_tests.gypi:layouttest_support_content
static_library("layouttest_support") {
  testonly = true

  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  sources =
      rebase_path(content_tests_gypi_values.layouttest_support_content_sources,
                  ".",
                  "//content")

  deps = [
    ":test_support",
    "//cc",
    "//cc/blink",
    "//components/scheduler:test_support",
    "//components/test_runner:test_runner",
    "//content/browser:for_content_tests",
    "//content/public/common",

    #"//content/shell:content_shell_lib",
    "//content/renderer:for_content_tests",
    "//mojo/edk/test:test_support",
    "//skia",
    "//ui/accessibility:ax_gen",
    "//v8",
  ]

  if (is_android) {
    deps += [ "//content/public/test/android:test_support_content_jni_headers" ]
  }
}

if (is_android) {
  import("//build/config/android/rules.gni")

  jinja_template("content_browsertests_manifest") {
    testonly = true
    input =
        "//content/shell/android/browsertests_apk/AndroidManifest.xml.jinja2"
    output =
        "${target_gen_dir}/content_browsertests_manifest/AndroidManifest.xml"
  }

  android_library("content_browsertests_java") {
    testonly = true
    java_files = [
      "../shell/android/browsertests_apk/src/org/chromium/content_browsertests_apk/ContentBrowserTestsActivity.java",
      "../shell/android/browsertests_apk/src/org/chromium/content_browsertests_apk/ContentBrowserTestsApplication.java",
    ]
    deps = [
      ":content_browsertests_resources",
      "//base:base_java",
      "//base:base_java_test_support",
      "//content/public/android:content_java",
      "//content/public/test/android:content_java_test_support",
      "//content/shell/android:content_shell_browsertests_java",
      "//testing/android/native_test:native_test_java",
      "//ui/android:ui_java",
    ]
  }

  android_resources("content_browsertests_resources") {
    testonly = true
    resource_dirs = [ "//content/shell/android/browsertests_apk/res" ]
    custom_package = "org.chromium.content_browsertests_apk"
  }
}

# TODO(GYP_GONE): Delete this after we've converted everything to GN.
# The _run targets exist only for compatibility w/ GYP.
group("content_site_isolation_browsertests_run") {
  testonly = true
  deps = [
    ":content_browsertests",
  ]
}

group("content_site_isolation_browsertests") {
  testonly = true
  data = [
    "//testing/buildbot/filters/site-per-process.content_browsertests.filter",
  ]
  data_deps = [
    ":content_browsertests",
  ]
}

test("content_browsertests") {
  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  sources = rebase_path(content_tests_gypi_values.content_browsertests_sources,
                        ".",
                        "//content")

  if (is_android || is_linux || is_mac || is_win) {
    data = [
      "$root_out_dir/content_shell.pak",
      "data/",
      "//net/data/",
      "//media/test/data/",
    ]

    if (!is_android) {
      data += [
        "//net/tools/testserver/",
        "//ppapi/tests/test_case.html",
        "//ppapi/tests/test_page.css",
        "//third_party/pyftpdlib/",
        "//third_party/pywebsocket/",
        "//third_party/tlslite/",
      ]

      if (is_mac) {
        data += [ "$root_out_dir/Content Shell.app/" ]
      }
      if (is_win) {
        if (symbol_level != 0) {
          data += [ "$root_out_dir/content_browsertests.exe.pdb" ]
        }
      }
    }
  }

  defines = [ "HAS_OUT_OF_PROC_TEST_RUNNER" ]

  configs += [
    "//build/config:precompiled_headers",
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  deps = [
    ":browsertest_base",
    ":browsertest_support",
    ":content_test_mojo_bindings",
    ":web_ui_test_mojo_bindings",
    "//base/test:test_support",
    "//components/scheduler",
    "//content:resources",
    "//content/app:both_for_content_tests",
    "//content/browser:for_content_tests",
    "//content/browser/background_sync:background_sync_proto",
    "//content/common:mojo_bindings",
    "//content/gpu",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/common",
    "//content/public/renderer",
    "//content/renderer:for_content_tests",
    "//content/shell:content_shell_lib",
    "//content/shell:pak",
    "//content/test:test_support",
    "//device/battery",
    "//device/battery:mojo_bindings",
    "//device/vibration:mojo_bindings",
    "//gin",
    "//gpu",
    "//ipc:test_support",
    "//media",
    "//media:test_support",
    "//media/audio:test_support",
    "//media/base:test_support",
    "//mojo/edk/system",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/js",
    "//net:test_support",
    "//services/shell/public/cpp",
    "//storage/browser",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/public:blink",
    "//third_party/leveldatabase",
    "//third_party/mesa:osmesa",
    "//third_party/zlib",
    "//ui/accessibility",
    "//ui/accessibility:ax_gen",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/gl:test_support",
    "//ui/resources",
    "//ui/shell_dialogs",
    "//ui/snapshot",
  ]

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

  if (enable_plugins) {
    deps += [
      "//ppapi/host",
      "//ppapi/proxy",
      "//ppapi/proxy:ipc",
      "//ppapi/shared_impl:test_support",
    ]
    data_deps += [ "//ppapi:ppapi_tests" ]
    if (is_mac) {
      data += [ "$root_out_dir/ppapi_tests.plugin/" ]
    }
  }

  if (is_win) {
    sources +=
        rebase_path(content_tests_gypi_values.content_browsertests_win_sources,
                    ".",
                    "//content")

    deps += [
      "//content/app/strings",
      "//net:net_resources",
      "//third_party/WebKit/public:resources",
      "//third_party/iaccessible2",
      "//third_party/isimpledom",
    ]

    libs = [ "oleacc.lib" ]
  }

  if (is_android) {
    sources += rebase_path(
            content_tests_gypi_values.content_browsertests_android_sources,
            ".",
            "//content")
    sources -= [
      "../browser/battery_status/battery_monitor_impl_browsertest.cc",
      "../browser/media/session/media_session_delegate_default_browsertest.cc",
    ]
    deps += [
      ":content_browsertests_java",
      ":content_browsertests_manifest",
      "//content/shell:content_shell_lib",
      "//content/shell/android:content_shell_assets",
      "//content/shell/android:content_shell_jni_headers",
      "//testing/android/native_test:native_test_support",
    ]
    deps -= [ "//device/battery" ]
    android_manifest =
        "${target_gen_dir}/content_browsertests_manifest/AndroidManifest.xml"
    use_default_launcher = false
  }

  if (is_mac) {
    sources += [ "../renderer/external_popup_menu_browsertest.cc" ]
    deps += [ "//content/shell:content_shell" ]
  }

  if (use_aura && !is_win) {
    deps += [ "//ui/events:test_support" ]
  }

  if (!use_aura && !is_mac) {
    sources -=
        [ "../browser/compositor/image_transport_factory_browsertest.cc" ]
  }

  if (enable_webrtc) {
    sources += rebase_path(
            content_tests_gypi_values.content_browsertests_webrtc_sources,
            ".",
            "//content")
    deps += [ "//testing/perf" ]
  }

  if (enable_plugins) {
    sources += rebase_path(
            content_tests_gypi_values.content_browsertests_plugins_sources,
            ".",
            "//content")
    deps += [ "//ppapi/proxy:test_support" ]
    data_deps += [ "//ppapi:ppapi_tests" ]
  }

  if (enable_web_speech) {
    sources += rebase_path(
            content_tests_gypi_values.content_browsertests_speech_sources,
            ".",
            "//content")
  }

  if (!is_chrome_branded) {
    sources += rebase_path(
            content_tests_gypi_values.content_browsertests_unofficial_build_sources,
            ".",
            "//content")
  }

  if (use_aura) {
    deps += [
      "//ui/aura",
      "//ui/touch_selection:test_support",
      "//ui/touch_selection:touch_selection",
    ]
  } else {
    sources -= [
      "../browser/accessibility/touch_accessibility_aura_browsertest.cc",
      "../browser/renderer_host/input/touch_selection_controller_client_aura_browsertest.cc",
      "../browser/web_contents/web_contents_view_aura_browsertest.cc",
    ]
  }
}

test("content_unittests") {
  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  defines = []
  sources = rebase_path(content_tests_gypi_values.content_unittests_sources,
                        ".",
                        "//content")

  if (is_android || is_linux || is_mac || is_win) {
    data = [
      "$root_out_dir/content_shell.pak",
      "data/",
      "//net/data/ssl/certificates/",
      "//media/test/data/",
    ]
  }

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

  deps = [
    ":content_test_mojo_bindings",
    ":test_support",
    "//base/test:test_support",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//cc:test_support",
    "//cc/ipc",
    "//cc/surfaces",
    "//components/display_compositor",
    "//components/scheduler",
    "//content:resources",
    "//content/app:both_for_content_tests",
    "//content/browser:for_content_tests",
    "//content/browser/cache_storage:cache_storage_proto",
    "//content/browser/notifications:notification_proto",
    "//content/browser/service_worker:service_worker_proto",
    "//content/browser/speech/proto",
    "//content/child:for_content_tests",
    "//content/common:mojo_bindings",
    "//content/gpu",
    "//content/public/browser",
    "//content/public/child",
    "//content/public/common",
    "//content/public/renderer",
    "//content/renderer:for_content_tests",
    "//crypto",
    "//device/battery",
    "//device/battery:mojo_bindings",
    "//device/bluetooth",
    "//device/bluetooth:mocks",
    "//gin",
    "//gpu",
    "//gpu:test_support",
    "//ipc:test_support",
    "//media:shared_memory_support",
    "//media:test_support",
    "//media/audio:test_support",
    "//media/base:test_support",
    "//media/midi:midi",
    "//mojo/edk/test:test_support",
    "//mojo/public/cpp/bindings",
    "//net:extras",
    "//net:test_support",
    "//ppapi/c",
    "//printing",
    "//skia",
    "//sql",
    "//sql:test_support",
    "//storage/browser",
    "//storage/common",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/public:blink",
    "//third_party/WebKit/public:mojo_bindings",
    "//third_party/icu",
    "//third_party/leveldatabase",
    "//third_party/libjingle",
    "//third_party/re2",
    "//third_party/widevine/cdm:version_h",
    "//ui/accessibility",
    "//ui/base:test_support",
    "//ui/compositor:test_support",
    "//ui/display",
    "//ui/display:test_support",
    "//ui/events/blink",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
    "//ui/gfx/ipc",
    "//ui/gfx/ipc/skia",
    "//ui/gl",
    "//ui/gl:test_support",
  ]

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

  if (!is_win) {
    sources += [ "../browser/file_descriptor_info_impl_unittest.cc" ]
  }

  if (enable_plugins) {
    sources +=
        rebase_path(content_tests_gypi_values.content_unittests_plugins_sources,
                    ".",
                    "//content")
    deps += [
      "//ppapi/host",
      "//ppapi/proxy:test_support",
      "//ppapi/shared_impl:test_support",
    ]
  }

  if (enable_webrtc) {
    sources +=
        rebase_path(content_tests_gypi_values.content_unittests_webrtc_sources,
                    ".",
                    "//content")
    deps += [
      "//media/blink",
      "//third_party/libjingle:libjingle_webrtc",
      "//third_party/webrtc/base:rtc_base",
      "//third_party/webrtc/modules/desktop_capture:primitives",
      "//third_party/webrtc/modules/video_capture",
      "//ui/shell_dialogs:shell_dialogs",
    ]

    if (is_linux || is_mac || is_win) {
      sources +=
          [ "../browser/media/capture/desktop_capture_device_unittest.cc" ]
      deps += [ "//third_party/webrtc/modules/desktop_capture" ]
    }

    if (is_chromeos) {
      sources +=
          [ "../browser/media/capture/desktop_capture_device_aura_unittest.cc" ]
    }

    if (is_android || is_chromecast) {
      sources -= [
        "../renderer/media/audio_track_recorder_unittest.cc",
        "../renderer/media/media_recorder_handler_unittest.cc",
        "../renderer/media/video_track_recorder_unittest.cc",
      ]
    }
  }

  if (enable_webrtc && enable_plugins) {
    sources += rebase_path(
            content_tests_gypi_values.content_unittests_plugin_webrtc_sources,
            ".",
            "//content")
  }

  if (enable_web_speech) {
    sources +=
        rebase_path(content_tests_gypi_values.content_unittests_speech_sources,
                    ".",
                    "//content")
  }

  if (is_linux) {
    if (use_dbus) {
      deps += [ "//dbus:test_support" ]
    } else {
      sources -=
          [ "../browser/geolocation/wifi_data_provider_linux_unittest.cc" ]
    }
  }
  if (is_win) {
    deps += [ "//third_party/iaccessible2" ]
  }
  if (is_mac) {
    # These flags are needed to run the test on Mac.
    # Search for comments about "xcode_settings" in chrome_tests.gypi.
    ldflags = [ "-Wl,-ObjC" ]

    deps += [
      "//third_party/mozilla",
      "//third_party/ocmock",
    ]
  }
  if (is_chromeos) {
    sources -= [ "../browser/geolocation/wifi_data_provider_linux_unittest.cc" ]
    deps += [ "//chromeos" ]
  }
  if (is_android) {
    sources +=
        rebase_path(content_tests_gypi_values.content_unittests_android_sources,
                    ".",
                    "//content")
    sources -= [
      "../browser/geolocation/network_location_provider_unittest.cc",
      "../browser/geolocation/wifi_data_provider_common_unittest.cc",
      "../browser/power_usage_monitor_impl_unittest.cc",
      "../browser/webui/url_data_manager_backend_unittest.cc",
    ]
    deps -= [ "//device/battery" ]

    deps += [
      "//base:base_java_unittest_support",
      "//content/public/android:content_java",
      "//v8:v8_external_startup_data_assets",
    ]

    defines += [ "APPCACHE_USE_SIMPLE_CACHE" ]
  }
  if (!is_android) {
    deps += [ "//third_party/libvpx" ]
  }

  if (use_aura) {
    deps += [
      "//components/mus/public/cpp/tests:unittest_support",
      "//ui/aura:test_support",
      "//ui/aura_extra",
      "//ui/wm",
    ]
    sources += [ "../renderer/mus/compositor_mus_connection_unittest.cc" ]
  } else {
    sources -= [
      "../browser/renderer_host/render_widget_host_view_aura_unittest.cc",
      "../browser/renderer_host/web_input_event_aura_unittest.cc",
      "../browser/web_contents/aura/overscroll_navigation_overlay_unittest.cc",
      "../browser/web_contents/aura/overscroll_window_animation_unittest.cc",
      "../browser/web_contents/aura/overscroll_window_delegate_unittest.cc",
      "../browser/web_contents/web_contents_view_aura_unittest.cc",
    ]
  }

  # Avoid windows due to non-availability of cursor resources in test.
  if (!use_aura || is_win) {
    sources -= [ "../browser/media/capture/cursor_renderer_aura_unittest.cc" ]
  }
  if (use_aura || toolkit_views) {
    deps += [ "//ui/events:test_support" ]
  }
  if (!use_aura && !is_mac) {
    sources -= [
      "../browser/compositor/reflector_impl_unittest.cc",
      "../browser/compositor/software_browser_compositor_output_surface_unittest.cc",
    ]
  }

  if (!is_win && !is_mac) {
    sources -= [ "../common/plugin_list_unittest.cc" ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  } else {
    sources -=
        [ "../browser/compositor/software_output_device_ozone_unittest.cc" ]
  }

  if (is_mac) {
    deps += [ "//third_party/boringssl" ]
  }

  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }
}

test("content_perftests") {
  # See comment at the top of //content/BUILD.gn for why this is disabled in
  # component builds.
  if (is_component_build) {
    check_includes = false
  }

  sources = [
    "../browser/renderer_host/input/input_router_impl_perftest.cc",
    "../common/discardable_shared_memory_heap_perftest.cc",
    "../test/run_all_perftests.cc",
  ]
  deps = [
    "//base/test:test_support",
    "//cc",
    "//cc/ipc",
    "//content/browser:for_content_tests",
    "//content/public/browser",
    "//content/public/common",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//testing/perf",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]

  if (is_android) {
    deps += [ "//testing/android/native_test:native_test_native_code" ]
  }
}

fuzzer_test("renderer_fuzzer") {
  sources = [
    "renderer_fuzzer.cc",
  ]
  deps = [
    ":test_support",
    "//content/shell:content_shell_lib",
  ]
}
