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

action("create_test_main") {
  script = "//ui/file_manager/file_manager/test/scripts/create_test_main.py"
  output = "$target_gen_dir/../test.html"
  sources = [
    "../background/js/background_common_scripts.js",
    "../background/js/background_scripts.js",
    "../foreground/elements/elements_bundle.html",
    "../foreground/elements/files_quick_view.html",
    "../foreground/elements/files_safe_media.html",
    "../foreground/elements/files_safe_media.js",
    "../foreground/js/elements_importer.js",
    "../foreground/js/main_scripts.js",
    "../main.html",
    "//chrome/app/file_manager_strings.grdp",
    "//chrome/browser/chromeos/extensions/file_manager/private_api_strings.cc",
    "//ui/webui/resources/css/text_defaults.css",
    "check_select.js",
    "crostini_mount.js",
    "crostini_share.js",
    "crostini_tasks.js",
    "js/strings.js",
    "quick_view.js",
    "uma.js",
  ]
  args = [ "--output=" + rebase_path(output, root_build_dir) ]
  outputs = [
    output,
  ]
}

js_type_check("closure_compile") {
  deps = [
    ":check_select",
    ":closure_compile_externs",
    ":crostini_mount",
    ":crostini_share",
    ":crostini_tasks",
    ":quick_view",
    ":uma",
  ]
}

# Remaining targets in this file are private.
visibility = [ ":*" ]

js_library("closure_compile_externs") {
  sources = []
  externs_list = [
    "js/externs.js",
    "$externs_path/command_line_private.js",
    "$externs_path/metrics_private.js",
    "../../externs/app_window_common.js",
    "../../externs/background/file_browser_background.js",
    "../../externs/entry_location.js",
    "../../externs/volume_info.js",
    "../../externs/volume_info_list.js",
    "../../externs/volume_manager.js",
    "//third_party/analytics/externs.js",
  ]
}

js_library("check_select") {
  deps = [
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}

js_library("crostini_mount") {
  deps = [
    "../foreground/js:crostini",
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}

js_library("crostini_share") {
  deps = [
    "../foreground/js:crostini",
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}

js_library("crostini_tasks") {
  deps = [
    "../foreground/js:crostini",
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}

js_library("quick_view") {
  deps = [
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}

js_library("uma") {
  deps = [
    "js:test_util",
    "//ui/webui/resources/js:webui_resource_test",
  ]
}
