# Copyright 2020 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("//mojo/public/tools/bindings/mojom.gni")
import("//third_party/closure_compiler/compile_js.gni")

assert(is_chromeos, "Camera App is Chrome OS only")

static_library("camera_app_ui") {
  sources = [
    "camera_app_helper_impl.cc",
    "camera_app_helper_impl.h",
    "camera_app_ui.cc",
    "camera_app_ui.h",
    "url_constants.cc",
    "url_constants.h",
  ]

  deps = [
    ":mojo_bindings",
    ":mojo_bindings_js",
    "//ash/public/cpp",
    "//chromeos/components/web_applications",
    "//chromeos/constants",
    "//chromeos/resources:camera_app_resources",
    "//chromeos/strings",
    "//chromeos/system",
    "//components/arc",
    "//content/public/browser",
    "//content/public/common",
    "//media/capture:capture_lib",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/platform",
    "//mojo/public/js:resources_grit",
    "//services/network/public/mojom",
    "//ui/webui",
  ]
}

group("closure_compile") {
  testonly = true
  deps = [ "resources:closure_compile" ]
}

mojom("mojo_bindings") {
  sources = [ "camera_app_helper.mojom" ]

  deps = [ "//components/arc/mojom:camera_intent" ]
}
