# Copyright 2019 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("//android_webview/system_webview_apk_tmpl.gni")
import("//build/config/android/config.gni")
import("//build/config/android/rules.gni")
import("//build/config/python.gni")
import("//third_party/icu/config.gni")
import("//tools/v8_context_snapshot/v8_context_snapshot.gni")
import("//weblayer/variables.gni")

android_assets("weblayer_shell_assets") {
  testonly = true

  sources = [ "$root_out_dir/weblayer_shell.pak" ]
  disable_compression = true
  deps = [ "//weblayer/shell:shell_pak" ]
}

android_resources("weblayer_shell_resources") {
  sources = [
    "shell_apk/res/layout/shell_browser_controls.xml",
    "shell_apk/res/menu/app_menu.xml",
    "shell_apk/res/values/strings.xml",
  ]
  custom_package = "org.chromium.weblayer.shell"
}

android_library("weblayer_shell_java") {
  testonly = true

  deps = [
    ":weblayer_shell_resources",
    "//base:base_java",
    "//third_party/android_deps:android_support_v4_java",
    "//weblayer/public/java",
  ]
  sources = [
    "shell_apk/src/org/chromium/weblayer/shell/InstrumentationActivity.java",
    "shell_apk/src/org/chromium/weblayer/shell/TelemetryActivity.java",
    "shell_apk/src/org/chromium/weblayer/shell/WebLayerShellActivity.java",
  ]
}

template("weblayer_shell_apk_helper") {
  _weblayer_shell_manifest =
      "$target_gen_dir/manifest_$target_name/AndroidManifest.xml"
  _manifest_target = target_name + "_manifest"

  jinja_template(_manifest_target) {
    input = "shell_apk/AndroidManifest.xml"
    output = _weblayer_shell_manifest
    if (defined(invoker.weblayer_package)) {
      variables = [ "weblayer_package=" + invoker.weblayer_package ]
    }
  }

  android_apk(target_name + "_apk") {
    testonly = true

    deps = [
      ":$_manifest_target",
      ":weblayer_shell_assets",
      ":weblayer_shell_java",
    ]
    apk_name = invoker.apk_name
    android_manifest = _weblayer_shell_manifest
    min_sdk_version = 21
    target_sdk_version = 28
    android_manifest_dep = ":$_manifest_target"

    # Add a native lib so the ABI is compatible with the implementation APK.
    native_lib_placeholders = [ "libdummy.so" ]
  }
}

weblayer_shell_apk_helper("weblayer_shell") {
  weblayer_package = "org.chromium.weblayer.support"
  apk_name = "WebLayerShell"
}

weblayer_shell_apk_helper("weblayer_shell_system_webview") {
  apk_name = "WebLayerShellSystemWebView"
}

generate_wrapper("run_weblayer_shell") {
  testonly = true
  wrapper_script = "$root_out_dir/bin/run_weblayer_shell"
  executable = "//weblayer/tools/run_weblayer_shell.py"
  executable_args = [
    "--shell-apk-path",
    "@WrappedPath(apks/WebLayerShell.apk)",
    "--support-apk-path",
    "@WrappedPath(apks/WebLayerSupport.apk)",
  ]

  deps = [
    ":weblayer_shell_apk",
    ":weblayer_support_apk",
  ]
}

if (public_android_sdk) {
  generate_wrapper("run_weblayer_shell_trichrome") {
    testonly = true
    wrapper_script = "$root_out_dir/bin/run_weblayer_shell_trichrome"
    executable = "//weblayer/tools/run_weblayer_shell.py"
    executable_args = [
      "--shell-apk-path",
      "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
      "--support-apk-path",
      "@WrappedPath(apks/TrichromeLibrary.apk)",
      "--support-apk-path",
      "@WrappedPath(apks/TrichromeWebView.apk)",
      "--switch-webview-to",
      system_webview_package_name,
    ]

    deps = [
      ":weblayer_shell_system_webview_apk",
      "//android_webview:trichrome_webview_apk",
      "//chrome/android:trichrome_library_apk",
    ]
  }

  generate_wrapper("run_weblayer_shell_webview") {
    testonly = true
    wrapper_script = "$root_out_dir/bin/run_weblayer_shell_webview"
    executable = "//weblayer/tools/run_weblayer_shell.py"
    executable_args = [
      "--shell-apk-path",
      "@WrappedPath(apks/WebLayerShellSystemWebView.apk)",
      "--support-apk-path",
      "@WrappedPath(apks/SystemWebView.apk)",
      "--switch-webview-to",
      system_webview_package_name,
    ]

    deps = [
      ":weblayer_shell_system_webview_apk",
      "//android_webview:system_webview_apk",
    ]
  }
}

weblayer_support_manifest =
    "$target_gen_dir/weblayer_support_manifest/AndroidManifest.xml"

jinja_template("weblayer_support_manifest") {
  input = "support_apk/AndroidManifest.xml"
  output = weblayer_support_manifest
}

android_apk("weblayer_support_apk") {
  testonly = true

  # Test runner does not support having "additional apks" that are incremental.
  never_incremental = true

  deps = [
    ":weblayer_support_manifest",
    "//android_webview:locale_pak_assets",
    "//android_webview:pak_file_assets",
    "//android_webview:weblayer_webview_assets",
    "//base:base_java",
    "//weblayer:locale_pak_assets",
    "//weblayer/browser/java",
    "//weblayer/browser/java:test_java",
  ]

  # Transitive dependencies
  deps += [
    "//components/safe_browsing/android:safe_browsing_java",
    "//components/viz/service:service_java",
    "//media/base/android:media_java",
    "//media/capture/video/android:capture_java",
    "//mojo/public/java:system_java",
    "//net/android:net_java",
  ]

  # default upstream safebrowsing related classes
  deps += [ "//weblayer/browser/java:gms_bridge_upstream_impl_java" ]

  apk_name = "WebLayerSupport"
  android_manifest = weblayer_support_manifest
  min_sdk_version = 21
  target_sdk_version = 28
  android_manifest_dep = ":weblayer_support_manifest"
  shared_resources = true

  product_config_java_packages = [ weblayer_product_config_java_package ]

  native_lib_version_rule = "//build/util:chrome_version_json"
  _native_lib_file =
      rebase_path("$root_gen_dir/CHROME_VERSION.json", root_build_dir)
  native_lib_version_arg = "@FileArg($_native_lib_file:full-quoted)"

  shared_libraries = [ "//weblayer:libweblayer" ]
}

python_library("weblayer_shell_wpt") {
  testonly = true
  pydeps_file = "//testing/scripts/run_android_wpt.pydeps"
  data_deps = [
    ":weblayer_shell_apk",
    ":weblayer_support_apk",
    "//build/android:test_runner_py",
    "//chrome/test/chromedriver:chromedriver($host_toolchain)",
    "//third_party/blink/tools:wpt_tests_android_isolate",
  ]
}
