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

jumbo_component("aura") {
  public = [
    "client/aura_constants.h",
    "client/capture_client.h",
    "client/capture_client_observer.h",
    "client/capture_delegate.h",
    "client/cursor_client.h",
    "client/cursor_client_observer.h",
    "client/default_capture_client.h",
    "client/drag_drop_client.h",
    "client/drag_drop_client_observer.h",
    "client/drag_drop_delegate.h",
    "client/event_client.h",
    "client/focus_change_observer.h",
    "client/focus_client.h",
    "client/screen_position_client.h",
    "client/transient_window_client.h",
    "client/transient_window_client_observer.h",
    "client/visibility_client.h",
    "client/window_parenting_client.h",
    "client/window_stacking_client.h",
    "client/window_types.h",
    "env.h",
    "env_input_state_controller.h",
    "env_observer.h",
    "event_injector.h",
    "input_state_lookup.h",
    "input_state_lookup_win.h",
    "layout_manager.h",
    "local/window_port_local.h",
    "mus/capture_synchronizer.h",
    "mus/capture_synchronizer_delegate.h",
    "mus/client_side_window_move_handler.h",
    "mus/client_surface_embedder.h",
    "mus/drag_drop_controller_host.h",
    "mus/drag_drop_controller_mus.h",
    "mus/embed_root.h",
    "mus/embed_root_delegate.h",
    "mus/focus_synchronizer.h",
    "mus/focus_synchronizer_delegate.h",
    "mus/focus_synchronizer_observer.h",
    "mus/gesture_recognizer_impl_mus.h",
    "mus/in_flight_change.h",
    "mus/input_method_mus.h",
    "mus/input_method_mus_delegate.h",
    "mus/mus_context_factory.h",
    "mus/mus_mouse_location_updater.h",
    "mus/mus_types.h",
    "mus/property_converter.h",
    "mus/property_utils.h",
    "mus/system_input_injector_mus.h",
    "mus/text_input_client_impl.h",
    "mus/topmost_window_tracker.h",
    "mus/window_mus.h",
    "mus/window_port_mus.h",
    "mus/window_tree_client.h",
    "mus/window_tree_client_delegate.h",
    "mus/window_tree_client_observer.h",
    "mus/window_tree_client_test_observer.h",
    "mus/window_tree_host_mus.h",
    "mus/window_tree_host_mus_delegate.h",
    "mus/window_tree_host_mus_init_params.h",
    "null_window_targeter.h",
    "scoped_keyboard_hook.h",
    "scoped_simple_keyboard_hook.h",
    "scoped_window_targeter.h",
    "window.h",
    "window_delegate.h",
    "window_event_dispatcher.h",
    "window_event_dispatcher_observer.h",
    "window_observer.h",
    "window_occlusion_change_builder.h",
    "window_occlusion_tracker.h",
    "window_port.h",
    "window_targeter.h",
    "window_tracker.h",
    "window_tree_host.h",
    "window_tree_host_observer.h",
    "window_tree_host_platform.h",
  ]
  sources = [
    "aura_export.h",
    "client/aura_constants.cc",
    "client/capture_client.cc",
    "client/cursor_client.cc",
    "client/cursor_client_observer.cc",
    "client/default_capture_client.cc",
    "client/drag_drop_client.cc",
    "client/drag_drop_delegate.cc",
    "client/event_client.cc",
    "client/focus_change_observer.cc",
    "client/focus_client.cc",
    "client/screen_position_client.cc",
    "client/transient_window_client.cc",
    "client/visibility_client.cc",
    "client/window_parenting_client.cc",
    "client/window_stacking_client.cc",
    "env.cc",
    "env_input_state_controller.cc",
    "event_injector.cc",
    "input_state_lookup.cc",
    "input_state_lookup_win.cc",
    "layout_manager.cc",
    "local/window_port_local.cc",
    "mouse_location_manager.cc",
    "mouse_location_manager.h",
    "mus/capture_synchronizer.cc",
    "mus/client_side_window_move_handler.cc",
    "mus/client_surface_embedder.cc",
    "mus/drag_drop_controller_mus.cc",
    "mus/embed_root.cc",
    "mus/focus_synchronizer.cc",
    "mus/gesture_recognizer_impl_mus.cc",
    "mus/in_flight_change.cc",
    "mus/input_method_mus.cc",
    "mus/mus_context_factory.cc",
    "mus/mus_lsi_allocator.cc",
    "mus/mus_lsi_allocator.h",
    "mus/mus_mouse_location_updater.cc",
    "mus/property_converter.cc",
    "mus/property_utils.cc",
    "mus/system_input_injector_mus.cc",
    "mus/text_input_client_impl.cc",
    "mus/topmost_window_tracker.cc",
    "mus/window_port_mus.cc",
    "mus/window_tree_client.cc",
    "mus/window_tree_client_delegate.cc",
    "mus/window_tree_host_mus.cc",
    "mus/window_tree_host_mus_init_params.cc",
    "native_window_occlusion_tracker_win.cc",
    "native_window_occlusion_tracker_win.h",
    "null_window_targeter.cc",
    "scoped_keyboard_hook.cc",
    "scoped_simple_keyboard_hook.cc",
    "scoped_window_targeter.cc",
    "window.cc",
    "window_delegate.cc",
    "window_event_dispatcher.cc",
    "window_observer.cc",
    "window_occlusion_change_builder.cc",
    "window_occlusion_tracker.cc",
    "window_port.cc",
    "window_port_for_shutdown.cc",
    "window_port_for_shutdown.h",
    "window_targeter.cc",
    "window_tracker.cc",
    "window_tree_host.cc",
    "window_tree_host_platform.cc",
  ]

  friend = [ ":*" ]

  defines = [ "AURA_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//cc/mojo_embedder",
    "//components/discardable_memory/client",
    "//components/discardable_memory/public/interfaces",
    "//components/viz/client",
    "//components/viz/common",
    "//components/viz/host",
    "//components/viz/service",
    "//gpu/ipc/client",
    "//mojo/public/cpp/system",
    "//services/service_manager/public/cpp",
    "//services/ws/common",
    "//services/ws/public/cpp",
    "//services/ws/public/mojom",
    "//skia",
    "//ui/base",
    "//ui/base/clipboard",
    "//ui/base/ime/init",
    "//ui/display",
    "//ui/events",
    "//ui/events:dom_keyboard_layout",
    "//ui/events:events_base",
    "//ui/events/platform",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/platform_window",
    "//ui/platform_window/mojo",
    "//ui/platform_window/stub",
  ]

  public_deps = [
    "//ui/base/ime",
    "//ui/compositor",
  ]

  if (use_x11) {
    deps += [
      "//ui/events/platform/x11",
      "//ui/platform_window/x11",
    ]
  }

  if (is_win) {
    sources -= [ "input_state_lookup.cc" ]

    deps += [
      "//ipc",
      "//ui/platform_window/win",
    ]
  }

  if (is_win) {
    libs = [
      "wtsapi32.lib",
      "dwmapi.lib",
    ]
  }

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
    public += [ "screen_ozone.h" ]
    sources += [ "screen_ozone.cc" ]
  }

  if (is_android) {
    deps += [
      "//ui/platform_window/android",
      "//ui/platform_window/android:platform_window_java",
    ]
  }
}

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "test/aura_mus_test_base.cc",
    "test/aura_mus_test_base.h",
    "test/aura_test_base.cc",
    "test/aura_test_base.h",
    "test/aura_test_context_factory.cc",
    "test/aura_test_context_factory.h",
    "test/aura_test_helper.cc",
    "test/aura_test_helper.h",
    "test/aura_test_suite_setup.cc",
    "test/aura_test_suite_setup.h",
    "test/aura_test_utils.cc",
    "test/aura_test_utils.h",
    "test/default_event_generator_delegate.cc",
    "test/default_event_generator_delegate.h",
    "test/env_test_helper.cc",
    "test/env_test_helper.h",
    "test/event_generator_delegate_aura.cc",
    "test/event_generator_delegate_aura.h",
    "test/mus/change_completion_waiter.cc",
    "test/mus/change_completion_waiter.h",
    "test/mus/input_method_mus_test_api.h",
    "test/mus/test_window_tree.cc",
    "test/mus/test_window_tree.h",
    "test/mus/test_window_tree_client_delegate.cc",
    "test/mus/test_window_tree_client_delegate.h",
    "test/mus/test_window_tree_client_setup.cc",
    "test/mus/test_window_tree_client_setup.h",
    "test/mus/test_window_tree_delegate.h",
    "test/mus/window_port_mus_test_helper.cc",
    "test/mus/window_port_mus_test_helper.h",
    "test/mus/window_tree_client_test_api.cc",
    "test/mus/window_tree_client_test_api.h",
    "test/test_cursor_client.cc",
    "test/test_cursor_client.h",
    "test/test_focus_client.cc",
    "test/test_focus_client.h",
    "test/test_screen.cc",
    "test/test_screen.h",
    "test/test_window_delegate.cc",
    "test/test_window_delegate.h",
    "test/test_window_parenting_client.cc",
    "test/test_window_parenting_client.h",
    "test/test_window_targeter.cc",
    "test/test_window_targeter.h",
    "test/test_windows.cc",
    "test/test_windows.h",
    "test/ui_controls_factory_aura.h",
    "test/window_event_dispatcher_test_api.cc",
    "test/window_event_dispatcher_test_api.h",
    "test/window_occlusion_tracker_test_api.cc",
    "test/window_occlusion_tracker_test_api.h",
    "test/window_test_api.cc",
    "test/window_test_api.h",
  ]

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

  public_deps = [
    ":aura",
    "//services/ws/common",

    # Must be public as headers include buildflags.h.
    "//ui/base:buildflags",
  ]
  deps = [
    "//base/test:test_support",
    "//cc:test_support",
    "//components/viz/test:test_support",
    "//services/service_manager/public/cpp",
    "//services/ws/public/cpp/input_devices",
    "//services/ws/public/mojom",
    "//skia",
    "//testing/gtest",
    "//ui/base:test_support",
    "//ui/base/ime/init",
    "//ui/compositor:test_support",
    "//ui/display",
    "//ui/display/manager",
    "//ui/events",
    "//ui/events:events_base",
    "//ui/events:test_support",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/platform_window",
    "//ui/wm",
  ]

  if (is_win) {
    sources += [ "test/ui_controls_factory_aurawin.cc" ]
  }

  if (use_x11) {
    sources += [
      "test/ui_controls_factory_aurax11.cc",
      "test/x11_event_sender.cc",
      "test/x11_event_sender.h",
    ]

    deps += [ "//ui/gfx/x" ]
  }

  if (use_ozone) {
    sources += [ "test/ui_controls_factory_ozone.cc" ]
  }
}

executable("demo") {
  output_name = "aura_demo"
  testonly = true

  sources = [
    "demo/demo_main.cc",
  ]

  deps = [
    ":aura",
    ":test_support",
    "//base",
    "//base:i18n",
    "//build/win:default_exe_manifest",
    "//components/viz/host",
    "//components/viz/service",
    "//skia",
    "//third_party/icu",
    "//ui/base",
    "//ui/base/ime/init",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/display",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/gl/init",
  ]

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

test("aura_unittests") {
  sources = [
    "../compositor_extra/shadow_unittest.cc",
    "gestures/gesture_recognizer_unittest.cc",
    "mouse_location_manager_unittest.cc",
    "mus/client_surface_embedder_unittest.cc",
    "mus/drag_drop_controller_mus_unittest.cc",
    "mus/focus_synchronizer_unittest.cc",
    "mus/input_method_mus_unittest.cc",
    "mus/property_converter_unittest.cc",
    "mus/window_port_mus_unittest.cc",
    "mus/window_tree_client_unittest.cc",
    "mus/window_tree_host_mus_unittest.cc",
    "test/aura_test_suite.h",
    "test/run_all_unittests.cc",
    "window_event_dispatcher_unittest.cc",
    "window_occlusion_change_builder_unittest.cc",
    "window_occlusion_tracker_unittest.cc",
    "window_targeter_unittest.cc",
    "window_tree_host_platform_unittest.cc",
    "window_tree_host_unittest.cc",
    "window_unittest.cc",
  ]

  if (is_win) {
    sources += [ "native_window_occlusion_tracker_unittest.cc" ]
    libs = [ "dwmapi.lib" ]
  }

  deps = [
    ":test_support",
    "//base/test:test_support",
    "//cc/mojo_embedder",
    "//components/viz/client",
    "//mojo/core/embedder",
    "//services/ws/common:task_runner_test_base",
    "//services/ws/public/cpp",
    "//skia",
    "//testing/gtest",
    "//ui/aura_extra",
    "//ui/aura_extra:tests",
    "//ui/base:test_support",
    "//ui/base/clipboard:clipboard_types",
    "//ui/compositor:test_support",
    "//ui/compositor_extra",
    "//ui/display:test_support",
    "//ui/events:gesture_detection",
    "//ui/events:test_support",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl:test_support",
    "//ui/platform_window",
    "//ui/platform_window/stub",
    "//ui/wm",
  ]

  data_deps = [
    "//third_party/mesa_headers",
  ]
}

# This target is added as a dependency of browser interactive_ui_tests. It must
# be source_set, otherwise the linker will drop the tests as dead code.
source_set("aura_interactive_ui_tests") {
  testonly = true
  if (is_win) {
    sources = [
      "native_window_occlusion_tracker_win_interactive_test.cc",
    ]

    deps = [
      ":aura",
      ":test_support",
      "//base/test:test_support",
      "//testing/gtest",
      "//ui/base/ime/init",
      "//ui/display:display",
      "//ui/gfx",
      "//ui/gfx/geometry",
      "//ui/gl:test_support",
      "//ui/gl/init",
      "//ui/views:views",
    ]
  }
}
