# 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")
import("//ui/base/ui_features.gni")

assert(use_aura)
assert(enable_hidpi)

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/presenter",
    "//ui/aura",
    "//ui/base",
    "//ui/base:ui_data_pack",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/display",
    "//ui/display/types",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events:gesture_detection",
    "//ui/events/devices",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/native_theme",
    "//ui/platform_window",
    "//ui/platform_window/stub",
    "//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/devices/x11",
      "//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:dom_keycode_converter",
      "//ui/events/ozone:events_ozone",
      "//ui/ozone",
    ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos",
      "//chromeos:power_manager_proto",
      "//components/quirks",
      "//device/bluetooth",

      # TODO(msw): Remove this; only ash_with_content should depend on webkit.
      "//third_party/WebKit/public:blink_headers",
      "//third_party/qcms",
      "//ui/chromeos:ui_chromeos",
      "//ui/chromeos/resources",
      "//ui/chromeos/strings",
      "//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/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 -= [
      "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",
    "//gpu/config",
    "//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",
  ]
}

# TODO(msw): Move support code with content deps to test_support_with_content.
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",
    "//base:i18n",
    "//base/test:test_support",
    "//components/signin/core/account_id",
    "//components/user_manager:user_manager",
    "//content/public/browser",
    "//content/test:test_support",
    "//device/bluetooth",
    "//skia",
    "//testing/gtest",
    "//ui/accessibility",
    "//ui/app_list:test_support",
    "//ui/app_list/presenter",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base:test_support",
    "//ui/compositor:test_support",
    "//ui/display/types",
    "//ui/events:events_base",
    "//ui/events:test_support",
    "//ui/events/devices",
    "//ui/gl",
    "//ui/gl:test_support",
    "//ui/keyboard",
    "//ui/message_center",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/wm",
  ]

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

  if (use_x11) {
    deps += [ "//ui/gfx/x" ]
  }

  if (is_chromeos) {
    deps += [
      "//chromeos",
      "//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",
    "//base",
    "//skia",
    "//testing/gtest",
    "//ui/aura",
    "//ui/base",
    "//ui/gl:test_support",
  ]
}

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",
    "//components/user_manager",
    "//net",
    "//skia",
    "//third_party/icu",
    "//ui/app_list/presenter",
    "//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",
    "//ui/wm",
  ]
}

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

  deps = [
    ":ash_shell_lib",
    ":ash_with_content",
    "//base:i18n",
    "//chrome:packed_resources",
    "//content",
    "//content/shell:content_shell_lib",
    "//device/bluetooth",
    "//net",
    "//skia",
    "//ui/aura",
    "//ui/base",
    "//ui/compositor",
    "//ui/display",
    "//ui/events/devices",
    "//ui/message_center",
    "//ui/views:test_support",
    "//ui/wm",
  ]

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

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

  deps = [
    ":ash",
    ":ash_with_content",
    ":test_support",
    ":test_support_with_content",
    "//ash/resources",
    "//ash/strings",
    "//base",
    "//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/app_list/presenter",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/display/types",
    "//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/strings",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/views/controls/webview:test_support",
    "//ui/web_dialogs:test_support",
    "//ui/wm",
    "//url",
  ]

  data_deps = [
    "//ash/strings:ash_test_strings",
    "//ash/resources:ash_test_resources_100_percent",
    "//ash/resources:ash_test_resources_200_percent",
  ]

  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",
    ]
  }

  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",
      "//chromeos:power_manager_proto",
      "//chromeos:test_support_without_gmock",
      "//components/quirks",
      "//device/bluetooth",
      "//net:net",
      "//ui/chromeos:ui_chromeos",
      "//ui/display",
      "//ui/display:test_support",
      "//ui/display:test_util",
    ]
  } 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" ]
  }

  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",
    "//base",
    "//build/config/sanitizers:deps",
    "//build/win:default_exe_manifest",
    "//components/user_manager",
    "//content",
    "//content/public/app:both",
  ]

  data_deps = [
    "//ash/strings:ash_test_strings",
    "//ash/resources:ash_test_resources_100_percent",
    "//ash/resources:ash_test_resources_200_percent",
  ]

  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.
