# 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("//third_party/closure_compiler/compile_js.gni")
import("//tools/grit/grit_rule.gni")

grit("resources") {
  source = "file_manager_resources.grd"
  outputs = [
    "grit/file_manager_resources.h",
    "grit/file_manager_resources_map.cc",
    "grit/file_manager_resources_map.h",
    "file_manager_resources.pak",
    "file_manager_resources.rc",
  ]
}

component("file_manager") {
  sources = [
    "file_manager_export.h",
    "file_manager_resource_util.cc",
    "file_manager_resource_util.h",
  ]
  public_deps = [
    ":resources",
    "//base",
  ]
  defines = [ "FILE_MANAGER_IMPLEMENTATION" ]
}

group("closure_compile") {
  # Subfolders' closure_compile groups bundle the non-test "module" type-check
  # groups as well as unittests and test_support.
  testonly = true

  deps = [
    "audio_player/elements:closure_compile",
    "audio_player/js:closure_compile",
    "base/js:closure_compile",
    "file_manager/background/js:closure_compile",
    "file_manager/common/js:closure_compile",
    "file_manager/foreground/elements:closure_compile",
    "file_manager/foreground/js:closure_compile",
    "file_manager/foreground/js/metadata:closure_compile",
    "file_manager/foreground/js/ui:closure_compile",
    "file_manager/test:closure_compile",
    "gallery/js:closure_compile",
    "gallery/js/image_editor:closure_compile",
    "image_loader:closure_compile",
    "integration_tests:closure_compile",
    "integration_tests/file_manager:closure_compile",
    "video_player/js:closure_compile",
    "video_player/js/cast:closure_compile",
  ]
}

group("unit_test_data") {
  testonly = true
  deps = [
    "base/js:js_test_gen_html",
    "file_manager/background/js:js_test_gen_html",
    "file_manager/common/js:js_test_gen_html",
    "file_manager/foreground/elements:js_test_gen_html",
    "file_manager/foreground/js:js_test_gen_html",
    "file_manager/foreground/js/metadata:js_test_gen_html",
    "file_manager/foreground/js/ui:js_test_gen_html",
    "gallery/js:js_test_gen_html",
    "gallery/js/image_editor:js_test_gen_html",
    "image_loader:js_test_gen_html",
    "video_player/js:js_test_gen_html",
  ]
}
