# 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",
    "video_player/js:closure_compile",
    "video_player/js/cast:closure_compile",
  ]
}

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