# 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",
    "scheduled_animation_group.cc",
    "scheduled_animation_group.h",
    "server_view.cc",
    "server_view.h",
    "server_view_delegate.h",
    "view_coordinate_conversions.cc",
    "view_coordinate_conversions.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",
    "scheduled_animation_group_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/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",
  ]
}
