# 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 = [
    "base_shell_dialog.cc",
    "base_shell_dialog.h",
    "base_shell_dialog_win.cc",
    "base_shell_dialog_win.h",
    "select_file_dialog.cc",
    "select_file_dialog.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",
    "shell_dialog_linux.cc",
    "shell_dialog_linux.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 && !use_aura) {
    sources += [
      "android/shell_dialogs_jni_registrar.cc",
      "android/shell_dialogs_jni_registrar.h",
      "select_file_dialog_android.cc",
      "select_file_dialog_android.h",
    ]
    deps += [
      "//ui/android",
      "//ui/base:ui_base_jni_headers",
    ]
    include_dirs = [ "$root_gen_dir/ui" ]
    libs = [ "jnigraphics" ]
  }

  if (is_mac) {
    libs = [
      "CoreServices.framework",
      "Foundation.framework",
      "AppKit.framework",
    ]
  }
}

test("shell_dialogs_unittests") {
  sources = [
    # TODO(karandeepb) : Revisit this once gn gets mac bundle support.
    # "select_file_dialog_mac_unittest.mm",
    "run_all_unittests.cc",
    "select_file_dialog_win_unittest.cc",
  ]

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