# Copyright 2016 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/locales.gni")
import("//chrome/browser/buildflags.gni")
import("//chrome/common/features.gni")
import("//chromeos/components/media_app_ui/media_app_ui.gni")
import("//extensions/buildflags/buildflags.gni")
import("//ui/base/ui_features.gni")
import("chrome_repack_locales.gni")

# Generates a rule to repack a set of resources, substituting a given string
# in for the percentage (e.g. "100", "200"). It generates the repacked files in
# the "gen" directory, and then introduces a copy rule to copy it to the root
# build directory.
#
# Argument:
#   percent [required]
#      String to substitute for the percentage.
template("chrome_repack_percent") {
  percent = invoker.percent

  repack(target_name) {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "repack_allowlist",
                             "visibility",
                           ])

    # All sources should also have deps for completeness.
    sources = [
      "$root_gen_dir/chrome/renderer_resources_${percent}_percent.pak",
      "$root_gen_dir/chrome/theme_resources_${percent}_percent.pak",
      "$root_gen_dir/components/components_resources_${percent}_percent.pak",
      "$root_gen_dir/content/app/resources/content_resources_${percent}_percent.pak",
      "$root_gen_dir/third_party/blink/public/resources/blink_scaled_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/resources/ui_resources_${percent}_percent.pak",
    ]

    deps = [
      "//chrome/app/theme:theme_resources",
      "//chrome/renderer:resources",
      "//components/resources",
      "//components/strings",
      "//content/app/resources",
      "//net:net_resources",
      "//third_party/blink/public:scaled_resources_${percent}_percent",
      "//ui/resources",
    ]

    if (defined(invoker.deps)) {
      deps += invoker.deps
    }

    if (toolkit_views) {
      sources += [ "$root_gen_dir/ui/views/resources/views_resources_${percent}_percent.pak" ]
      deps += [ "//ui/views/resources" ]
    }
    if (is_chromeos) {
      sources += [
        "$root_gen_dir/ash/app_list/resources/app_list_resources_${percent}_percent.pak",
        "$root_gen_dir/ash/login/resources/login_resources_${percent}_percent.pak",
        "$root_gen_dir/ui/chromeos/resources/ui_chromeos_resources_${percent}_percent.pak",
      ]
      deps += [
        "//ash/app_list/resources",
        "//ash/login/resources",
        "//ui/chromeos/resources",
      ]
    }
    if (enable_extensions) {
      sources += [ "$root_gen_dir/extensions/extensions_browser_resources_${percent}_percent.pak" ]
      deps += [ "//extensions:extensions_browser_resources" ]
    }

    output = "${invoker.output_dir}/chrome_${percent}_percent.pak"
  }
}

template("chrome_extra_paks") {
  repack(target_name) {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "repack_allowlist",
                             "visibility",
                           ])
    output = "${invoker.output_dir}/resources.pak"
    sources = [
      "$root_gen_dir/base/tracing/protos/tracing_proto_resources.pak",
      "$root_gen_dir/chrome/browser_resources.pak",
      "$root_gen_dir/chrome/chrome_unscaled_resources.pak",
      "$root_gen_dir/chrome/common_resources.pak",
      "$root_gen_dir/components/autofill/core/browser/autofill_address_rewriter_resources.pak",
      "$root_gen_dir/components/components_resources.pak",
      "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
      "$root_gen_dir/content/content_resources.pak",
      "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
      "$root_gen_dir/net/net_resources.pak",
      "$root_gen_dir/skia/skia_resources.pak",
      "$root_gen_dir/third_party/blink/public/resources/blink_resources.pak",
      "$root_gen_dir/third_party/blink/public/resources/inspector_overlay_resources.pak",
      "$root_gen_dir/ui/resources/webui_generated_resources.pak",
      "$root_gen_dir/ui/resources/webui_resources.pak",
    ]
    deps = [
      "//base/tracing/protos:chrome_track_event_resources",
      "//chrome/app/theme:chrome_unscaled_resources",
      "//chrome/browser:resources",
      "//chrome/common:resources",
      "//components/autofill/core/browser:autofill_address_rewriter_resources",
      "//components/resources",
      "//content:content_resources",
      "//content/browser/tracing:resources",
      "//mojo/public/js:resources",
      "//net:net_resources",
      "//skia:skia_resources",
      "//third_party/blink/public:devtools_inspector_resources",
      "//third_party/blink/public:resources",
      "//ui/resources",
    ]
    if (defined(invoker.deps)) {
      deps += invoker.deps
    }
    if (defined(invoker.additional_paks)) {
      sources += invoker.additional_paks
    }

    if (!is_android) {
      # New paks should be added here by default.
      sources += [
        "$root_gen_dir/chrome/bookmarks_resources.pak",
        "$root_gen_dir/chrome/browser/media/kaleidoscope/kaleidoscope_resources.pak",
        "$root_gen_dir/chrome/commander_resources.pak",
        "$root_gen_dir/chrome/component_extension_resources.pak",
        "$root_gen_dir/chrome/dev_ui_resources.pak",
        "$root_gen_dir/chrome/downloads_resources.pak",
        "$root_gen_dir/chrome/gaia_auth_host_resources.pak",
        "$root_gen_dir/chrome/history_resources.pak",
        "$root_gen_dir/chrome/local_ntp_resources.pak",
        "$root_gen_dir/chrome/new_tab_page_resources.pak",
        "$root_gen_dir/chrome/read_later_resources.pak",
        "$root_gen_dir/chrome/settings_resources.pak",
        "$root_gen_dir/chrome/tab_search_resources.pak",
        "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
        "$root_gen_dir/headless/headless_lib_resources.pak",
      ]
      deps += [
        "//chrome/browser/media/kaleidoscope:kaleidoscope_resources",
        "//chrome/browser/resources:component_extension_resources",
        "//chrome/browser/resources:dev_ui_paks",
        "//chrome/browser/resources:gaia_auth_host_resources",
        "//chrome/browser/resources:local_ntp_resources",
        "//chrome/browser/resources:new_tab_page_resources",
        "//chrome/browser/resources/bookmarks:bookmarks_resources",
        "//chrome/browser/resources/commander:commander_resources",
        "//chrome/browser/resources/downloads:downloads_resources",
        "//chrome/browser/resources/history:history_resources",
        "//chrome/browser/resources/read_later:read_later_resources",
        "//chrome/browser/resources/settings:settings_resources",
        "//chrome/browser/resources/tab_search:tab_search_resources",
        "//content/browser/devtools:devtools_resources",
        "//headless:resources",
      ]
      if (is_chrome_branded) {
        sources +=
            [ "$root_gen_dir/chrome/preinstalled_web_apps_resources.pak" ]
        deps += [ "//chrome/browser/resources:preinstalled_web_apps_resources" ]
      }
    }
    if (is_chromeos) {
      sources += [
        "$root_gen_dir/ash/public/cpp/resources/ash_public_unscaled_resources.pak",
        "$root_gen_dir/chrome/bluetooth_pairing_dialog_resources.pak",
        "$root_gen_dir/chrome/browser/supervised_user/supervised_user_unscaled_resources.pak",
        "$root_gen_dir/chrome/cellular_setup_resources.pak",
        "$root_gen_dir/chrome/multidevice_internals_resources.pak",
        "$root_gen_dir/chrome/multidevice_setup_resources.pak",
        "$root_gen_dir/chrome/nearby_internals_resources.pak",
        "$root_gen_dir/chrome/nearby_share_dialog_resources.pak",
        "$root_gen_dir/chrome/os_settings_resources.pak",
        "$root_gen_dir/chromeos/chromeos_camera_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_diagnostics_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_help_app_bundle_resources.pak",
        "$root_gen_dir/chromeos/chromeos_help_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_media_app_bundle_resources.pak",
        "$root_gen_dir/chromeos/chromeos_media_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_print_management_resources.pak",
        "$root_gen_dir/chromeos/chromeos_resources.pak",
        "$root_gen_dir/chromeos/chromeos_scanning_app_resources.pak",
        "$root_gen_dir/chromeos/connectivity_diagnostics_resources.pak",
        "$root_gen_dir/third_party/ink/ink_resources.pak",
        "$root_gen_dir/ui/file_manager/file_manager_gen_resources.pak",
        "$root_gen_dir/ui/file_manager/file_manager_resources.pak",
      ]
      deps += [
        "//ash/public/cpp/resources:ash_public_unscaled_resources",
        "//chrome/browser/resources:bluetooth_pairing_dialog_resources",
        "//chrome/browser/resources:multidevice_internals_resources",
        "//chrome/browser/resources/chromeos:cellular_setup_resources",
        "//chrome/browser/resources/chromeos:multidevice_setup_resources",
        "//chrome/browser/resources/nearby_internals:nearby_internals_resources",
        "//chrome/browser/resources/nearby_share:nearby_share_dialog_resources",
        "//chrome/browser/resources/settings/chromeos:os_settings_resources",
        "//chrome/browser/supervised_user:supervised_user_unscaled_resources",
        "//chromeos/resources",
        "//chromeos/resources:camera_app_resources",
        "//chromeos/resources:connectivity_diagnostics_resources",
        "//chromeos/resources:diagnostics_app_resources",
        "//chromeos/resources:help_app_bundle_resources",
        "//chromeos/resources:help_app_resources",
        "//chromeos/resources:media_app_bundle_resources",
        "//chromeos/resources:media_app_resources",
        "//chromeos/resources:print_management_resources",
        "//chromeos/resources:scanning_app_resources",
        "//third_party/ink:ink_resources",
        "//ui/file_manager:file_manager_gen_resources",
        "//ui/file_manager:resources",
      ]

      if (!is_official_build) {
        sources += [
          "$root_gen_dir/chromeos/chromeos_file_manager_resources.pak",
          "$root_gen_dir/chromeos/chromeos_sample_system_web_app_resources.pak",
          "$root_gen_dir/chromeos/chromeos_telemetry_extension_resources.pak",
        ]
        deps += [
          "//chromeos/resources:file_manager_resources",
          "//chromeos/resources:sample_system_web_app_resources",
          "//chromeos/resources:telemetry_extension_resources",
        ]
      }
    }
    if (is_linux || is_chromeos) {
      sources += [ "$root_gen_dir/chrome/webui_js_error_resources.pak" ]
      deps += [
        "//chrome/browser/resources/webui_js_error:webui_js_error_resources",
      ]
    }
    if (!is_android && !is_chromeos) {
      sources += [
        "$root_gen_dir/chrome/profile_picker_resources.pak",
        "$root_gen_dir/chrome/welcome_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources/signin/profile_picker:profile_picker_resources",
        "//chrome/browser/resources/welcome:welcome_resources",
      ]
    }
    if (enable_extensions) {
      sources += [
        "$root_gen_dir/chrome/extensions_resources.pak",
        "$root_gen_dir/chrome/sync_file_system_internals_resources.pak",
        "$root_gen_dir/extensions/extensions_renderer_resources.pak",
        "$root_gen_dir/extensions/extensions_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources:sync_file_system_internals_resources",
        "//chrome/browser/resources/extensions:extensions_resources",
        "//extensions:extensions_resources",
      ]
    }
    if (enable_print_preview) {
      sources += [ "$root_gen_dir/chrome/print_preview_resources.pak" ]
      deps +=
          [ "//chrome/browser/resources/print_preview:print_preview_resources" ]
    }
    if (enable_webui_tab_strip) {
      sources += [ "$root_gen_dir/chrome/tab_strip_resources.pak" ]
      deps += [ "//chrome/browser/resources/tab_strip:tab_strip_resources" ]
    }
  }
}

# Defines repack() targets used by Chrome. Specifically:
# * chrome_100_percent.pak
# * chrome_200_percent.pak (optionally)
# * resources.pak
# * locale .pak files
#
# Parameters:
#   output_dir [required]: Directory to output .pak files. Locale .pak files
#       will always be place in $output_dir/locales
#   additional_extra_paks: List of extra .pak sources for resources.pak.
#   locale_allowlist: if set, override repack_allowlist for locale .pak files.
#   copy_data_to_bundle:
#   deps:
#   output_dir:
#   public_deps:
#   repack_allowlist:
#   visibility:
#     Normal meanings.
#
template("chrome_paks") {
  chrome_repack_percent("${target_name}_100_percent") {
    percent = "100"
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "output_dir",
                             "repack_allowlist",
                             "visibility",
                           ])
  }

  if (enable_hidpi) {
    chrome_repack_percent("${target_name}_200_percent") {
      percent = "200"
      forward_variables_from(invoker,
                             [
                               "copy_data_to_bundle",
                               "deps",
                               "output_dir",
                               "repack_allowlist",
                               "visibility",
                             ])
    }
  }

  chrome_extra_paks("${target_name}_extra") {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "output_dir",
                             "repack_allowlist",
                             "visibility",
                           ])
    if (defined(invoker.additional_extra_paks)) {
      additional_paks = invoker.additional_extra_paks
    }
  }

  chrome_repack_locales("${target_name}_locales") {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "visibility",
                           ])
    if (defined(invoker.locale_allowlist)) {
      repack_allowlist = invoker.locale_allowlist
    } else if (defined(invoker.repack_allowlist)) {
      repack_allowlist = invoker.repack_allowlist
    }

    input_locales = locales
    output_dir = "${invoker.output_dir}/locales"

    if (is_mac) {
      output_locales = locales_as_mac_outputs
    } else {
      output_locales = locales
    }
  }

  group(target_name) {
    forward_variables_from(invoker, [ "deps" ])
    public_deps = [
      ":${target_name}_100_percent",
      ":${target_name}_extra",
      ":${target_name}_locales",
    ]
    if (enable_hidpi) {
      public_deps += [ ":${target_name}_200_percent" ]
    }
    if (!defined(invoker.copy_data_to_bundle) || !invoker.copy_data_to_bundle) {
      data_deps = public_deps
    }
    if (defined(invoker.public_deps)) {
      public_deps += invoker.public_deps
    }
  }
}
