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

assert(use_ash)

gypi_values = exec_script("//build/gypi_to_gn.py",
                          [ rebase_path("ash.gyp") ],
                          "scope",
                          [ "ash.gyp" ])

component("ash") {
  sources = gypi_values.ash_sources

  configs += [ "//build/config:precompiled_headers" ]
  defines = [ "ASH_IMPLEMENTATION" ]

  public_deps = [
    "//ash/resources",
    "//ash/strings",
  ]
  deps = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//components/device_event_log",
    "//components/onc",
    "//components/signin/core/account_id",
    "//components/user_manager",
    "//components/wallpaper",
    "//media",
    "//net",
    "//skia",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/app_list",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events:gesture_detection",
    "//ui/events/devices",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/wm",
    "//url",
  ]

  if (is_win) {
    sources -= [
      "sticky_keys/sticky_keys_controller.cc",
      "sticky_keys/sticky_keys_controller.h",
    ]

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
  }

  if (use_x11) {
    configs += [
      "//build/config/linux:x11",
      "//build/config/linux:xfixes",
    ]
    deps += [
      "//ui/events/platform",
      "//ui/gfx/x",
    ]
  } else {
    sources -= [
      "host/ash_window_tree_host_x11.cc",
      "host/ash_window_tree_host_x11.h",
      "wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.cc",
      "wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_x11.h",
    ]
  }

  if (use_ozone) {
    deps += [
      "//ui/events/ozone:events_ozone",
      "//ui/ozone",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos",
      "//chromeos:power_manager_proto",
      "//device/bluetooth",
      "//third_party/qcms",
      "//ui/chromeos:ui_chromeos",
      "//ui/chromeos/resources",
      "//ui/chromeos/strings",
      "//ui/display",
      "//ui/display/util",
    ]
  } else {
    sources -= [
      "accelerators/key_hold_detector.cc",
      "accelerators/key_hold_detector.h",
      "accelerators/magnifier_key_scroller.cc",
      "accelerators/magnifier_key_scroller.h",
      "accelerators/spoken_feedback_toggler.cc",
      "accelerators/spoken_feedback_toggler.h",
      "display/display_animator.cc",
      "display/display_animator.h",
      "display/resolution_notification_controller.cc",
      "display/resolution_notification_controller.h",
      "system/tray/media_security/media_capture_observer.h",
      "system/tray/media_security/multi_profile_media_tray_item.cc",
      "system/tray/media_security/multi_profile_media_tray_item.h",
      "touch/touch_transformer_controller.cc",
      "touch/touch_transformer_controller.h",
      "touch/touchscreen_util.cc",
      "touch/touchscreen_util.h",
      "virtual_keyboard_controller.cc",
      "virtual_keyboard_controller.h",
    ]
  }

  if (!use_ozone) {
    sources -= [
      "host/ash_window_tree_host_ozone.cc",
      "wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_ozone.cc",
      "wm/maximize_mode/scoped_disable_internal_mouse_and_keyboard_ozone.h",
    ]
  }
}

component("ash_with_content") {
  sources = gypi_values.ash_with_content_sources

  defines = [ "ASH_WITH_CONTENT_IMPLEMENTATION" ]

  public_deps = [
    ":ash",
  ]
  deps = [
    "//base",
    "//base/third_party/dynamic_annotations",
    "//content/public/browser",
    "//ipc",
    "//skia",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard:keyboard_with_content",
    "//ui/resources",
    "//ui/strings",
    "//ui/views",
    "//ui/views/controls/webview",
    "//ui/web_dialogs",
    "//url",
  ]
}

source_set("test_support") {
  testonly = true
  sources = gypi_values.ash_test_support_sources
  configs += [ "//build/config:precompiled_headers" ]

  public_deps = [
    ":ash",
  ]
  deps = [
    ":test_support_with_content",  # TODO(beng): reverse this direction.
    "//ash/resources",
    "//components/signin/core/account_id",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/app_list",
    "//ui/app_list:test_support",
    "//ui/events:events_base",
    "//ui/events/devices",
    "//ui/gl",
    "//ui/views",
    "//ui/views:test_support",
  ]

  if (is_win) {
    deps += [ "//ui/platform_window/win" ]
  }

  if (is_chromeos) {
    deps += [ "//ui/display" ]
  }
}

source_set("test_support_with_content") {
  testonly = true
  sources = gypi_values.ash_test_support_with_content_sources
  configs += [ "//build/config:precompiled_headers" ]

  deps = [
    ":ash_with_content",
    "//content/test:test_support",
    "//skia",
  ]
}

source_set("interactive_ui_test_support") {
  testonly = true
  configs += [ "//build/config:precompiled_headers" ]
  public_deps = [
    ":ash",
    ":test_support",
  ]
  sources = [
    "test/ash_interactive_ui_test_base.cc",
    "test/ash_interactive_ui_test_base.h",
  ]
  deps = [
    ":ash",
    ":test_support",
    "//skia",
    "//testing/gtest",
  ]
}

static_library("ash_shell_lib") {
  testonly = true
  sources = gypi_values.ash_shell_lib_sources

  deps = [
    ":ash",
    ":ash_with_content",
    ":test_support",
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//base:i18n",
    "//net",
    "//skia",
    "//third_party/icu",
    "//ui/app_list",
    "//ui/aura",
    "//ui/base",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/keyboard:keyboard_with_content",
    "//ui/message_center",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/examples:views_examples_lib",
    "//ui/views/examples:views_examples_with_content_lib",
  ]
}

static_library("ash_shell_lib_with_content") {
  testonly = true
  sources = gypi_values.ash_shell_with_content_lib_sources

  deps = [
    ":ash_shell_lib",
    "//chrome:packed_resources",
    "//content",
    "//content/shell:content_shell_lib",
    "//skia",
  ]
}

test("ash_unittests") {
  sources = gypi_values.ash_unittests_sources
  configs += [ "//build/config:precompiled_headers" ]

  deps = [
    ":ash",
    ":ash_with_content",
    ":test_support",
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//base/allocator",
    "//base/test:test_support",
    "//components/signin/core/account_id",
    "//components/user_manager",
    "//content/public/browser",
    "//content/test:test_support",
    "//skia",
    "//testing/gtest",
    "//third_party/icu",
    "//ui/accessibility",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/events",
    "//ui/events:gesture_detection",
    "//ui/events:test_support",
    "//ui/events/devices",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/keyboard:keyboard_with_content",
    "//ui/message_center",
    "//ui/message_center:test_support",
    "//ui/resources",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/controls/webview:test_support",
    "//ui/web_dialogs:test_support",
    "//ui/wm",
    "//url",
  ]

  if (!is_chromeos) {
    sources -= [
      # TODO(zork): fix this test to build on Windows. See: crosbug.com/26906
      "focus_cycler_unittest.cc",

      # All tests for multiple displays: not supported on Windows Ash.
      "wm/drag_window_resizer_unittest.cc",

      # Accelerometer is only available on Chrome OS.
      "wm/maximize_mode/maximize_mode_controller_unittest.cc",

      # Can't resize on Windows Ash. http://crbug.com/165962
      "autoclick/autoclick_unittest.cc",
      "magnifier/magnification_controller_unittest.cc",
      "sticky_keys/sticky_keys_overlay_unittest.cc",
      "system/tray/media_security/multi_profile_media_tray_item_unittest.cc",
      "virtual_keyboard_controller_unittest.cc",
      "wm/workspace/workspace_window_resizer_unittest.cc",
    ]
    sources += [
      #'<(SHARED_INTERMEDIATE_DIR)/ui/resources/ui_unscaled_resources.rc',  TODO(GYP)
    ]
  }

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  if (!use_x11) {
    sources -= [ "host/ash_window_tree_host_x11_unittest.cc" ]
  }
  if (is_chromeos) {
    sources += [ "first_run/first_run_helper_unittest.cc" ]
    deps += [
      "//chromeos:power_manager_proto",
      "//chromeos:test_support_without_gmock",
      "//device/bluetooth",
      "//ui/display",
      "//ui/display:test_support",
      "//ui/display:test_util",
      "//ui/display/types",
    ]
  } else {
    sources -= [
      "accelerators/magnifier_key_scroller_unittest.cc",
      "accelerators/spoken_feedback_toggler_unittest.cc",
      "display/resolution_notification_controller_unittest.cc",
      "touch/touchscreen_util_unittest.cc",
    ]
  }

  if (!use_x11 || !is_chromeos) {
    sources -= [ "touch/touch_transformer_controller_unittest.cc" ]
  }

  # TODO(GYP) is this necessary?
  #['OS=="linux" and component=="shared_library" and use_allocator!="none"', {
  # ldflags = "-rdynamic"

  if (!is_chromeos) {
    sources -= [ "sticky_keys/sticky_keys_unittest.cc" ]
  }
}

executable("ash_shell_with_content") {
  testonly = true
  sources = [
    "shell/content/shell_with_content_main.cc",
  ]

  deps = [
    ":ash_shell_lib_with_content",
    "//build/config/sanitizers:deps",
    "//components/user_manager",
  ]

  if (is_win) {
    configs -= [ "//build/config/win:console" ]
    configs += [ "//build/config/win:windowed" ]
    deps += [ "//sandbox" ]
  }

  if (is_chromeos) {
    deps += [ "//device/bluetooth" ]
  }
}
# When adding support for isolates, please have a look at run-time dependencies
# in the ash_unittests_run target in ash.gyp.
