# 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/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/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/converters/array_string",
    "//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",
  ]
}
