# 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/common/features.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_whitelist",
                             "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/components/resources/ash_components_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/components/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" ]
    }
    if (enable_app_list) {
      sources += [ "$root_gen_dir/ash/app_list/resources/app_list_resources_${percent}_percent.pak" ]
      deps += [ "//ash/app_list/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_whitelist",
                             "visibility",
                           ])
    output = "${invoker.output_dir}/resources.pak"
    sources = [
      "$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/chrome/invalidations_resources.pak",
      "$root_gen_dir/chrome/net_internals_resources.pak",
      "$root_gen_dir/chrome/quota_internals_resources.pak",
      "$root_gen_dir/chrome/translate_internals_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/third_party/blink/public/resources/blink_resources.pak",
      "$root_gen_dir/ui/resources/webui_resources.pak",
    ]
    deps = [
      "//chrome/app/theme:chrome_unscaled_resources",
      "//chrome/browser:resources",
      "//chrome/browser/resources:invalidations_resources",
      "//chrome/browser/resources:net_internals_resources",
      "//chrome/browser/resources:quota_internals_resources",
      "//chrome/browser/resources:translate_internals_resources",
      "//chrome/common:resources",
      "//components/resources",
      "//content:resources",
      "//content/browser/tracing:resources",
      "//mojo/public/js:resources",
      "//net:net_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) {
      sources += [ "$root_gen_dir/chrome/webapks_ui_resources.pak" ]
      deps += [ "//chrome/browser/resources:webapks_ui_resources" ]
    } else {
      # New paks should be added here by default.
      sources += [
        "$root_gen_dir/chrome/component_extension_resources.pak",
        "$root_gen_dir/chrome/local_ntp_resources.pak",
        "$root_gen_dir/chrome/settings_resources.pak",
        "$root_gen_dir/content/browser/devtools/devtools_resources.pak",
        "$root_gen_dir/headless/headless_lib_resources.pak",
      ]
      deps += [
        "//chrome/browser/resources:component_extension_resources",
        "//chrome/browser/resources:local_ntp_resources",
        "//chrome/browser/resources:settings_resources",
        "//content/browser/devtools:devtools_resources",
        "//headless:resources",
      ]
    }
    if (is_chromeos) {
      sources += [
        "$root_gen_dir/ash/public/cpp/resources/ash_public_unscaled_resources.pak",
        "$root_gen_dir/chrome/multidevice_setup_resources.pak",
        "$root_gen_dir/chromeos/chromeos_resources.pak",
        "$root_gen_dir/third_party/ink/ink_resources.pak",
        "$root_gen_dir/ui/file_manager/file_manager_resources.pak",
      ]
      deps += [
        "//ash/public/cpp/resources:ash_public_unscaled_resources",
        "//chrome/browser/resources/chromeos:multidevice_setup_resources",
        "//chromeos/resources",
        "//third_party/ink:ink_resources",
        "//ui/file_manager:resources",
      ]
    }
    if (!is_android && !is_chromeos) {
      sources += [ "$root_gen_dir/chrome/onboarding_welcome_resources.pak" ]
      deps += [ "//chrome/browser/resources:onboarding_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:extensions_resources",
        "//chrome/browser/resources:sync_file_system_internals_resources",
        "//extensions:extensions_resources",
      ]
    }
    if (enable_print_preview) {
      sources += [ "$root_gen_dir/chrome/print_preview_resources.pak" ]
      deps += [ "//chrome/browser/resources:print_preview_resources" ]
    }
  }
}

# Defines repack() targets used by Chrome. Specifically:
# * chrome_100_percent.pak
# * chrome_200_percent.pak (optionally)
# * resources.pak
# * locale .pak files
#
# Paramters:
#   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_whitelist: if set, override repack_whitelist for locale .pak files.
#   copy_data_to_bundle:
#   deps:
#   output_dir:
#   public_deps:
#   repack_whitelist:
#   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_whitelist",
                             "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_whitelist",
                               "visibility",
                             ])
    }
  }

  chrome_extra_paks("${target_name}_extra") {
    forward_variables_from(invoker,
                           [
                             "copy_data_to_bundle",
                             "deps",
                             "output_dir",
                             "repack_whitelist",
                             "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_whitelist)) {
      repack_whitelist = invoker.locale_whitelist
    } else if (defined(invoker.repack_whitelist)) {
      repack_whitelist = invoker.repack_whitelist
    }

    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.public_deps)) {
      public_deps += invoker.public_deps
    }
  }
}
