# 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/chromeos/ui_mode.gni")
import("//build/config/locales.gni")
import("//chrome/browser/buildflags.gni")
import("//chrome/common/features.gni")
import("//chromeos/components/chromebox_for_meetings/buildflags/buildflags.gni")
import("//extensions/buildflags/buildflags.gni")
import("//pdf/features.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_ash) {
      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/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",
      "//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/app_service_internals_resources.pak",
        "$root_gen_dir/chrome/bookmarks_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/download_shelf_resources.pak",
        "$root_gen_dir/chrome/downloads_resources.pak",
        "$root_gen_dir/chrome/feedback_resources.pak",
        "$root_gen_dir/chrome/gaia_auth_host_resources.pak",
        "$root_gen_dir/chrome/history_resources.pak",
        "$root_gen_dir/chrome/management_resources.pak",
        "$root_gen_dir/chrome/new_tab_page_instant_resources.pak",
        "$root_gen_dir/chrome/new_tab_page_resources.pak",
        "$root_gen_dir/chrome/new_tab_page_third_party_resources.pak",
        "$root_gen_dir/chrome/read_later_resources.pak",
        "$root_gen_dir/chrome/settings_resources.pak",
        "$root_gen_dir/chrome/signin_resources.pak",
        "$root_gen_dir/chrome/tab_search_resources.pak",
        "$root_gen_dir/chrome/webid_resources_100_percent.pak",
        "$root_gen_dir/chrome/whats_new_resources.pak",
        "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
        "$root_gen_dir/content/browser/tracing/tracing_resources.pak",
        "$root_gen_dir/headless/headless_lib_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources:component_extension_resources",
        "//chrome/browser/resources:dev_ui_paks",
        "//chrome/browser/resources:webid_resources",
        "//chrome/browser/resources/app_service_internals:resources",
        "//chrome/browser/resources/bookmarks:resources",
        "//chrome/browser/resources/commander:resources",
        "//chrome/browser/resources/download_shelf:resources",
        "//chrome/browser/resources/downloads:resources",
        "//chrome/browser/resources/feedback_webui:resources",
        "//chrome/browser/resources/gaia_auth_host:resources",
        "//chrome/browser/resources/history:resources",
        "//chrome/browser/resources/management:resources",
        "//chrome/browser/resources/new_tab_page:resources",
        "//chrome/browser/resources/new_tab_page_instant:resources",
        "//chrome/browser/resources/new_tab_page_third_party:resources",
        "//chrome/browser/resources/read_later:resources",
        "//chrome/browser/resources/settings:resources",
        "//chrome/browser/resources/signin:resources",
        "//chrome/browser/resources/tab_search:resources",
        "//chrome/browser/resources/whats_new:resources",
        "//content/browser/devtools:devtools_resources",
        "//content/browser/tracing:resources",
        "//headless:resources",
      ]
      if (is_chrome_branded) {
        sources += [
          "$root_gen_dir/chrome/media_router_feedback_resources.pak",
          "$root_gen_dir/chrome/preinstalled_web_apps_resources.pak",
        ]
        deps += [
          "//chrome/browser/resources:preinstalled_web_apps_resources",
          "//chrome/browser/resources/media_router:cast_feedback_ui_resources",
        ]
      }
    }
    if (is_chromeos_ash) {
      sources += [
        "$root_gen_dir/ash/ash_diagnostics_app_resources.pak",
        "$root_gen_dir/ash/ash_os_feedback_resources.pak",
        "$root_gen_dir/ash/ash_scanning_app_resources.pak",
        "$root_gen_dir/ash/ash_shimless_rma_resources.pak",
        "$root_gen_dir/ash/ash_shortcut_customization_app_resources.pak",
        "$root_gen_dir/ash/public/cpp/resources/ash_public_unscaled_resources.pak",
        "$root_gen_dir/ash/webui/file_manager/resources/file_manager_swa_resources.pak",
        "$root_gen_dir/chrome/audio_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/common/chromeos/extensions/chromeos_system_extensions_resources.pak",
        "$root_gen_dir/chrome/emoji_picker_resources.pak",
        "$root_gen_dir/chrome/enterprise_casting_resources.pak",
        "$root_gen_dir/chrome/internet_config_dialog_resources.pak",
        "$root_gen_dir/chrome/internet_detail_dialog_resources.pak",
        "$root_gen_dir/chrome/launcher_internals_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/network_ui_resources.pak",
        "$root_gen_dir/chrome/oobe_modulized_resources.pak",
        "$root_gen_dir/chrome/oobe_resources.pak",
        "$root_gen_dir/chrome/os_settings_resources.pak",
        "$root_gen_dir/chromeos/chromeos_camera_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_eche_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_eche_bundle_resources.pak",
        "$root_gen_dir/chromeos/chromeos_help_app_bundle_resources.pak",
        "$root_gen_dir/chromeos/chromeos_help_app_kids_magazine_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_personalization_app_resources.pak",
        "$root_gen_dir/chromeos/chromeos_print_management_resources.pak",
        "$root_gen_dir/chromeos/chromeos_projector_app_trusted_resources.pak",
        "$root_gen_dir/chromeos/chromeos_projector_app_untrusted_resources.pak",
        "$root_gen_dir/chromeos/chromeos_resources.pak",
        "$root_gen_dir/chromeos/connectivity_diagnostics_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/components/resources:diagnostics_app_resources",
        "//ash/components/resources:os_feedback_resources",
        "//ash/components/resources:scanning_app_resources",
        "//ash/components/resources:shimless_rma_resources",
        "//ash/components/resources:shortcut_customization_app_resources",
        "//ash/public/cpp/resources:ash_public_unscaled_resources",
        "//ash/webui/file_manager/resources:file_manager_swa_resources",
        "//chrome/browser/resources:bluetooth_pairing_dialog_resources",
        "//chrome/browser/resources:internet_config_dialog_resources",
        "//chrome/browser/resources:internet_detail_dialog_resources",
        "//chrome/browser/resources/chromeos:multidevice_setup_resources",
        "//chrome/browser/resources/chromeos/audio:resources",
        "//chrome/browser/resources/chromeos/emoji_picker:resources",
        "//chrome/browser/resources/chromeos/enterprise_casting:resources",
        "//chrome/browser/resources/chromeos/launcher_internals:resources",
        "//chrome/browser/resources/chromeos/login:modulized_resources",
        "//chrome/browser/resources/chromeos/login:resources",
        "//chrome/browser/resources/chromeos/multidevice_internals:resources",
        "//chrome/browser/resources/chromeos/network_ui:resources",
        "//chrome/browser/resources/nearby_internals:resources",
        "//chrome/browser/resources/nearby_share:resources",
        "//chrome/browser/resources/settings/chromeos:resources",
        "//chrome/browser/supervised_user:supervised_user_unscaled_resources",
        "//chrome/common/chromeos/extensions:resources",
        "//chromeos/resources",
        "//chromeos/resources:camera_app_resources",
        "//chromeos/resources:connectivity_diagnostics_resources",
        "//chromeos/resources:eche_app_resources",
        "//chromeos/resources:eche_bundle_resources",
        "//chromeos/resources:help_app_bundle_resources",
        "//chromeos/resources:help_app_kids_magazine_bundle_resources",
        "//chromeos/resources:help_app_resources",
        "//chromeos/resources:media_app_bundle_resources",
        "//chromeos/resources:media_app_resources",
        "//chromeos/resources:personalization_app_resources",
        "//chromeos/resources:print_management_resources",
        "//chromeos/resources:projector_app_trusted_resources",
        "//chromeos/resources:projector_app_untrusted_resources",
        "//ui/file_manager:file_manager_gen_resources",
        "//ui/file_manager:resources",
      ]

      if (!is_official_build) {
        sources += [
          "$root_gen_dir/chromeos/chromeos_demo_mode_app_resources.pak",
          "$root_gen_dir/chromeos/chromeos_sample_system_web_app_resources.pak",
          "$root_gen_dir/chromeos/chromeos_sample_system_web_app_untrusted_resources.pak",
          "$root_gen_dir/chromeos/chromeos_telemetry_extension_resources.pak",
        ]
        deps += [
          "//chromeos/resources:demo_mode_app_resources",
          "//chromeos/resources:sample_system_web_app_resources",
          "//chromeos/resources:sample_system_web_app_untrusted_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:resources" ]
    }
    if (!is_android && !is_chromeos_ash) {
      sources += [
        "$root_gen_dir/chrome/apps_resources.pak",
        "$root_gen_dir/chrome/profile_picker_resources.pak",
        "$root_gen_dir/chrome/welcome_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources/ntp4:apps_resources",
        "//chrome/browser/resources/signin/profile_picker:resources",
        "//chrome/browser/resources/welcome:resources",
      ]
    }

    if (is_win || is_mac || is_linux || is_chromeos_lacros || is_fuchsia) {
      sources += [ "$root_gen_dir/chrome/browser_switch_resources.pak" ]
      deps += [ "//chrome/browser/resources/browser_switch: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/extensions:resources",
        "//chrome/browser/resources/sync_file_system_internals:resources",
        "//extensions:extensions_resources",
      ]
    }
    if (enable_pdf) {
      sources += [ "$root_gen_dir/chrome/pdf_resources.pak" ]
      deps += [ "//chrome/browser/resources/pdf:resources" ]
    }
    if (enable_print_preview) {
      sources += [ "$root_gen_dir/chrome/print_preview_resources.pak" ]
      deps += [ "//chrome/browser/resources/print_preview:resources" ]
    }
    if (enable_webui_tab_strip) {
      sources += [ "$root_gen_dir/chrome/tab_strip_resources.pak" ]
      deps += [ "//chrome/browser/resources/tab_strip:resources" ]
    }
    if (is_cfm) {
      sources += [ "$root_gen_dir/chrome/cfm_network_settings_resources.pak" ]
      deps += [
        "//chrome/browser/resources/chromeos/chromebox_for_meetings: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.
#   files_to_hash: if set, a list of pak file names to generate SHA256 hashes
#     for.
#   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
    }
  }

  if (defined(invoker.files_to_hash)) {
    _prefix = "$target_gen_dir/app/${target_name}_integrity"
    _integrity_outputs = [
      "$_prefix.cc",
      "$_prefix.h",
    ]

    action("${target_name}_integrity_hash") {
      script = "tools/build/sha256_file.py"
      outputs = _integrity_outputs
      inputs = []
      foreach(file, invoker.files_to_hash) {
        inputs += [ "${invoker.output_dir}/$file" ]
      }

      args = rebase_path([ _prefix ] + inputs, root_build_dir)

      deps = [ ":${invoker.target_name}" ]
    }

    source_set("${target_name}_integrity") {
      sources = _integrity_outputs
      deps = [ ":${target_name}_hash" ]
    }
  }
}
