# 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",
    "hit_test_data_provider_aura.h",
    "input_state_lookup.h",
    "input_state_lookup_win.h",
    "layout_manager.h",
    "local/layer_tree_frame_sink_local.h",
    "local/window_port_local.h",
    "mus/capture_synchronizer.h",
    "mus/capture_synchronizer_delegate.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/in_flight_change.h",
    "mus/input_method_mus.h",
    "mus/mus_context_factory.h",
    "mus/mus_mouse_location_updater.h",
    "mus/mus_types.h",
    "mus/os_exchange_data_provider_mus.h",
    "mus/property_converter.h",
    "mus/property_utils.h",
    "mus/system_input_injector_mus.h",
    "mus/text_input_client_impl.h",
    "mus/user_activity_forwarder.h",
    "mus/window_manager_delegate.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",
    "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_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",
    "hit_test_data_provider_aura.cc",
    "input_state_lookup.cc",
    "input_state_lookup_win.cc",
    "layout_manager.cc",
    "local/layer_tree_frame_sink_local.cc",
    "local/window_port_local.cc",
    "mouse_location_manager.cc",
    "mouse_location_manager.h",
    "mus/capture_synchronizer.cc",
    "mus/client_surface_embedder.cc",
    "mus/drag_drop_controller_mus.cc",
    "mus/embed_root.cc",
    "mus/focus_synchronizer.cc",
    "mus/in_flight_change.cc",
    "mus/input_method_mus.cc",
    "mus/mus_context_factory.cc",
    "mus/mus_mouse_location_updater.cc",
    "mus/os_exchange_data_provider_mus.cc",
    "mus/property_converter.cc",
    "mus/property_utils.cc",
    "mus/system_input_injector_mus.cc",
    "mus/text_input_client_impl.cc",
    "mus/user_activity_forwarder.cc",
    "mus/window_manager_delegate.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",
    "scoped_keyboard_hook.cc",
    "scoped_simple_keyboard_hook.cc",
    "scoped_window_targeter.cc",
    "window.cc",
    "window_event_dispatcher.cc",
    "window_observer.cc",
    "window_occlusion_tracker.cc",
    "window_port.cc",
    "window_port_for_shutdown.cc",
    "window_port_for_shutdown.h",
    "window_targeter.cc",
    "window_tree_host.cc",
    "window_tree_host_platform.cc",
  ]

  defines = [ "AURA_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//cc",
    "//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",
    "//net",
    "//services/service_manager/public/cpp",
    "//services/ui/common:mus_common",
    "//services/ui/public/cpp",
    "//services/ui/public/interfaces",
    "//skia",
    "//ui/base",
    "//ui/base/ime",
    "//ui/display",
    "//ui/events",
    "//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/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 (use_ozone) {
    deps += [ "//ui/ozone" ]
    sources += [
      "mus/platform_event_source_mus_ozone.cc",
      "mus/platform_event_source_mus_ozone.h",
    ]
  }

  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/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_manager_client.cc",
    "test/mus/test_window_manager_client.h",
    "test/mus/test_window_manager_delegate.cc",
    "test/mus/test_window_manager_delegate.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/window_tree_client_private.cc",
    "test/mus/window_tree_client_private.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/ui/common:mus_common",

    # Must be public as headers include ui_features.h.
    "//ui/base:ui_features",
  ]
  deps = [
    "//base/test:test_support",
    "//cc:test_support",
    "//components/viz/test:test_support",
    "//services/service_manager/public/cpp",
    "//services/ui/public/cpp/input_devices",
    "//services/ui/public/interfaces",
    "//skia",
    "//testing/gtest",
    "//ui/base:test_support",
    "//ui/base/ime",
    "//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/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/config:exe_and_shlib_deps",
    "//build/win:default_exe_manifest",
    "//components/viz/host",
    "//skia",
    "//third_party/icu",
    "//ui/base",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/display",
    "//ui/events",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl/init",
  ]

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

test("aura_unittests") {
  sources = [
    "../compositor_extra/shadow_unittest.cc",
    "//ui/aura_extra/window_occlusion_impl_unittest_win.cc",
    "gestures/gesture_recognizer_unittest.cc",
    "hit_test_data_provider_aura_unittest.cc",
    "mouse_location_manager_unittest.cc",
    "mus/drag_drop_controller_mus_unittest.cc",
    "mus/focus_synchronizer_unittest.cc",
    "mus/input_method_mus_unittest.cc",
    "mus/os_exchange_data_provider_mus_unittest.cc",
    "mus/property_converter_unittest.cc",
    "mus/system_input_injector_mus_unittest.cc",
    "mus/user_activity_forwarder_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_tracker_unittest.cc",
    "window_targeter_unittest.cc",
    "window_tree_host_unittest.cc",
    "window_unittest.cc",
  ]

  deps = [
    ":test_support",
    "//base/test:test_support",
    "//components/viz/client",
    "//mojo/edk",
    "//net",
    "//services/ui/common:task_runner_test_base",
    "//services/ui/public/cpp",
    "//skia",
    "//testing/gtest",
    "//ui/aura_extra",
    "//ui/base:test_support",
    "//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/stub",
    "//ui/wm",
  ]

  if (is_linux) {
    deps += [ "//third_party/mesa" ]
  }

  data_deps = [
    "//third_party/mesa:osmesa",
  ]
}