# 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")

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/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_support",
    "//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("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",
  ]
}
