# Copyright 2019 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("//build/config/locales.gni")
import("//components/crash/android/silent_java_assert_reporting.gni")
import("//device/vr/buildflags/buildflags.gni")
import("//weblayer/variables.gni")

template("system_webview_bundle") {
  _is_trichrome = defined(invoker.is_trichrome) && invoker.is_trichrome
  _base_target_name = get_label_info(invoker.base_module_target, "name")
  _base_target_gen_dir =
      get_label_info(invoker.base_module_target, "target_gen_dir")
  _base_module_build_config =
      "$_base_target_gen_dir/${_base_target_name}.build_config.json"
  _rebased_base_module_build_config =
      rebase_path(_base_module_build_config, root_build_dir)
  _base_module_version_code =
      "@FileArg($_rebased_base_module_build_config:deps_info:version_code)"

  assert(_is_trichrome == defined(invoker.static_library_provider))

  if (webview_includes_weblayer) {
    # TODO(crbug.com/1105096): If WebView starts using
    # //components/module_installer, it will probably make sense to refactor
    # chrome_feature_module() to be used here.
    _base_module_build_config_target =
        "${invoker.base_module_target}$build_config_target_suffix"
    _weblayer_module_target = "${target_name}__weblayer_bundle_module"
    _weblayer_module_desc = {
      name = "weblayer"
      module_target = ":${_weblayer_module_target}"
    }

    # TODO(crbug.com/1105096): This target is needed to add all WebLayer
    # resources to the base module because of bugs with shared resources in
    # splits.
    android_resources("${_base_target_name}__all_weblayer_resources") {
      recursive_resource_deps = true
      deps = [ "//weblayer/browser/java" ]
      if (defined(invoker.weblayer_deps)) {
        deps += invoker.weblayer_deps
      }
    }

    android_app_bundle_module(_weblayer_module_target) {
      forward_variables_from(invoker,
                             [
                               "base_module_target",
                               "min_sdk_version",
                             ])
      android_manifest = "//weblayer/browser/java/AndroidManifest.xml"

      # The manifest depends on the package name from the base build config.
      android_manifest_dep = _base_module_build_config_target
      deps = [
        "//weblayer/browser/java",
        _base_module_build_config_target,
      ]
      if (defined(invoker.weblayer_deps)) {
        deps += invoker.weblayer_deps
      }
      if (enable_arcore) {
        deps += [
          "//third_party/arcore-android-sdk-client:arcore_remove_manifest_java",
        ]
      }
      aapt_locale_allowlist = platform_pak_locales
      proguard_enabled = !is_java_debug
      module_name = "weblayer"
      package_id = 126
      version_name =
          "@FileArg($_rebased_base_module_build_config:deps_info:version_name)"
      version_code = _base_module_version_code
      manifest_package =
          "@FileArg($_rebased_base_module_build_config:deps_info:package_name)"
      if (!defined(min_sdk_version) && _is_trichrome) {
        min_sdk_version = 29
      }

      if (enable_silent_java_assert_reporting) {
        custom_assertion_handler = crash_reporting_assertion_handler
      }
    }
  }

  android_app_bundle(target_name) {
    command_line_flags_file = "webview-command-line"
    proguard_enabled = !is_java_debug
    enable_language_splits = true
    if (_is_trichrome) {
      min_sdk_version = 29
    } else {
      compress_shared_libraries = true
    }
    if (webview_includes_weblayer) {
      extra_modules = [ _weblayer_module_desc ]
    }
    system_image_locale_allowlist = platform_pak_locales
    is_multi_abi =
        android_64bit_target_cpu && (!defined(invoker.include_64_bit_webview) ||
                                     invoker.include_64_bit_webview) &&
        (!defined(invoker.include_32_bit_webview) ||
         invoker.include_32_bit_webview)

    if (!defined(proguard_android_sdk_dep)) {
      proguard_android_sdk_dep = webview_framework_dep
    }

    if (enable_silent_java_assert_reporting) {
      custom_assertion_handler = crash_reporting_assertion_handler
    }

    # For this to be respected, it must also be set on the base module target.
    strip_unused_resources = is_official_build

    forward_variables_from(invoker, "*")
  }
}