# 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/ui.gni")
import("//mojo/public/mojo_application.gni")
import("//testing/test.gni")

mojo_native_application("view_manager") {
  sources = [
    "main.cc",
    "view_manager_app.cc",
    "view_manager_app.h",
  ]

  deps = [
    ":view_manager_lib",
    "//base",
    "//mojo/application",
    "//mojo/common:tracing_impl",
    "//mojo/environment:chromium",
    "//mojo/converters/geometry",
    "//mojo/public/cpp/bindings:bindings",
    "//mojo/services/view_manager/public/interfaces",
    "//mojo/services/window_manager/public/interfaces",
  ]
}

source_set("view_manager_lib") {
  sources = [
    "access_policy.h",
    "access_policy_delegate.h",
    "animation_runner.cc",
    "animation_runner.h",
    "animation_runner_observer.h",
    "client_connection.cc",
    "client_connection.h",
    "connection_manager.cc",
    "connection_manager.h",
    "connection_manager_delegate.h",
    "default_access_policy.cc",
    "default_access_policy.h",
    "display_manager.cc",
    "display_manager.h",
    "focus_controller.cc",
    "focus_controller.h",
    "focus_controller_delegate.h",
    "gesture_manager.cc",
    "gesture_manager.h",
    "gesture_manager_delegate.h",
    "scheduled_animation_group.cc",
    "scheduled_animation_group.h",
    "server_view.cc",
    "server_view.h",
    "server_view_delegate.h",
    "server_view_drawn_tracker.cc",
    "server_view_drawn_tracker.h",
    "server_view_drawn_tracker_observer.h",
    "server_view_observer.h",
    "view_coordinate_conversions.cc",
    "view_coordinate_conversions.h",
    "view_locator.cc",
    "view_locator.h",
    "view_manager_service_impl.cc",
    "view_manager_service_impl.h",
    "window_manager_access_policy.cc",
    "window_manager_access_policy.h",
  ]

  public_deps = [
    "//mojo/services/view_manager/public/cpp",
  ]

  deps = [
    "//base",
    "//cc/surfaces",
    "//cc/surfaces:surface_id",
    "//mojo/application",
    "//mojo/common",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/converters/surfaces",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/bindings:callback",
    "//mojo/public/interfaces/application",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/input_events/public/interfaces",
    "//mojo/services/native_viewport/public/interfaces",
    "//mojo/services/surfaces/public/cpp",
    "//mojo/services/surfaces/public/interfaces",
    "//mojo/services/view_manager/public/interfaces",
    "//mojo/services/view_manager/public/cpp:common",
    "//mojo/services/window_manager/public/interfaces",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

source_set("test_support") {
  testonly = true

  sources = [
    "test_change_tracker.cc",
    "test_change_tracker.h",
  ]

  deps = [
    "//base",
    "//mojo/common",
    "//mojo/public/cpp/bindings:bindings",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/services/view_manager/public/cpp:common",
    "//mojo/services/view_manager/public/interfaces",
  ]
}

test("view_manager_service_unittests") {
  sources = [
    "animation_runner_unittest.cc",
    "focus_controller_unittest.cc",
    "gesture_manager_unittest.cc",
    "scheduled_animation_group_unittest.cc",
    "server_view_drawn_tracker_unittest.cc",
    "test_server_view_delegate.cc",
    "test_server_view_delegate.h",
    "view_coordinate_conversions_unittest.cc",
    "view_manager_service_unittest.cc",
  ]

  deps = [
    ":test_support",
    ":view_manager_lib",
    "//base",
    "//base/test:test_config",
    "//mojo/converters/geometry",
    "//mojo/converters/input_events",
    "//mojo/edk/test:run_all_unittests",
    "//mojo/environment:chromium",
    "//mojo/public/cpp/bindings",
    "//mojo/public/interfaces/application",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/input_events/public/interfaces",
    "//mojo/services/native_viewport/public/cpp:args",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/services/view_manager/public/interfaces",
    "//mojo/services/window_manager/public/interfaces",
    "//testing/gtest",
    "//ui/gfx",
    "//ui/gfx:test_support",
    "//ui/gfx/geometry",
  ]

  if (!is_android) {  # TODO(GYP) Enable on Android when osmesa links.
    deps += [ "//third_party/mesa:osmesa" ]
  }
}

mojo_native_application("mojo_view_manager_client_apptests") {
  testonly = true

  sources = [
    "view_manager_client_apptest.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_config",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/services/geometry/public/cpp:cpp",
    "//mojo/services/view_manager/public/cpp",
  ]
}

mojo_native_application("view_manager_service_apptests") {
  testonly = true

  sources = [
    "view_manager_service_apptest.cc",
  ]

  deps = [
    ":test_support",
    "//base",
    "//mojo/application",
    "//mojo/application:test_support",
    "//mojo/common",
    "//mojo/public/cpp/bindings",
    "//mojo/services/geometry/public/interfaces",
    "//mojo/services/view_manager/public/cpp",
    "//mojo/services/view_manager/public/interfaces",
    "//mojo/services/window_manager/public/interfaces",
  ]
}
