# 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("//build/config/ui.gni")

static_library("app_modal") {
  sources = [
    "app_modal_dialog_queue.cc",
    "app_modal_dialog_queue.h",
    "javascript_app_modal_dialog.cc",
    "javascript_app_modal_dialog.h",
    "javascript_dialog_extensions_client.h",
    "javascript_dialog_manager.cc",
    "javascript_dialog_manager.h",
    "javascript_native_dialog_factory.h",
    "native_app_modal_dialog.h",
  ]

  deps = [
    "//base",
    "//base:i18n",
    "//components/strings",
    "//components/url_formatter",
    "//content/public/browser",
    "//content/public/common",
    "//net",
    "//skia",
    "//ui/base",
  ]

  if (use_aura) {
    deps += [ "//ui/aura" ]
  }

  if (toolkit_views) {
    sources += [
      "views/javascript_app_modal_dialog_views.cc",
      "views/javascript_app_modal_dialog_views.h",
    ]

    deps += [ "//ui/views" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "javascript_dialog_manager_unittest.cc",
  ]

  deps = [
    ":app_modal",
    "//base",
    "//testing/gtest",
  ]
}
