chromium/android_webview/tools/system_webview_shell/BUILD.gn

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

import("//build/config/android/rules.gni")
import("//testing/test.gni")

# Mark all targets as test only.
testonly = true

group("system_webview_shell") {
  deps = [
    ":system_webview_shell_apk",
    ":system_webview_shell_layout_test_apk",
    ":system_webview_shell_page_cycler_apk",
  ]
}

declare_args() {
  # Android package name to use for system_webview_shell_apk (the WebView shell
  # browser). You can change this package name to work around signing key
  # conflicts (INSTALL_FAILED_UPDATE_INCOMPATIBLE) on devices/emulators which
  # have the shell browser preinstalled under the default package name.
  system_webview_shell_package_name = "org.chromium.webview_shell"
}

system_webview_shell_android_manifest =
    "$root_gen_dir/android_webview/system_webview_shell_apk/AndroidManifest.xml"
layout_tests_android_manifest = "$root_gen_dir/android_webview/system_webview_shell_apk/layout_tests/AndroidManifest.xml"
page_cycler_tests_android_manifest = "$root_gen_dir/android_webview/system_webview_shell_apk/page_cycler/AndroidManifest.xml"

android_apk("system_webview_shell_apk") {
  apk_name = "SystemWebViewShell"
  android_manifest = system_webview_shell_android_manifest
  android_manifest_dep = ":system_webview_shell_manifest"
  deps = [
    ":system_webview_shell_apk_java",
    ":system_webview_shell_apk_resources",
  ]
  enable_lint = true
  min_sdk_version = min_supported_sdk_version
  lint_baseline_file = "lint-baseline.xml"
  lint_suppressions_file = "lint-suppressions.xml"
}

android_library("system_webview_shell_apk_java") {
  testonly = true
  sources = [
    "apk/src/org/chromium/webview_shell/JankActivity.java",
    "apk/src/org/chromium/webview_shell/MultiFileSelector.java",
    "apk/src/org/chromium/webview_shell/PageCyclerTestActivity.java",
    "apk/src/org/chromium/webview_shell/StartupTimeActivity.java",
    "apk/src/org/chromium/webview_shell/TelemetryActivity.java",
    "apk/src/org/chromium/webview_shell/TelemetryMemoryPressureActivity.java",
    "apk/src/org/chromium/webview_shell/WebPlatformTestsActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewAnimationTestActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewBrowserActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewBrowserFragment.java",
    "apk/src/org/chromium/webview_shell/WebViewBrowserSecondProcessActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewCreateDestroyActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewLayoutTestActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewMultiProfileBrowserActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewThreadTestActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewTracingActivity.java",
    "apk/src/org/chromium/webview_shell/WebViewWithClipPath.java",
  ]
  deps = [
    ":system_webview_shell_apk_resources",
    "//base:base_java",
    "//net/android:net_java",
    "//third_party/android_deps:guava_android_java",
    "//third_party/androidx:androidx_activity_activity_java",
    "//third_party/androidx:androidx_annotation_annotation_java",
    "//third_party/androidx:androidx_appcompat_appcompat_java",
    "//third_party/androidx:androidx_core_core_java",
    "//third_party/androidx:androidx_fragment_fragment_java",
    "//third_party/androidx:androidx_savedstate_savedstate_java",
    "//third_party/androidx:androidx_webkit_webkit_java",
  ]
  resources_package = "org.chromium.webview_shell"
}

jinja_template("system_webview_shell_manifest") {
  input = "apk/AndroidManifest.xml"
  output = system_webview_shell_android_manifest
  variables = [ "manifest_package=$system_webview_shell_package_name" ]
}

jinja_template("layout_tests_manifest") {
  input = "layout_tests/AndroidManifest.xml"
  output = layout_tests_android_manifest
  variables = [ "target_package=$system_webview_shell_package_name" ]
}

jinja_template("page_cycler_tests_manifest") {
  input = "page_cycler/AndroidManifest.xml"
  output = page_cycler_tests_android_manifest
  variables = [ "target_package=$system_webview_shell_package_name" ]
}

android_resources("system_webview_shell_apk_resources") {
  sources = [
    "apk/res/drawable-mdpi/breadcrumb_arrow_black.png",
    "apk/res/drawable-mdpi/ic_launcher.png",
    "apk/res/layout/activity_empty.xml",
    "apk/res/layout/activity_web_platform_tests.xml",
    "apk/res/layout/activity_web_platform_tests_child.xml",
    "apk/res/layout/activity_webview.xml",
    "apk/res/layout/activity_webview_animation_test.xml",
    "apk/res/layout/activity_webview_browser.xml",
    "apk/res/layout/activity_webview_multi_profile.xml",
    "apk/res/layout/fragment_webview_browser.xml",
    "apk/res/menu/main_menu.xml",
    "apk/res/values-night/colors.xml",
    "apk/res/values-v17/styles.xml",
    "apk/res/values-v29/styles.xml",
    "apk/res/values/colors.xml",
    "apk/res/values/ids.xml",
    "apk/res/values/strings.xml",
    "apk/res/values/styles.xml",
    "apk/res/xml/ad_services_config.xml",
    "apk/res/xml/network_security_config.xml",
  ]
}

instrumentation_test_apk("system_webview_shell_page_cycler_apk") {
  apk_name = "SystemWebViewShellPageCycler"
  apk_under_test = ":system_webview_shell_apk"
  android_manifest = page_cycler_tests_android_manifest
  android_manifest_dep = ":page_cycler_tests_manifest"
  sources = [ "page_cycler/src/org/chromium/webview_shell/page_cycler/PageCyclerTest.java" ]
  deps = [
    ":system_webview_shell_apk_java",
    "//base:base_java_test_support",
    "//content/public/android:content_java",
    "//content/public/test/android:content_java_test_support",
    "//third_party/androidx:androidx_test_monitor_java",
    "//third_party/androidx:androidx_test_runner_java",
    "//third_party/junit",
  ]
}

copy("copy_webview_js_test_script_to_blink") {
  sources = [ "test/data/resources/js-test.js" ]
  outputs =
      [ "$root_build_dir/third_party/blink/web_tests/resources/js-test.js" ]
}

instrumentation_test_apk("system_webview_shell_layout_test_apk") {
  apk_name = "SystemWebViewShellLayoutTest"
  apk_under_test = ":system_webview_shell_apk"
  android_manifest = layout_tests_android_manifest
  android_manifest_dep = ":layout_tests_manifest"
  sources = [
    "layout_tests/src/org/chromium/webview_shell/test/WebPlatformTestsActivityTest.java",
    "layout_tests/src/org/chromium/webview_shell/test/WebViewLayoutTest.java",
    "layout_tests/src/org/chromium/webview_shell/test/WebViewThreadTest.java",
  ]
  deps = [
    ":copy_webview_js_test_script_to_blink",
    ":system_webview_shell_apk_java",
    "//base:base_java",
    "//base:base_java_test_support",
    "//third_party/androidx:androidx_test_monitor_java",
    "//third_party/androidx:androidx_test_runner_java",
    "//third_party/junit",
  ]
  data = [
    "test/data/",
    "//third_party/blink/web_tests/virtual/stable/webexposed/",
    "//third_party/blink/web_tests/platform/linux/virtual/stable/webexposed/",
    "//third_party/blink/web_tests/platform/mac/virtual/stable/webexposed/",
    "//third_party/blink/web_tests/platform/win/virtual/stable/webexposed/",
    "//third_party/blink/web_tests/resources/global-interface-listing.js",
    "//third_party/blink/web_tests/virtual/stable/webexposed/",
    "//third_party/blink/web_tests/webexposed/global-interface-listing.html",
    "//third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt",
    "//third_party/chromium-variations",
    "$root_build_dir/third_party/blink/web_tests/resources/js-test.js",
  ]

  # Tell GN to ignore 'incremental_install' even if the user has it in their GN
  # args because it's incompatible with 'use_webview_provider'.
  never_incremental = true
  use_webview_provider = system_webview_apk_target
}