# Copyright 2014 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/grit_rule.gni")
import("//tools/grit/repack.gni")
import("//ui/base/ui_features.gni")

assert(is_chromeos)
assert(enable_hidpi)

grit("resources") {
  source = "ash_resources.grd"
  outputs = [
    "grit/ash_resources.h",
    "ash_resources_100_percent.pak",
    "ash_resources_200_percent.pak",
  ]
}

# Repacks resources needed for ash_unittests, etc. at a given scale.
# TODO(msw): Use ui_test.pak instead of its pieces? (no 200% support?)
template("ash_test_resources") {
  percent = invoker.percent

  repack("ash_test_resources_${target_name}") {
    output = "$root_build_dir/${target_name}.pak"

    sources = [
      "$root_gen_dir/ash/resources/ash_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/app_list/resources/app_list_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/chromeos/resources/ui_chromeos_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/resources/ui_resources_${percent}_percent.pak",
      "$root_gen_dir/ui/views/resources/views_resources_${percent}_percent.pak",
    ]

    if (percent == "100") {
      sources += [
        "$root_gen_dir/mojo/public/js/mojo_bindings_resources.pak",
        "$root_gen_dir/ui/resources/webui_resources.pak",
      ]
    }

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

    deps = [
      "//ash/resources",
      "//mojo/public/js:resources",
      "//ui/app_list/resources",
      "//ui/chromeos/resources",
      "//ui/resources",
      "//ui/views/resources",
    ]

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

    if (percent == "100") {
      # TODO(msw): This seems bad, but follows repack_ui_test_pak's example.
      deps += [ "//third_party/WebKit/public:resources_grit" ]
      sources += [ "$root_gen_dir/blink/public/resources/blink_resources.pak" ]
    }
  }
}

ash_test_resources("100_percent") {
  percent = "100"
}

ash_test_resources("200_percent") {
  percent = "200"
}

# There is no with_content_200_percent as content resources are only available
# at 100%.
ash_test_resources("with_content_100_percent") {
  percent = "100"
  sources = [
    "$root_gen_dir/content/content_resources.pak",
  ]
  deps = [
    "//content:resources",
  ]
}
