# 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",
    "view_manager_root_connection.cc",
    "view_manager_root_connection.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/interfaces",
    "//mojo/services/window_manager/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/cpp",
  ]

  deps = [
    "//base",
    "//cc/surfaces",
    "//cc/surfaces:surface_id",
    "//mojo/application",
    "//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/interfaces",
    "//mojo/services/input_events/interfaces",
    "//mojo/services/native_viewport/interfaces",
    "//mojo/services/surfaces/cpp",
    "//mojo/services/surfaces/interfaces",
    "//mojo/services/view_manager/interfaces",
    "//mojo/services/view_manager/cpp:common",
    "//mojo/services/window_manager/interfaces",
    "//ui/gfx",
    "//ui/gfx/geometry",
  ]
}

source_set("test_support") {
  testonly = true

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

  deps = [
    "//base",
    "//mojo/converters/array_string",
    "//mojo/public/cpp/bindings:bindings",
    "//mojo/services/geometry/interfaces",
    "//mojo/services/view_manager/cpp",
    "//mojo/services/view_manager/cpp:common",
    "//mojo/services/view_manager/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/interfaces",
    "//mojo/services/input_events/interfaces",
    "//mojo/services/native_viewport/cpp:args",
    "//mojo/services/view_manager/cpp",
    "//mojo/services/view_manager/interfaces",
    "//mojo/services/window_manager/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/cpp",
    "//mojo/services/view_manager/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/interfaces",
    "//mojo/services/view_manager/cpp",
    "//mojo/services/view_manager/interfaces",
    "//mojo/services/window_manager/interfaces",
  ]
}
