# 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("//build/config/android/rules.gni")
import("//build/config/locales.gni")
import("//weblayer/variables.gni")

template("system_webview_bundle") {
  _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"
  _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)"
  if (webview_includes_weblayer && weblayer_in_split) {
    # 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",
                               "uncompress_shared_libraries",
                             ])
      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
      }
      aapt_locale_allowlist = locales
      proguard_enabled = !is_java_debug
      package_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)"
    }
  }

  android_app_bundle(target_name) {
    command_line_flags_file = "webview-command-line"
    proguard_enabled = !is_java_debug
    enable_language_splits = true
    version_code = _base_module_version_code
    if (webview_includes_weblayer && weblayer_in_split) {
      extra_modules = [ _weblayer_module_desc ]
    }
    system_image_locale_allowlist = 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
    }

    forward_variables_from(invoker, "*")
  }
}
