# Copyright 2018 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("//tools/grit/repack.gni")

# Template to repack all scalable resources at a given scale.
#
# Arguments
#
#     scale
#         string, scale as a percentage, e.g. "200" corresponds to @2x scale.
#
# Generates a bundle_data target for convenience.
template("_ios_web_view_repack_one_scale") {
  assert(defined(invoker.scale), "scale must be defined for ${target_name}")

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

    sources = [
      # TODO(crbug.com/842244): Bundle less resources.
      "${root_gen_dir}/components/components_resources_${invoker.scale}_percent.pak",
    ]
    deps = [ "//components/resources:components_scaled_resources" ]

    output = "$target_gen_dir/web_view_${invoker.scale}_percent.pak"
    copy_data_to_bundle = true
  }
}

# Template to repack all scalable resources at all scales.
#
# Arguments
#
#     scales
#       list of strings corresponding to scales as percentage, e.g. "200"
#       corresponds to @2x scale.
#
# Generates a collection of bundle_data targets for convenience.
template("ios_web_view_repack_all_scales") {
  assert(defined(invoker.scales), "scales must be defined for ${target_name}")

  _scale_targets = []
  _target_name = target_name

  foreach(_scale, invoker.scales) {
    _scale_targets += [ ":${_target_name}_${_scale}_percent" ]
    _ios_web_view_repack_one_scale("${_target_name}_${_scale}_percent") {
      forward_variables_from(invoker, [ "testonly" ])
      visibility = [ ":${_target_name}" ]
      scale = _scale
    }
  }

  group(_target_name) {
    forward_variables_from(invoker,
                           [
                             "testonly",
                             "visibility",
                           ])
    public_deps = _scale_targets
  }
}
