# 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")
import("//testing/test.gni")
if (is_android) {
  import("//build/config/android/config.gni")
}

component("shell_dialogs") {
  sources = [
    "android/shell_dialogs_jni_registrar.cc",
    "android/shell_dialogs_jni_registrar.h",
    "base_shell_dialog.cc",
    "base_shell_dialog.h",
    "base_shell_dialog_win.cc",
    "base_shell_dialog_win.h",
    "linux_shell_dialog.cc",
    "linux_shell_dialog.h",
    "select_file_dialog.cc",
    "select_file_dialog.h",
    "select_file_dialog_android.cc",
    "select_file_dialog_android.h",
    "select_file_dialog_factory.cc",
    "select_file_dialog_factory.h",
    "select_file_dialog_mac.h",
    "select_file_dialog_mac.mm",
    "select_file_dialog_win.cc",
    "select_file_dialog_win.h",
    "select_file_policy.cc",
    "select_file_policy.h",
    "selected_file_info.cc",
    "selected_file_info.h",
  ]

  defines = [ "SHELL_DIALOGS_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base:i18n",
    "//skia",
    "//ui/base",
    "//ui/strings",
  ]

  if (use_aura) {
    if (is_mac) {
      # Will be automatically filtered out on non-Mac.
      sources -= [ "select_file_dialog_mac.mm" ]
    }
    deps += [ "//ui/aura" ]
  }

  if (is_android) {
    deps += [
      "//ui/android",
      "//ui/android:ui_java",
      "//ui/base:ui_base_jni_headers",
    ]
    include_dirs = [ "$root_gen_dir/ui" ]
    libs = [ "jnigraphics" ]
  }

  if (is_win) {
    deps += [ "//win8:metro_viewer" ]
  }
}

test("shell_dialogs_unittests") {
  sources = [
    "select_file_dialog_win_unittest.cc",
  ]

  deps = [
    ":shell_dialogs",
    "//base",
    "//base/test:test_support",
    "//base/test:run_all_unittests",
    "//testing/gtest",
  ]
}
