# Copyright 2015 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("//chrome/common/features.gni")
import("//testing/test.gni")

source_set("exo") {
  sources = [
    "buffer.cc",
    "buffer.h",
    "data_device.cc",
    "data_device.h",
    "data_device_delegate.h",
    "data_offer.cc",
    "data_offer.h",
    "data_offer_delegate.h",
    "data_offer_observer.h",
    "data_source.cc",
    "data_source.h",
    "data_source_delegate.h",
    "data_source_observer.h",
    "display.cc",
    "display.h",
    "drag_drop_operation.cc",
    "drag_drop_operation.h",
    "frame_sink_resource_manager.cc",
    "frame_sink_resource_manager.h",
    "input_trace.h",
    "keyboard_delegate.h",
    "keyboard_device_configuration_delegate.h",
    "keyboard_observer.h",
    "layer_tree_frame_sink_holder.cc",
    "layer_tree_frame_sink_holder.h",
    "mime_utils.cc",
    "mime_utils.h",
    "permission.cc",
    "permission.h",
    "pointer.cc",
    "pointer.h",
    "pointer_constraint_delegate.h",
    "pointer_delegate.h",
    "seat.cc",
    "seat.h",
    "seat_observer.h",
    "shared_memory.cc",
    "shared_memory.h",
    "shell_surface_util.cc",
    "shell_surface_util.h",
    "sub_surface.cc",
    "sub_surface.h",
    "surface.cc",
    "surface.h",
    "surface_delegate.h",
    "surface_observer.h",
    "surface_tree_host.cc",
    "surface_tree_host.h",
    "touch.cc",
    "touch.h",
    "touch_delegate.h",
    "vsync_timing_manager.cc",
    "vsync_timing_manager.h",
    "wm_helper.cc",
    "wm_helper.h",
  ]

  deps = [
    "//base",
    "//cc",
    "//components/viz/host",
    "//components/viz/service",
    "//device/gamepad",
    "//device/gamepad/public/cpp:shared_with_blink",
    "//gpu",
    "//gpu/command_buffer/client:raster_interface",
    "//net",
    "//services/data_decoder/public/cpp",
    "//services/viz/privileged/mojom/compositing",
    "//skia",
    "//third_party/blink/public/common",
    "//ui/aura",
    "//ui/base/ime",
    "//ui/compositor",
    "//ui/compositor_extra",
    "//ui/display/manager",
    "//ui/events/devices:devices",
    "//ui/events/ozone",
    "//ui/gfx",
    "//ui/gfx/geometry",
    "//ui/gl",
    "//ui/message_center",
    "//ui/message_center/public/cpp",
    "//ui/ozone",
    "//ui/views",
    "//ui/wm",
    "//ui/wm/public",
  ]

  if (is_chromeos) {
    deps += [
      "//ash/keyboard/ui",
      "//ash/public/cpp",
      "//chromeos/constants",
    ]
    sources += [
      "client_controlled_accelerators.cc",
      "client_controlled_accelerators.h",
      "client_controlled_shell_surface.cc",
      "client_controlled_shell_surface.h",
      "gaming_seat.cc",
      "gaming_seat.h",
      "input_method_surface.cc",
      "input_method_surface.h",
      "input_method_surface_manager.h",
      "keyboard.cc",
      "keyboard.h",
      "notification.cc",
      "notification.h",
      "notification_surface.cc",
      "notification_surface.h",
      "notification_surface_manager.h",
      "shell_surface.cc",
      "shell_surface.h",
      "shell_surface_base.cc",
      "shell_surface_base.h",
      "text_input.cc",
      "text_input.h",
      "wm_helper_chromeos.cc",
      "wm_helper_chromeos.h",
      "xdg_shell_surface.cc",
      "xdg_shell_surface.h",
    ]
  }

  if (is_chromecast) {
    deps += [ "//ui/accessibility:accessibility" ]
    sources += [
      "fullscreen_shell_surface.cc",
      "fullscreen_shell_surface.h",
    ]
  }
}

source_set("test_support") {
  testonly = true

  sources = [
    "test/exo_test_base_views.cc",
    "test/exo_test_base_views.h",
    "test/exo_test_suite_aura.cc",
    "test/exo_test_suite_aura.h",
  ]

  deps = [
    ":exo",
    "//base",
    "//base/test:test_support",
    "//components/viz/service:service",
    "//gpu",
    "//skia",
    "//testing/gtest",
    "//ui/aura",
    "//ui/base/ime/init",
    "//ui/compositor",
    "//ui/compositor:test_support",
    "//ui/display/manager",
    "//ui/gfx/geometry",
    "//ui/gl:test_support",
    "//ui/views",
    "//ui/views:test_support",
    "//ui/wm",
  ]

  if (is_chromeos) {
    sources += [
      "test/exo_test_base.cc",
      "test/exo_test_base.h",
      "test/exo_test_helper.cc",
      "test/exo_test_helper.h",
    ]
    deps += [
      "//ash:test_support",
      "//ash/public/cpp",
    ]
  }
}

source_set("unit_tests") {
  testonly = true

  deps = [
    ":exo",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//cc",
    "//cc:test_support",
    "//components/user_manager",
    "//components/viz/service",
    "//components/viz/test:test_support",
    "//content/test:test_support",
    "//device/gamepad:test_helpers",
    "//gpu/command_buffer/client:raster_interface",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/aura",
    "//ui/compositor:test_support",
    "//ui/compositor_extra",
    "//ui/events:dom_keycode_converter",
    "//ui/events:test_support",
    "//ui/events/ozone",
    "//ui/gfx",
    "//ui/message_center",
    "//ui/views",
    "//ui/wm",
  ]

  sources = [
    "mime_utils_unittest.cc",
  ]

  if (use_ozone) {
    deps += [ "//ui/ozone" ]
  }

  if (is_chromeos) {
    sources += [
      "../../ui/events/ozone/gamepad/gamepad_event.cc",
      "buffer_unittest.cc",
      "client_controlled_shell_surface_unittest.cc",
      "data_device_unittest.cc",
      "data_offer_unittest.cc",
      "data_source_unittest.cc",
      "display_unittest.cc",
      "gaming_seat_unittest.cc",
      "keyboard_unittest.cc",
      "notification_unittest.cc",
      "permission_unittest.cc",
      "pointer_unittest.cc",
      "seat_unittest.cc",
      "shared_memory_unittest.cc",
      "shell_surface_unittest.cc",
      "sub_surface_unittest.cc",
      "surface_unittest.cc",
      "text_input_unittest.cc",
      "touch_unittest.cc",
      "xdg_shell_surface_unittest.cc",
    ]

    deps += [
      "//ash",
      "//ash:test_support",
      "//ash/keyboard/ui",
      "//ash/public/cpp",
    ]
  }

  if (is_chromecast) {
    deps += [ "//ui/accessibility:accessibility" ]
    sources += [ "fullscreen_shell_surface_unittest.cc" ]
  }
}

test("exo_unittests") {
  sources = [
    "test/run_all_unittests.cc",
  ]

  deps = [
    ":test_support",
    ":unit_tests",
    "//base",
    "//base/test:test_support",
    "//cc:test_support",
    "//components/viz/test:test_support",
    "//device/gamepad:test_helpers",
    "//mojo/core/embedder",
    "//testing/gtest",
    "//ui/aura",
    "//ui/aura:test_support",
    "//ui/base",
    "//ui/compositor:test_support",
    "//ui/display:display_manager_test_api",
    "//ui/gl:test_support",
  ]

  data_deps = []

  if (is_linux) {
    deps += [ "//components/exo/wayland:unit_tests" ]
  }

  if (is_chromeos) {
    sources += [
      "../../ash/test/ash_test_suite.cc",
      "../../ash/test/ash_test_suite.h",
    ]

    deps += [
      "//ash:test_support",
      "//ash/public/cpp",
    ]

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