# 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/ui/chromeos/resources/ui_chromeos_resources_${percent}_percent.pak",
      ]
      deps += [
        "//ash/components/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/ui/app_list/resources/app_list_resources_${percent}_percent.pak" ]
      deps += [ "//ui/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/task_scheduler_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:task_scheduler_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/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: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/components/chrome_apps/chrome_apps_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",
        "//components/chrome_apps:resources",
        "//ui/file_manager: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
    }
  }
}
