# 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")
import("../optimize_webui.gni")

optimize_webui("build") {
  deps = []
  host = "downloads"
  html_in_files = [ "downloads.html" ]
  html_out_files = [ "vulcanized.html" ]
  html_out_files_polymer2 = [ "vulcanized.p2.html" ]
  input = rebase_path(".", root_build_dir)
  insert_in_head = "<base href=chrome://downloads>"
  js_out_files = [ "crisper.js" ]
  excludes = [
    "chrome://resources/js/mojo_bindings_lite.js",
    "chrome://downloads/md_downloads.mojom-lite.js",
  ]
}

js_type_check("closure_compile") {
  deps = [
    ":browser_proxy",
    ":constants",
    ":downloads",
    ":externs",
    ":item",
    ":manager",
    ":search_service",
    ":toolbar",
  ]
}

js_library("browser_proxy") {
  deps = [
    ":externs",
    "//ui/webui/resources/js:cr",
  ]
}

js_library("constants") {
  deps = [
    "//ui/webui/resources/js:cr",
  ]
}

js_library("downloads") {
  deps = [
    ":manager",
    "//ui/webui/resources/js:cr",
  ]
}

js_library("externs") {
  extra_deps = [ "//chrome/browser/ui/webui/md_downloads:mojo_bindings_js" ]
  externs_list = [
    "$root_gen_dir/chrome/browser/ui/webui/md_downloads/md_downloads.mojom-lite.externs.js",
    "$externs_path/mojo.js",
  ]
}

js_library("item") {
  deps = [
    ":browser_proxy",
    ":constants",
    ":externs",
    "//third_party/polymer/v1_0/components-chromium/paper-behaviors:paper-inky-focus-behavior-extracted",
    "//ui/webui/resources/js:cr",
    "//ui/webui/resources/js:load_time_data",
    "//ui/webui/resources/js:util",
  ]
}

js_library("manager") {
  deps = [
    ":browser_proxy",
    ":externs",
    ":item",
    ":search_service",
    ":toolbar",
    "//third_party/polymer/v1_0/components-chromium/iron-list:iron-list-extracted",
    "//ui/webui/resources/js:cr",
    "//ui/webui/resources/js:load_time_data",
    "//ui/webui/resources/js:util",
    "//ui/webui/resources/js/cr:ui",
    "//ui/webui/resources/js/cr/ui:command",
  ]
  externs_list = [ "$externs_path/chrome_send.js" ]
}

js_library("search_service") {
  deps = [
    ":browser_proxy",
    ":externs",
    "//ui/webui/resources/js:cr",
    "//ui/webui/resources/js:load_time_data",
  ]
}

js_library("toolbar") {
  deps = [
    ":browser_proxy",
    ":search_service",
    "//third_party/polymer/v1_0/components-chromium/iron-a11y-announcer:iron-a11y-announcer-extracted",
    "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
    "//ui/webui/resources/cr_elements/cr_toolbar:cr_toolbar",
    "//ui/webui/resources/js:cr",
    "//ui/webui/resources/js:util",
  ]
}
